diff --git a/expat/tests/basic_tests.c b/expat/tests/basic_tests.c
index e923b527..94def68a 100644
--- a/expat/tests/basic_tests.c
+++ b/expat/tests/basic_tests.c
@@ -2867,6 +2867,87 @@ START_TEST(test_ignore_section) {
}
END_TEST
+START_TEST(test_ignore_section_utf16) {
+ const char text[] =
+ /* */
+ "<\0!\0D\0O\0C\0T\0Y\0P\0E\0 \0d\0 "
+ "\0S\0Y\0S\0T\0E\0M\0 \0'\0s\0'\0>\0\n\0"
+ /* &en; */
+ "<\0d\0>\0<\0e\0>\0&\0e\0n\0;\0<\0/\0e\0>\0<\0/\0d\0>\0";
+ const XML_Char *expected = XCS("]]>\n&en;");
+ CharData storage;
+
+ CharData_Init(&storage);
+ XML_SetParamEntityParsing(g_parser, XML_PARAM_ENTITY_PARSING_ALWAYS);
+ XML_SetUserData(g_parser, &storage);
+ XML_SetExternalEntityRefHandler(g_parser, external_entity_load_ignore_utf16);
+ XML_SetDefaultHandler(g_parser, accumulate_characters);
+ XML_SetStartDoctypeDeclHandler(g_parser, dummy_start_doctype_handler);
+ XML_SetEndDoctypeDeclHandler(g_parser, dummy_end_doctype_handler);
+ XML_SetElementDeclHandler(g_parser, dummy_element_decl_handler);
+ XML_SetStartElementHandler(g_parser, dummy_start_element);
+ XML_SetEndElementHandler(g_parser, dummy_end_element);
+ if (_XML_Parse_SINGLE_BYTES(g_parser, text, (int)sizeof(text) - 1, XML_TRUE)
+ == XML_STATUS_ERROR)
+ xml_failure(g_parser);
+ CharData_CheckXMLChars(&storage, expected);
+}
+END_TEST
+
+START_TEST(test_ignore_section_utf16_be) {
+ const char text[] =
+ /* */
+ "\0<\0!\0D\0O\0C\0T\0Y\0P\0E\0 \0d\0 "
+ "\0S\0Y\0S\0T\0E\0M\0 \0'\0s\0'\0>\0\n"
+ /* &en; */
+ "\0<\0d\0>\0<\0e\0>\0&\0e\0n\0;\0<\0/\0e\0>\0<\0/\0d\0>";
+ const XML_Char *expected = XCS("]]>\n&en;");
+ CharData storage;
+
+ CharData_Init(&storage);
+ XML_SetParamEntityParsing(g_parser, XML_PARAM_ENTITY_PARSING_ALWAYS);
+ XML_SetUserData(g_parser, &storage);
+ XML_SetExternalEntityRefHandler(g_parser,
+ external_entity_load_ignore_utf16_be);
+ XML_SetDefaultHandler(g_parser, accumulate_characters);
+ XML_SetStartDoctypeDeclHandler(g_parser, dummy_start_doctype_handler);
+ XML_SetEndDoctypeDeclHandler(g_parser, dummy_end_doctype_handler);
+ XML_SetElementDeclHandler(g_parser, dummy_element_decl_handler);
+ XML_SetStartElementHandler(g_parser, dummy_start_element);
+ XML_SetEndElementHandler(g_parser, dummy_end_element);
+ if (_XML_Parse_SINGLE_BYTES(g_parser, text, (int)sizeof(text) - 1, XML_TRUE)
+ == XML_STATUS_ERROR)
+ xml_failure(g_parser);
+ CharData_CheckXMLChars(&storage, expected);
+}
+END_TEST
+
+/* Test mis-formatted conditional exclusion */
+START_TEST(test_bad_ignore_section) {
+ const char *text = "\n"
+ "&entity;";
+ ExtFaults faults[]
+ = {{"", "Invalid XML character not faulted", NULL,
+ XML_ERROR_INVALID_TOKEN},
+ {/* FIrst two bytes of a three-byte char */
+ "parse_text != NULL; fault++) {
+ XML_SetParamEntityParsing(g_parser, XML_PARAM_ENTITY_PARSING_ALWAYS);
+ XML_SetExternalEntityRefHandler(g_parser, external_entity_faulter);
+ XML_SetUserData(g_parser, fault);
+ expect_failure(text, XML_ERROR_EXTERNAL_ENTITY_HANDLING,
+ "Incomplete IGNORE section not failed");
+ XML_ParserReset(g_parser, NULL);
+ }
+}
+END_TEST
+
TCase *
make_basic_test_case(Suite *s) {
TCase *tc_basic = tcase_create("basic tests");
@@ -2994,6 +3075,9 @@ make_basic_test_case(Suite *s) {
tcase_add_test__ifdef_xml_dtd(tc_basic, test_invalid_tag_in_dtd);
tcase_add_test(tc_basic, test_not_predefined_entities);
tcase_add_test__ifdef_xml_dtd(tc_basic, test_ignore_section);
+ tcase_add_test__ifdef_xml_dtd(tc_basic, test_ignore_section_utf16);
+ tcase_add_test__ifdef_xml_dtd(tc_basic, test_ignore_section_utf16_be);
+ tcase_add_test__ifdef_xml_dtd(tc_basic, test_bad_ignore_section);
return tc_basic; /* TEMPORARY: this will become a void function */
}
diff --git a/expat/tests/handlers.c b/expat/tests/handlers.c
index 8ea8491e..34e9ee3f 100644
--- a/expat/tests/handlers.c
+++ b/expat/tests/handlers.c
@@ -675,6 +675,58 @@ external_entity_load_ignore(XML_Parser parser, const XML_Char *context,
return XML_STATUS_OK;
}
+int XMLCALL
+external_entity_load_ignore_utf16(XML_Parser parser, const XML_Char *context,
+ const XML_Char *base,
+ const XML_Char *systemId,
+ const XML_Char *publicId) {
+ const char text[] =
+ /* ]]> */
+ "<\0!\0[\0I\0G\0N\0O\0R\0E\0[\0"
+ "<\0!\0E\0L\0E\0M\0E\0N\0T\0 \0e\0 \0"
+ "(\0#\0P\0C\0D\0A\0T\0A\0)\0*\0>\0]\0]\0>\0";
+ XML_Parser ext_parser;
+
+ UNUSED_P(base);
+ UNUSED_P(systemId);
+ UNUSED_P(publicId);
+ ext_parser = XML_ExternalEntityParserCreate(parser, context, NULL);
+ if (ext_parser == NULL)
+ fail("Could not create external entity parser");
+ if (_XML_Parse_SINGLE_BYTES(ext_parser, text, (int)sizeof(text) - 1, XML_TRUE)
+ == XML_STATUS_ERROR)
+ xml_failure(parser);
+
+ XML_ParserFree(ext_parser);
+ return XML_STATUS_OK;
+}
+
+int XMLCALL
+external_entity_load_ignore_utf16_be(XML_Parser parser, const XML_Char *context,
+ const XML_Char *base,
+ const XML_Char *systemId,
+ const XML_Char *publicId) {
+ const char text[] =
+ /* ]]> */
+ "\0<\0!\0[\0I\0G\0N\0O\0R\0E\0["
+ "\0<\0!\0E\0L\0E\0M\0E\0N\0T\0 \0e\0 "
+ "\0(\0#\0P\0C\0D\0A\0T\0A\0)\0*\0>\0]\0]\0>";
+ XML_Parser ext_parser;
+
+ UNUSED_P(base);
+ UNUSED_P(systemId);
+ UNUSED_P(publicId);
+ ext_parser = XML_ExternalEntityParserCreate(parser, context, NULL);
+ if (ext_parser == NULL)
+ fail("Could not create external entity parser");
+ if (_XML_Parse_SINGLE_BYTES(ext_parser, text, (int)sizeof(text) - 1, XML_TRUE)
+ == XML_STATUS_ERROR)
+ xml_failure(parser);
+
+ XML_ParserFree(ext_parser);
+ return XML_STATUS_OK;
+}
+
/* NotStandalone handlers */
int XMLCALL
diff --git a/expat/tests/handlers.h b/expat/tests/handlers.h
index b0d5233f..57d19e3e 100644
--- a/expat/tests/handlers.h
+++ b/expat/tests/handlers.h
@@ -226,6 +226,16 @@ extern int XMLCALL external_entity_load_ignore(XML_Parser parser,
const XML_Char *systemId,
const XML_Char *publicId);
+extern int XMLCALL external_entity_load_ignore_utf16(XML_Parser parser,
+ const XML_Char *context,
+ const XML_Char *base,
+ const XML_Char *systemId,
+ const XML_Char *publicId);
+
+extern int XMLCALL external_entity_load_ignore_utf16_be(
+ XML_Parser parser, const XML_Char *context, const XML_Char *base,
+ const XML_Char *systemId, const XML_Char *publicId);
+
/* NotStandalone handlers */
extern int XMLCALL reject_not_standalone_handler(void *userData);
diff --git a/expat/tests/runtests.c b/expat/tests/runtests.c
index 1d11c5c2..92a89707 100644
--- a/expat/tests/runtests.c
+++ b/expat/tests/runtests.c
@@ -74,139 +74,6 @@
XML_Parser g_parser = NULL;
-static int XMLCALL
-external_entity_load_ignore_utf16(XML_Parser parser, const XML_Char *context,
- const XML_Char *base,
- const XML_Char *systemId,
- const XML_Char *publicId) {
- const char text[] =
- /* ]]> */
- "<\0!\0[\0I\0G\0N\0O\0R\0E\0[\0"
- "<\0!\0E\0L\0E\0M\0E\0N\0T\0 \0e\0 \0"
- "(\0#\0P\0C\0D\0A\0T\0A\0)\0*\0>\0]\0]\0>\0";
- XML_Parser ext_parser;
-
- UNUSED_P(base);
- UNUSED_P(systemId);
- UNUSED_P(publicId);
- ext_parser = XML_ExternalEntityParserCreate(parser, context, NULL);
- if (ext_parser == NULL)
- fail("Could not create external entity parser");
- if (_XML_Parse_SINGLE_BYTES(ext_parser, text, (int)sizeof(text) - 1, XML_TRUE)
- == XML_STATUS_ERROR)
- xml_failure(parser);
-
- XML_ParserFree(ext_parser);
- return XML_STATUS_OK;
-}
-
-START_TEST(test_ignore_section_utf16) {
- const char text[] =
- /* */
- "<\0!\0D\0O\0C\0T\0Y\0P\0E\0 \0d\0 "
- "\0S\0Y\0S\0T\0E\0M\0 \0'\0s\0'\0>\0\n\0"
- /* &en; */
- "<\0d\0>\0<\0e\0>\0&\0e\0n\0;\0<\0/\0e\0>\0<\0/\0d\0>\0";
- const XML_Char *expected = XCS("]]>\n&en;");
- CharData storage;
-
- CharData_Init(&storage);
- XML_SetParamEntityParsing(g_parser, XML_PARAM_ENTITY_PARSING_ALWAYS);
- XML_SetUserData(g_parser, &storage);
- XML_SetExternalEntityRefHandler(g_parser, external_entity_load_ignore_utf16);
- XML_SetDefaultHandler(g_parser, accumulate_characters);
- XML_SetStartDoctypeDeclHandler(g_parser, dummy_start_doctype_handler);
- XML_SetEndDoctypeDeclHandler(g_parser, dummy_end_doctype_handler);
- XML_SetElementDeclHandler(g_parser, dummy_element_decl_handler);
- XML_SetStartElementHandler(g_parser, dummy_start_element);
- XML_SetEndElementHandler(g_parser, dummy_end_element);
- if (_XML_Parse_SINGLE_BYTES(g_parser, text, (int)sizeof(text) - 1, XML_TRUE)
- == XML_STATUS_ERROR)
- xml_failure(g_parser);
- CharData_CheckXMLChars(&storage, expected);
-}
-END_TEST
-
-static int XMLCALL
-external_entity_load_ignore_utf16_be(XML_Parser parser, const XML_Char *context,
- const XML_Char *base,
- const XML_Char *systemId,
- const XML_Char *publicId) {
- const char text[] =
- /* ]]> */
- "\0<\0!\0[\0I\0G\0N\0O\0R\0E\0["
- "\0<\0!\0E\0L\0E\0M\0E\0N\0T\0 \0e\0 "
- "\0(\0#\0P\0C\0D\0A\0T\0A\0)\0*\0>\0]\0]\0>";
- XML_Parser ext_parser;
-
- UNUSED_P(base);
- UNUSED_P(systemId);
- UNUSED_P(publicId);
- ext_parser = XML_ExternalEntityParserCreate(parser, context, NULL);
- if (ext_parser == NULL)
- fail("Could not create external entity parser");
- if (_XML_Parse_SINGLE_BYTES(ext_parser, text, (int)sizeof(text) - 1, XML_TRUE)
- == XML_STATUS_ERROR)
- xml_failure(parser);
-
- XML_ParserFree(ext_parser);
- return XML_STATUS_OK;
-}
-
-START_TEST(test_ignore_section_utf16_be) {
- const char text[] =
- /* */
- "\0<\0!\0D\0O\0C\0T\0Y\0P\0E\0 \0d\0 "
- "\0S\0Y\0S\0T\0E\0M\0 \0'\0s\0'\0>\0\n"
- /* &en; */
- "\0<\0d\0>\0<\0e\0>\0&\0e\0n\0;\0<\0/\0e\0>\0<\0/\0d\0>";
- const XML_Char *expected = XCS("]]>\n&en;");
- CharData storage;
-
- CharData_Init(&storage);
- XML_SetParamEntityParsing(g_parser, XML_PARAM_ENTITY_PARSING_ALWAYS);
- XML_SetUserData(g_parser, &storage);
- XML_SetExternalEntityRefHandler(g_parser,
- external_entity_load_ignore_utf16_be);
- XML_SetDefaultHandler(g_parser, accumulate_characters);
- XML_SetStartDoctypeDeclHandler(g_parser, dummy_start_doctype_handler);
- XML_SetEndDoctypeDeclHandler(g_parser, dummy_end_doctype_handler);
- XML_SetElementDeclHandler(g_parser, dummy_element_decl_handler);
- XML_SetStartElementHandler(g_parser, dummy_start_element);
- XML_SetEndElementHandler(g_parser, dummy_end_element);
- if (_XML_Parse_SINGLE_BYTES(g_parser, text, (int)sizeof(text) - 1, XML_TRUE)
- == XML_STATUS_ERROR)
- xml_failure(g_parser);
- CharData_CheckXMLChars(&storage, expected);
-}
-END_TEST
-
-/* Test mis-formatted conditional exclusion */
-START_TEST(test_bad_ignore_section) {
- const char *text = "\n"
- "&entity;";
- ExtFaults faults[]
- = {{"", "Invalid XML character not faulted", NULL,
- XML_ERROR_INVALID_TOKEN},
- {/* FIrst two bytes of a three-byte char */
- "parse_text != NULL; fault++) {
- XML_SetParamEntityParsing(g_parser, XML_PARAM_ENTITY_PARSING_ALWAYS);
- XML_SetExternalEntityRefHandler(g_parser, external_entity_faulter);
- XML_SetUserData(g_parser, fault);
- expect_failure(text, XML_ERROR_EXTERNAL_ENTITY_HANDLING,
- "Incomplete IGNORE section not failed");
- XML_ParserReset(g_parser, NULL);
- }
-}
-END_TEST
-
/* Test recursive parsing */
static int XMLCALL
external_entity_valuer(XML_Parser parser, const XML_Char *context,
@@ -7951,9 +7818,6 @@ make_suite(void) {
TCase *tc_accounting = tcase_create("accounting tests");
#endif
- tcase_add_test__ifdef_xml_dtd(tc_basic, test_ignore_section_utf16);
- tcase_add_test__ifdef_xml_dtd(tc_basic, test_ignore_section_utf16_be);
- tcase_add_test__ifdef_xml_dtd(tc_basic, test_bad_ignore_section);
tcase_add_test__ifdef_xml_dtd(tc_basic, test_external_entity_values);
tcase_add_test__ifdef_xml_dtd(tc_basic, test_ext_entity_not_standalone);
tcase_add_test__ifdef_xml_dtd(tc_basic, test_ext_entity_value_abort);