diff --git a/parser.c b/parser.c index 4556faa7..f561e2fc 100644 --- a/parser.c +++ b/parser.c @@ -2169,7 +2169,6 @@ xmlSkipBlankChars(xmlParserCtxtPtr ctxt) { while (1) { if (IS_BLANK_CH(CUR)) { /* CHECKED tstblanks.xml */ NEXT; - res++; } else if (CUR == '%') { /* * Need to handle support of entities branching here @@ -2184,6 +2183,15 @@ xmlSkipBlankChars(xmlParserCtxtPtr ctxt) { } else { break; } + + /* + * Also increase the counter when entering or exiting a PERef. + * The spec says: "When a parameter-entity reference is recognized + * in the DTD and included, its replacement text MUST be enlarged + * by the attachment of one leading and one following space (#x20) + * character." + */ + res++; } } return(res); @@ -2446,57 +2454,6 @@ xmlParseStringCharRef(xmlParserCtxtPtr ctxt, const xmlChar **str) { return(0); } -/** - * xmlNewBlanksWrapperInputStream: - * @ctxt: an XML parser context - * @entity: an Entity pointer - * - * Create a new input stream for wrapping - * blanks around a PEReference - * - * Returns the new input stream or NULL - */ - -static void deallocblankswrapper (xmlChar *str) {xmlFree(str);} - -static xmlParserInputPtr -xmlNewBlanksWrapperInputStream(xmlParserCtxtPtr ctxt, xmlEntityPtr entity) { - xmlParserInputPtr input; - xmlChar *buffer; - size_t length; - if (entity == NULL) { - xmlFatalErr(ctxt, XML_ERR_INTERNAL_ERROR, - "xmlNewBlanksWrapperInputStream entity\n"); - return(NULL); - } - if (xmlParserDebugEntities) - xmlGenericError(xmlGenericErrorContext, - "new blanks wrapper for entity: %s\n", entity->name); - input = xmlNewInputStream(ctxt); - if (input == NULL) { - return(NULL); - } - length = xmlStrlen(entity->name) + 5; - buffer = xmlMallocAtomic(length); - if (buffer == NULL) { - xmlErrMemory(ctxt, NULL); - xmlFree(input); - return(NULL); - } - buffer [0] = ' '; - buffer [1] = '%'; - buffer [length-3] = ';'; - buffer [length-2] = ' '; - buffer [length-1] = 0; - memcpy(buffer + 2, entity->name, length - 5); - input->free = deallocblankswrapper; - input->base = buffer; - input->cur = buffer; - input->length = length; - input->end = &buffer[length]; - return(input); -} - /** * xmlParserHandlePEReference: * @ctxt: the parser context @@ -7945,10 +7902,6 @@ xmlParsePEReference(xmlParserCtxtPtr ctxt) xmlWarningMsg(ctxt, XML_WAR_UNDECLARED_ENTITY, "Internal: %%%s; is not a parameter entity\n", name, NULL); - } else if (ctxt->input->free != deallocblankswrapper) { - input = xmlNewBlanksWrapperInputStream(ctxt, entity); - if (xmlPushInput(ctxt, input) < 0) - return; } else { xmlChar start[4]; xmlCharEncoding enc; diff --git a/result/errors/754946.xml.err b/result/errors/754946.xml.err index 4c195265..be777817 100644 --- a/result/errors/754946.xml.err +++ b/result/errors/754946.xml.err @@ -1,7 +1,7 @@ -Entity: line 1: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration +./test/errors/754946.xml:3: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration - %SYSTEM; - ^ + %SYSTEM; + ^ Entity: line 1: A ^ Entity: line 1: parser error : xmlParseEntityDecl: no name - %zz; - ^ +%zz; + ^ Entity: line 1: ^ Entity: line 1: parser error : ParsePI: PI xDOCTYPEm space expected - %zz; - ^ +%zz; + ^ Entity: line 1: ^ -Entity: line 1: parser error : Space required after ' ^ -Entity: line 1: parser error : xmlParseEntityDecl: no name - %zz; - ^ +Entity: line 3: parser error : xmlParseEntityDecl: no name +%zz; ^ -Entity: line 1: parser error : ParsePI: PI xDOCTYPEm space expected - %zz; - ^ +Entity: line 3: parser error : ParsePI: PI xDOCTYPEm space expected +%zz; ^ -Entity: line 1: parser error : Space required after 'ELEMENT' - %xx; - ^ +./test/errors/759573-2.xml:6: parser error : Space required after 'ELEMENT' +%xx;ÿggKENSMYNT#MENTDŴzz;'> + ^ Entity: line 3: %zz; + ^ Entity: line 3: %zz;%xx; + ^ Entity: line 1: %%xx; + ^ Entity: line 1: % ^ -Entity: line 1: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration +./test/valid/t8.xml:6: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration - %defmiddle; - ^ +%defroot; %defmiddle; %deftest; + ^ Entity: line 1: <!ELEMENT middle (test) > ^ -Entity: line 1: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration +./test/valid/t8.xml:6: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration - %deftest; - ^ +%defroot; %defmiddle; %deftest; + ^ Entity: line 1: <!ELEMENT test (#PCDATA) > ^ diff --git a/result/valid/t8.xml.err.rdr b/result/valid/t8.xml.err.rdr index 3b2cd262..8da08fbe 100644 --- a/result/valid/t8.xml.err.rdr +++ b/result/valid/t8.xml.err.rdr @@ -1,21 +1,21 @@ -Entity: line 1: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration +./test/valid/t8.xml:6: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration - %defroot; - ^ +%defroot; %defmiddle; %deftest; + ^ Entity: line 1: <!ELEMENT root (middle) > ^ -Entity: line 1: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration +./test/valid/t8.xml:6: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration - %defmiddle; - ^ +%defroot; %defmiddle; %deftest; + ^ Entity: line 1: <!ELEMENT middle (test) > ^ -Entity: line 1: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration +./test/valid/t8.xml:6: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration - %deftest; - ^ +%defroot; %defmiddle; %deftest; + ^ Entity: line 1: <!ELEMENT test (#PCDATA) > ^ diff --git a/result/valid/t8a.xml.err b/result/valid/t8a.xml.err index bfe53147..2846b196 100644 --- a/result/valid/t8a.xml.err +++ b/result/valid/t8a.xml.err @@ -1,21 +1,21 @@ -Entity: line 1: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration +./test/valid/t8a.xml:6: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration - %defroot; - ^ +%defroot;%defmiddle;%deftest; + ^ Entity: line 1: <!ELEMENT root (middle) > ^ -Entity: line 1: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration +./test/valid/t8a.xml:6: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration - %defmiddle; - ^ +%defroot;%defmiddle;%deftest; + ^ Entity: line 1: <!ELEMENT middle (test) > ^ -Entity: line 1: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration +./test/valid/t8a.xml:6: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration - %deftest; - ^ +%defroot;%defmiddle;%deftest; + ^ Entity: line 1: <!ELEMENT test (#PCDATA) > ^ diff --git a/result/valid/t8a.xml.err.rdr b/result/valid/t8a.xml.err.rdr index d1bd92e0..6abe75a9 100644 --- a/result/valid/t8a.xml.err.rdr +++ b/result/valid/t8a.xml.err.rdr @@ -1,21 +1,21 @@ -Entity: line 1: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration +./test/valid/t8a.xml:6: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration - %defroot; - ^ +%defroot;%defmiddle;%deftest; + ^ Entity: line 1: <!ELEMENT root (middle) > ^ -Entity: line 1: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration +./test/valid/t8a.xml:6: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration - %defmiddle; - ^ +%defroot;%defmiddle;%deftest; + ^ Entity: line 1: <!ELEMENT middle (test) > ^ -Entity: line 1: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration +./test/valid/t8a.xml:6: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration - %deftest; - ^ +%defroot;%defmiddle;%deftest; + ^ Entity: line 1: <!ELEMENT test (#PCDATA) > ^