diff --git a/expat/tests/runtests.c b/expat/tests/runtests.c index 178f8d89..330bf875 100644 --- a/expat/tests/runtests.c +++ b/expat/tests/runtests.c @@ -9073,6 +9073,37 @@ external_entity_optioner(XML_Parser parser, return XML_STATUS_ERROR; } +/* This function is void; it will throw a fail() on error, so if it + * returns normally it must have succeeded. + */ +static void +context_realloc_test(XML_Parser parser, const char *text) +{ + ExtOption options[] = { + { "foo", ""}, + { "bar", "" }, + { NULL, NULL } + }; + int i; +#define MAX_REALLOC_COUNT 5 + + for (i = 0; i < MAX_REALLOC_COUNT; i++) { + reallocation_count = i; + XML_SetUserData(parser, options); + XML_SetParamEntityParsing(parser, XML_PARAM_ENTITY_PARSING_ALWAYS); + XML_SetExternalEntityRefHandler(parser, external_entity_optioner); + if (_XML_Parse_SINGLE_BYTES(parser, text, strlen(text), + XML_TRUE) != XML_STATUS_ERROR) + break; + XML_ParserReset(parser, NULL); + } + if (i == 0) + fail("Parsing worked despite failing reallocations"); + else if (i == MAX_REALLOC_COUNT) + fail("Parsing failed even at max reallocation count"); +#undef MAX_REALLOC_COUNT +} + START_TEST(test_nsalloc_realloc_long_context) { const char *text = @@ -9100,30 +9131,9 @@ START_TEST(test_nsalloc_realloc_long_context) "'>\n" "&en;" ""; - ExtOption options[] = { - { "foo", ""}, - { "bar", "" }, - { NULL, NULL } - }; - int i; -#define MAX_REALLOC_COUNT 5 - for (i = 0; i < MAX_REALLOC_COUNT; i++) { - reallocation_count = i; - XML_SetUserData(parser, options); - XML_SetParamEntityParsing(parser, XML_PARAM_ENTITY_PARSING_ALWAYS); - XML_SetExternalEntityRefHandler(parser, external_entity_optioner); - if (_XML_Parse_SINGLE_BYTES(parser, text, strlen(text), - XML_TRUE) != XML_STATUS_ERROR) - break; - XML_ParserReset(parser, NULL); - } - if (i == 0) - fail("Parsing worked despite failing reallocations"); - else if (i == MAX_REALLOC_COUNT) - fail("Parsing failed even at max reallocation count"); + context_realloc_test(parser, text); } -#undef MAX_REALLOC_COUNT END_TEST START_TEST(test_nsalloc_realloc_long_context_2) @@ -9153,30 +9163,9 @@ START_TEST(test_nsalloc_realloc_long_context_2) "'>\n" "&en;" ""; - ExtOption options[] = { - { "foo", ""}, - { "bar", "" }, - { NULL, NULL } - }; - int i; -#define MAX_REALLOC_COUNT 5 - for (i = 0; i < MAX_REALLOC_COUNT; i++) { - reallocation_count = i; - XML_SetUserData(parser, options); - XML_SetParamEntityParsing(parser, XML_PARAM_ENTITY_PARSING_ALWAYS); - XML_SetExternalEntityRefHandler(parser, external_entity_optioner); - if (_XML_Parse_SINGLE_BYTES(parser, text, strlen(text), - XML_TRUE) != XML_STATUS_ERROR) - break; - XML_ParserReset(parser, NULL); - } - if (i == 0) - fail("Parsing worked despite failing reallocations"); - else if (i == MAX_REALLOC_COUNT) - fail("Parsing failed even at max reallocation count"); + context_realloc_test(parser, text); } -#undef MAX_REALLOC_COUNT END_TEST START_TEST(test_nsalloc_realloc_long_context_3) @@ -9206,30 +9195,9 @@ START_TEST(test_nsalloc_realloc_long_context_3) "'>\n" "&en;" ""; - ExtOption options[] = { - { "foo", ""}, - { "bar", "" }, - { NULL, NULL } - }; - int i; -#define MAX_REALLOC_COUNT 5 - for (i = 0; i < MAX_REALLOC_COUNT; i++) { - reallocation_count = i; - XML_SetUserData(parser, options); - XML_SetParamEntityParsing(parser, XML_PARAM_ENTITY_PARSING_ALWAYS); - XML_SetExternalEntityRefHandler(parser, external_entity_optioner); - if (_XML_Parse_SINGLE_BYTES(parser, text, strlen(text), - XML_TRUE) != XML_STATUS_ERROR) - break; - XML_ParserReset(parser, NULL); - } - if (i == 0) - fail("Parsing worked despite failing reallocations"); - else if (i == MAX_REALLOC_COUNT) - fail("Parsing failed even at max reallocation count"); + context_realloc_test(parser, text); } -#undef MAX_REALLOC_COUNT END_TEST START_TEST(test_nsalloc_realloc_long_context_4) @@ -9259,30 +9227,9 @@ START_TEST(test_nsalloc_realloc_long_context_4) "'>\n" "&en;" ""; - ExtOption options[] = { - { "foo", ""}, - { "bar", "" }, - { NULL, NULL } - }; - int i; -#define MAX_REALLOC_COUNT 5 - for (i = 0; i < MAX_REALLOC_COUNT; i++) { - reallocation_count = i; - XML_SetUserData(parser, options); - XML_SetParamEntityParsing(parser, XML_PARAM_ENTITY_PARSING_ALWAYS); - XML_SetExternalEntityRefHandler(parser, external_entity_optioner); - if (_XML_Parse_SINGLE_BYTES(parser, text, strlen(text), - XML_TRUE) != XML_STATUS_ERROR) - break; - XML_ParserReset(parser, NULL); - } - if (i == 0) - fail("Parsing worked despite failing reallocations"); - else if (i == MAX_REALLOC_COUNT) - fail("Parsing failed even at max reallocation count"); + context_realloc_test(parser, text); } -#undef MAX_REALLOC_COUNT END_TEST