diff --git a/expat/tests/handlers.c b/expat/tests/handlers.c
index 4cad4080..8fcd3b43 100644
--- a/expat/tests/handlers.c
+++ b/expat/tests/handlers.c
@@ -234,6 +234,25 @@ overwrite_end_checker(void *userData, const XML_Char *name) {
CharData_AppendXMLChars(storage, XCS("\n"), 1);
}
+void XMLCALL
+start_element_fail(void *userData, const XML_Char *name,
+ const XML_Char **atts) {
+ UNUSED_P(userData);
+ UNUSED_P(name);
+ UNUSED_P(atts);
+
+ /* We should never get here. */
+ fail("should never reach start_element_fail()");
+}
+
+void XMLCALL
+start_ns_clearing_start_element(void *userData, const XML_Char *prefix,
+ const XML_Char *uri) {
+ UNUSED_P(prefix);
+ UNUSED_P(uri);
+ XML_SetStartElementHandler((XML_Parser)userData, NULL);
+}
+
/* Text encoding handlers */
int XMLCALL
diff --git a/expat/tests/handlers.h b/expat/tests/handlers.h
index 0e6dfed9..d3805d6d 100644
--- a/expat/tests/handlers.h
+++ b/expat/tests/handlers.h
@@ -113,6 +113,13 @@ extern void XMLCALL overwrite_start_checker(void *userData,
extern void XMLCALL overwrite_end_checker(void *userData, const XML_Char *name);
+extern void XMLCALL start_element_fail(void *userData, const XML_Char *name,
+ const XML_Char **atts);
+
+extern void XMLCALL start_ns_clearing_start_element(void *userData,
+ const XML_Char *prefix,
+ const XML_Char *uri);
+
/* Text encoding handlers */
extern int XMLCALL UnknownEncodingHandler(void *data, const XML_Char *encoding,
diff --git a/expat/tests/ns_tests.c b/expat/tests/ns_tests.c
index a22c22f6..02e9912c 100644
--- a/expat/tests/ns_tests.c
+++ b/expat/tests/ns_tests.c
@@ -165,6 +165,24 @@ START_TEST(test_ns_tagname_overwrite_triplet) {
}
END_TEST
+/* Regression test for SF bug #620343. */
+START_TEST(test_start_ns_clears_start_element) {
+ /* This needs to use separate start/end tags; using the empty tag
+ syntax doesn't cause the problematic path through Expat to be
+ taken.
+ */
+ const char *text = "";
+
+ XML_SetStartElementHandler(g_parser, start_element_fail);
+ XML_SetStartNamespaceDeclHandler(g_parser, start_ns_clearing_start_element);
+ XML_SetEndNamespaceDeclHandler(g_parser, dummy_end_namespace_decl_handler);
+ XML_UseParserAsHandlerArg(g_parser);
+ if (_XML_Parse_SINGLE_BYTES(g_parser, text, (int)strlen(text), XML_TRUE)
+ == XML_STATUS_ERROR)
+ xml_failure(g_parser);
+}
+END_TEST
+
TCase *
make_namespace_test_case(Suite *s) {
TCase *tc_namespace = tcase_create("XML namespaces");
@@ -175,6 +193,7 @@ make_namespace_test_case(Suite *s) {
tcase_add_test(tc_namespace, test_ns_parser_reset);
tcase_add_test(tc_namespace, test_ns_tagname_overwrite);
tcase_add_test(tc_namespace, test_ns_tagname_overwrite_triplet);
+ tcase_add_test(tc_namespace, test_start_ns_clears_start_element);
return tc_namespace; /* TEMPORARY; this will become a void function */
}
diff --git a/expat/tests/runtests.c b/expat/tests/runtests.c
index dac902b6..7a6bf794 100644
--- a/expat/tests/runtests.c
+++ b/expat/tests/runtests.c
@@ -79,43 +79,6 @@ XML_Parser g_parser = NULL;
* Namespaces tests.
*/
-/* Regression test for SF bug #620343. */
-static void XMLCALL
-start_element_fail(void *userData, const XML_Char *name,
- const XML_Char **atts) {
- UNUSED_P(userData);
- UNUSED_P(name);
- UNUSED_P(atts);
-
- /* We should never get here. */
- fail("should never reach start_element_fail()");
-}
-
-static void XMLCALL
-start_ns_clearing_start_element(void *userData, const XML_Char *prefix,
- const XML_Char *uri) {
- UNUSED_P(prefix);
- UNUSED_P(uri);
- XML_SetStartElementHandler((XML_Parser)userData, NULL);
-}
-
-START_TEST(test_start_ns_clears_start_element) {
- /* This needs to use separate start/end tags; using the empty tag
- syntax doesn't cause the problematic path through Expat to be
- taken.
- */
- const char *text = "";
-
- XML_SetStartElementHandler(g_parser, start_element_fail);
- XML_SetStartNamespaceDeclHandler(g_parser, start_ns_clearing_start_element);
- XML_SetEndNamespaceDeclHandler(g_parser, dummy_end_namespace_decl_handler);
- XML_UseParserAsHandlerArg(g_parser);
- if (_XML_Parse_SINGLE_BYTES(g_parser, text, (int)strlen(text), XML_TRUE)
- == XML_STATUS_ERROR)
- xml_failure(g_parser);
-}
-END_TEST
-
/* Regression test for SF bug #616863. */
static int XMLCALL
external_entity_handler(XML_Parser parser, const XML_Char *context,
@@ -5158,7 +5121,6 @@ make_suite(void) {
TCase *tc_accounting = tcase_create("accounting tests");
#endif
- tcase_add_test(tc_namespace, test_start_ns_clears_start_element);
tcase_add_test__ifdef_xml_dtd(tc_namespace,
test_default_ns_from_ext_subset_and_ext_ge);
tcase_add_test(tc_namespace, test_ns_prefix_with_empty_uri_1);