Add test cases for bug 758518

test/HTML/758518-entity.html exposed a bug in pushParseTest() in
runtest.c which assumed that an input file was at least 4 bytes long.
That test case is only 3 bytes, so we now take the minimum of 4 bytes
or the length of the test input.  We also now use 'chunkSize' in place
of the hard-coded value '1024' later in the function.
This commit is contained in:
David Kilzer 2017-06-12 18:26:11 +02:00 committed by Nick Wellnhofer
parent ed48d65b4d
commit 85c112a082
9 changed files with 46 additions and 7 deletions

View File

@ -0,0 +1,2 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><p>&amp;&Ugrave;</p></body></html>

View File

@ -0,0 +1,3 @@
./test/HTML/758518-entity.html:1: HTML parser error : htmlParseEntityRef: expecting ';'
Ù
^

View File

@ -0,0 +1,12 @@
SAX.setDocumentLocator()
SAX.startDocument()
SAX.error: htmlParseEntityRef: expecting ';'
SAX.startElement(html)
SAX.startElement(body)
SAX.startElement(p)
SAX.characters(&amp;, 1)
SAX.characters(&Ugrave;, 2)
SAX.endElement(p)
SAX.endElement(body)
SAX.endElement(html)
SAX.endDocument()

View File

@ -0,0 +1,2 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><p>&#147;</p></body></html>

View File

@ -0,0 +1,3 @@
./test/HTML/758518-tag.html:1: HTML parser error : PI is not started correctly
“
^

View File

@ -0,0 +1,10 @@
SAX.setDocumentLocator()
SAX.startDocument()
SAX.error: PI is not started correctlySAX.startElement(html)
SAX.startElement(body)
SAX.startElement(p)
SAX.characters(&#147;, 2)
SAX.endElement(p)
SAX.endElement(body)
SAX.endElement(html)
SAX.endDocument()

View File

@ -1854,6 +1854,7 @@ pushParseTest(const char *filename, const char *result,
const char *base;
int size, res;
int cur = 0;
int chunkSize = 4;
nb_tests++;
/*
@ -1864,17 +1865,21 @@ pushParseTest(const char *filename, const char *result,
return(-1);
}
if (chunkSize > size)
chunkSize = size;
#ifdef LIBXML_HTML_ENABLED
if (options & XML_PARSE_HTML)
ctxt = htmlCreatePushParserCtxt(NULL, NULL, base + cur, 4, filename,
ctxt = htmlCreatePushParserCtxt(NULL, NULL, base + cur, chunkSize, filename,
XML_CHAR_ENCODING_NONE);
else
#endif
ctxt = xmlCreatePushParserCtxt(NULL, NULL, base + cur, 4, filename);
ctxt = xmlCreatePushParserCtxt(NULL, NULL, base + cur, chunkSize, filename);
xmlCtxtUseOptions(ctxt, options);
cur += 4;
cur += chunkSize;
chunkSize = 1024;
do {
if (cur + 1024 >= size) {
if (cur + chunkSize >= size) {
#ifdef LIBXML_HTML_ENABLED
if (options & XML_PARSE_HTML)
htmlParseChunk(ctxt, base + cur, size - cur, 1);
@ -1885,11 +1890,11 @@ pushParseTest(const char *filename, const char *result,
} else {
#ifdef LIBXML_HTML_ENABLED
if (options & XML_PARSE_HTML)
htmlParseChunk(ctxt, base + cur, 1024, 0);
htmlParseChunk(ctxt, base + cur, chunkSize, 0);
else
#endif
xmlParseChunk(ctxt, base + cur, 1024, 0);
cur += 1024;
xmlParseChunk(ctxt, base + cur, chunkSize, 0);
cur += chunkSize;
}
} while (cur < size);
doc = ctxt->myDoc;

View File

@ -0,0 +1 @@
&j<EFBFBD>

View File

@ -0,0 +1 @@
<?a“