/* * testparser.c: Additional parser tests * * See Copyright for the status of this software. */ #include #ifdef LIBXML_PUSH_ENABLED static int testHugePush(void) { xmlParserCtxtPtr ctxt; int err, i; ctxt = xmlCreatePushParserCtxt(NULL, NULL, NULL, 0, NULL); /* * Push parse a document larger than XML_MAX_LOOKUP_LIMIT * (10,000,000 bytes). This mainly tests whether shrinking the * buffer works when push parsing. */ xmlParseChunk(ctxt, "", 5, 0); for (i = 0; i < 1000000; i++) xmlParseChunk(ctxt, "text", 17, 0); xmlParseChunk(ctxt, "", 6, 1); err = ctxt->wellFormed ? 0 : 1; xmlFreeDoc(ctxt->myDoc); xmlFreeParserCtxt(ctxt); return err; } static int testHugeEncodedChunk(void) { xmlBufferPtr buf; xmlChar *chunk; xmlParserCtxtPtr ctxt; int err, i; /* * Test the push parser with a built-in encoding handler like ISO-8859-1 * and a chunk larger than the initial decoded buffer (currently 4 KB). */ buf = xmlBufferCreate(); xmlBufferCat(buf, BAD_CAST "\n"); xmlBufferCat(buf, BAD_CAST ""); chunk = xmlBufferDetach(buf); xmlBufferFree(buf); ctxt = xmlCreatePushParserCtxt(NULL, NULL, NULL, 0, NULL); xmlParseChunk(ctxt, (char *) chunk, xmlStrlen(chunk), 0); xmlParseChunk(ctxt, NULL, 0, 1); err = ctxt->wellFormed ? 0 : 1; xmlFreeDoc(ctxt->myDoc); xmlFreeParserCtxt(ctxt); xmlFree(chunk); return err; } #endif int main(void) { int err = 0; #ifdef LIBXML_PUSH_ENABLED err |= testHugePush(); err |= testHugeEncodedChunk(); #endif return err; }