]> granicus.if.org Git - libexpat/commitdiff
Extend empty string parse tests
authorRhodri James <rhodri@kynesim.co.uk>
Tue, 7 Feb 2017 12:49:13 +0000 (12:49 +0000)
committerSebastian Pipping <sebastian@pipping.org>
Sun, 5 Mar 2017 21:36:29 +0000 (22:36 +0100)
expat/tests/runtests.c

index afbe42bb06a90b47d92e4801815602b43f3e171f..09ceae36111236e91e85f8b59de5eba455db2acc 100644 (file)
@@ -1929,12 +1929,31 @@ END_TEST
 /* Test the parsing of an empty string */
 START_TEST(test_empty_parse)
 {
+    const char *text = "<doc></doc>";
+    const char *partial = "<doc>";
+
     if (XML_Parse(parser, NULL, 0, XML_FALSE) == XML_STATUS_ERROR)
         fail("Parsing empty string faulted");
     if (XML_Parse(parser, NULL, 0, XML_TRUE) != XML_STATUS_ERROR)
         fail("Parsing final empty string not faulted");
     if (XML_GetErrorCode(parser) != XML_ERROR_NO_ELEMENTS)
         fail("Parsing final empty string faulted for wrong reason");
+
+    /* Now try with valid text before the empty end */
+    XML_ParserReset(parser, NULL);
+    if (_XML_Parse_SINGLE_BYTES(parser, text, strlen(text),
+                                XML_FALSE) == XML_STATUS_ERROR)
+        xml_failure(parser);
+    if (XML_Parse(parser, NULL, 0, XML_TRUE) == XML_STATUS_ERROR)
+        fail("Parsing final empty string faulted");
+
+    /* Now try with invalid text before the empty end */
+    XML_ParserReset(parser, NULL);
+    if (_XML_Parse_SINGLE_BYTES(parser, partial, strlen(partial),
+                                XML_FALSE) == XML_STATUS_ERROR)
+        xml_failure(parser);
+    if (XML_Parse(parser, NULL, 0, XML_TRUE) != XML_STATUS_ERROR)
+        fail("Parsing final incomplete empty string not faulted");
 }
 END_TEST