]> granicus.if.org Git - libexpat/commitdiff
Test DTD processing stops for undefined parameter entities
authorRhodri James <rhodri@kynesim.co.uk>
Fri, 10 Mar 2017 15:07:48 +0000 (15:07 +0000)
committerSebastian Pipping <sebastian@pipping.org>
Sat, 22 Jul 2017 19:46:16 +0000 (21:46 +0200)
expat/tests/runtests.c

index 47b849d6b9b018f9b1084c90e63c12596ab8afdb..3c0791e2ee404910b86ee5aa47f0bbba74fa302f 100644 (file)
@@ -4159,6 +4159,28 @@ START_TEST(test_predefined_entity_redefinition)
 }
 END_TEST
 
+/* Test that the parser stops processing the DTD after an unresolved
+ * parameter entity is encountered.
+ */
+START_TEST(test_dtd_stop_processing)
+{
+    const char *text =
+        "<!DOCTYPE doc [\n"
+        "%foo;\n"
+        "<!ENTITY bar 'bas'>\n"
+        "]><doc/>";
+
+    XML_SetEntityDeclHandler(parser, dummy_entity_decl_handler);
+    dummy_handler_flags = 0;
+    if (_XML_Parse_SINGLE_BYTES(parser, text, strlen(text),
+                                XML_TRUE) == XML_STATUS_ERROR)
+        xml_failure(parser);
+    if (dummy_handler_flags != 0)
+        fail("DTD processing still going after undefined PE");
+}
+END_TEST
+
+
 /*
  * Namespaces tests.
  */
@@ -7007,6 +7029,7 @@ make_suite(void)
     tcase_add_test(tc_basic, test_bad_public_doctype);
     tcase_add_test(tc_basic, test_attribute_enum_value);
     tcase_add_test(tc_basic, test_predefined_entity_redefinition);
+    tcase_add_test(tc_basic, test_dtd_stop_processing);
 
     suite_add_tcase(s, tc_namespace);
     tcase_add_checked_fixture(tc_namespace,