From 71a293259c2109681c3cbcf4a9fada98896eba6b Mon Sep 17 00:00:00 2001 From: Rhodri James Date: Thu, 15 Jun 2017 19:19:23 +0100 Subject: [PATCH] Test that UTF-16 element local names with non-zero top byte are accepted --- expat/tests/runtests.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/expat/tests/runtests.c b/expat/tests/runtests.c index 03f15155..2328a9e5 100644 --- a/expat/tests/runtests.c +++ b/expat/tests/runtests.c @@ -6843,6 +6843,33 @@ START_TEST(test_ns_utf16_leafname) } END_TEST +static void XMLCALL +start_element_event_handler(void *userData, + const XML_Char *name, + const XML_Char **UNUSED_P(atts)) +{ + CharData_AppendXMLChars((CharData *)userData, name, -1); +} + +START_TEST(test_ns_utf16_element_leafname) +{ + const char text[] = + /* + * where {KHO KHWAI} = U+0E04 = 0xe0 0xb8 0x84 in UTF-8 + */ + "\0<\0n\0:\x0e\x04\0 \0x\0m\0l\0n\0s\0:\0n\0=\0'\0U\0R\0I\0'\0/\0>"; + const XML_Char *expected = "URI \xe0\xb8\x84"; + CharData storage; + + CharData_Init(&storage); + XML_SetStartElementHandler(parser, start_element_event_handler); + XML_SetUserData(parser, &storage); + if (_XML_Parse_SINGLE_BYTES(parser, text, sizeof(text)-1, + XML_TRUE) == XML_STATUS_ERROR) + xml_failure(parser); + CharData_CheckXMLChars(&storage, expected); +} +END_TEST /* Control variable; the number of times duff_allocator() will successfully allocate */ #define ALLOC_ALWAYS_SUCCEED (-1) @@ -11565,6 +11592,7 @@ make_suite(void) tcase_add_test(tc_namespace, test_ns_bad_attr_leafname); tcase_add_test(tc_namespace, test_ns_bad_element_leafname); tcase_add_test(tc_namespace, test_ns_utf16_leafname); + tcase_add_test(tc_namespace, test_ns_utf16_element_leafname); suite_add_tcase(s, tc_misc); tcase_add_checked_fixture(tc_misc, NULL, basic_teardown);