diff --git a/expat/tests/runtests.c b/expat/tests/runtests.c index 768902d1..d80b1817 100644 --- a/expat/tests/runtests.c +++ b/expat/tests/runtests.c @@ -4346,6 +4346,57 @@ START_TEST(test_group_choice) } END_TEST +static int XMLCALL +external_entity_public(XML_Parser parser, + const XML_Char *context, + const XML_Char *UNUSED_P(base), + const XML_Char *systemId, + const XML_Char *publicId) +{ + const char *text1 = (const char *)XML_GetUserData(parser); + const char *text2 = ""; + const char *text = NULL; + XML_Parser ext_parser; + int parse_res; + + ext_parser = XML_ExternalEntityParserCreate(parser, context, NULL); + if (ext_parser == NULL) + return XML_STATUS_ERROR; + if (systemId != NULL && !strcmp(systemId, "http://example.org/")) { + text = text1; + } + else if (publicId != NULL && !strcmp(publicId, "foo")) { + text = text2; + } + else + fail("Unexpected parameters to external entity parser"); + parse_res = _XML_Parse_SINGLE_BYTES(ext_parser, text, strlen(text), + XML_TRUE); + XML_ParserFree(ext_parser); + return parse_res; +} + +START_TEST(test_standalone_parameter_entity) +{ + const char *text = + "\n" + "'>\n" + "%entity;\n" + "]>\n" + ""; + char dtd_data[] = + "\n"; + + XML_SetUserData(parser, dtd_data); + XML_SetParamEntityParsing(parser, XML_PARAM_ENTITY_PARSING_ALWAYS); + XML_SetExternalEntityRefHandler(parser, external_entity_public); + if (_XML_Parse_SINGLE_BYTES(parser, text, strlen(text), + XML_TRUE) == XML_STATUS_ERROR) + xml_failure(parser); +} +END_TEST + /* Test skipping of parameter entity in an external DTD */ /* Derived from ibm/invalid/P69/ibm69i01.xml */ START_TEST(test_skipped_parameter_entity) @@ -6108,36 +6159,6 @@ START_TEST(test_alloc_realloc_many_attributes) END_TEST /* Test handling of a public entity with failing allocator */ -static int XMLCALL -external_entity_public(XML_Parser parser, - const XML_Char *context, - const XML_Char *UNUSED_P(base), - const XML_Char *systemId, - const XML_Char *publicId) -{ - const char *text1 = (const char *)XML_GetUserData(parser); - const char *text2 = ""; - const char *text = NULL; - XML_Parser ext_parser; - int parse_res; - - ext_parser = XML_ExternalEntityParserCreate(parser, context, NULL); - if (ext_parser == NULL) - return XML_STATUS_ERROR; - if (systemId != NULL && !strcmp(systemId, "http://example.org/")) { - text = text1; - } - else if (publicId != NULL && !strcmp(publicId, "foo")) { - text = text2; - } - else - fail("Unexpected parameters to external entity parser"); - parse_res = _XML_Parse_SINGLE_BYTES(ext_parser, text, strlen(text), - XML_TRUE); - XML_ParserFree(ext_parser); - return parse_res; -} - START_TEST(test_alloc_public_entity_value) { const char *text = @@ -6956,27 +6977,6 @@ START_TEST(test_alloc_realloc_group_choice) #undef MAX_REALLOC_COUNT END_TEST -START_TEST(test_standalone_parameter_entity) -{ - const char *text = - "\n" - "'>\n" - "%entity;\n" - "]>\n" - ""; - char dtd_data[] = - "\n"; - - XML_SetUserData(parser, dtd_data); - XML_SetParamEntityParsing(parser, XML_PARAM_ENTITY_PARSING_ALWAYS); - XML_SetExternalEntityRefHandler(parser, external_entity_public); - if (_XML_Parse_SINGLE_BYTES(parser, text, strlen(text), - XML_TRUE) == XML_STATUS_ERROR) - xml_failure(parser); -} -END_TEST - static void nsalloc_setup(void)