[Expat-checkins] expat/tests runtests.c,1.36,1.37

Fred L. Drake fdrake@users.sourceforge.net
Thu Nov 7 23:02:31 2002


Update of /cvsroot/expat/expat/tests
In directory usw-pr-cvs1:/tmp/cvs-serv8252

Modified Files:
	runtests.c 
Log Message:
Added regression test for SF bug #616863.
Cleaned up some indentation.
Report the version of the Expat library if not in "silent" mode.


Index: runtests.c
===================================================================
RCS file: /cvsroot/expat/expat/tests/runtests.c,v
retrieving revision 1.36
retrieving revision 1.37
diff -u -d -r1.36 -r1.37
--- runtests.c	8 Oct 2002 17:04:55 -0000	1.36
+++ runtests.c	7 Nov 2002 23:02:26 -0000	1.37
@@ -794,7 +794,7 @@
 /* Regression test for SF bug #620343. */
 static void
 start_element_fail(void *userData,
-                    const XML_Char *name, const XML_Char **atts)
+                   const XML_Char *name, const XML_Char **atts)
 {
     /* We should never get here. */
     fail("should never reach start_element_fail()");
@@ -802,8 +802,8 @@
 
 static void
 start_ns_clearing_start_element(void *userData,
-                                       const XML_Char *prefix,
-                                       const XML_Char *uri)
+                                const XML_Char *prefix,
+                                const XML_Char *uri)
 {
     XML_SetStartElementHandler((XML_Parser) userData, NULL);
 }
@@ -824,6 +824,63 @@
 }
 END_TEST
 
+/* Regression test for SF bug #616863. */
+static int
+external_entity_handler(XML_Parser parser,
+                        const XML_Char *context,
+                        const XML_Char *base,
+                        const XML_Char *systemId,
+                        const XML_Char *publicId) 
+{
+    int callno = 1 + (int)XML_GetUserData(parser);
+    char *text;
+    XML_Parser p2;
+
+    if (callno == 1)
+        text = ("<!ELEMENT doc (e+)>\n"
+                "<!ATTLIST doc xmlns CDATA #IMPLIED>\n"
+                "<!ELEMENT e EMPTY>\n");
+    else
+        text = ("<?xml version='1.0' encoding='us-ascii'?>"
+                "<e/>");
+
+    XML_SetUserData(parser, (void *) callno);
+    p2 = XML_ExternalEntityParserCreate(parser, context, NULL);
+    if (XML_Parse(p2, text, strlen(text), 1) == XML_STATUS_ERROR) {
+        xml_failure(p2);
+        return 0;
+    }
+    XML_ParserFree(p2);
+    return 1;
+}
+
+static void
+start_element_dummy(void *userData,
+                    const XML_Char *name, const XML_Char **atts)
+{
+    return;
+}
+
+START_TEST(test_default_ns_from_ext_subset_and_ext_ge)
+{
+    char *text =
+        "<?xml version='1.0'?>\n"
+        "<!DOCTYPE doc SYSTEM 'http://xml.libexpat.org/doc.dtd' [\n"
+        "  <!ENTITY en SYSTEM 'http://xml.libexpat.org/entity.ent'>\n"
+        "]>\n"
+        "<doc xmlns='http://xml.libexpat.org/ns1'>\n"
+        "&en;\n"
+        "</doc>";
+
+    XML_SetParamEntityParsing(parser, XML_PARAM_ENTITY_PARSING_ALWAYS);
+    XML_SetExternalEntityRefHandler(parser, external_entity_handler);
+    /* We actually need to set this handler to tickle this bug. */
+    XML_SetStartElementHandler(parser, start_element_dummy);
+    XML_SetUserData(parser, NULL);
+    if (XML_Parse(parser, text, strlen(text), 1) == XML_STATUS_ERROR)
+        xml_failure(parser);
+}
+END_TEST
 
 static Suite *
 make_basic_suite(void)
@@ -871,6 +928,7 @@
     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);
+    tcase_add_test(tc_namespace, test_default_ns_from_ext_subset_and_ext_ge);
 
     return s;
 }
@@ -909,6 +967,8 @@
     }
     if (forking_set)
         srunner_set_fork_status(sr, forking ? CK_FORK : CK_NOFORK);
+    if (verbosity != CK_SILENT)
+        printf("Expat version: %s\n", XML_ExpatVersion());
     srunner_run_all(sr, verbosity);
     nf = srunner_ntests_failed(sr);
     srunner_free(sr);





More information about the Expat-checkins mailing list