mirror of
https://gitlab.gnome.org/GNOME/libxml2.git
synced 2025-10-26 00:37:43 +03:00
Get rid of "blanks wrapper" for parameter entities
Now that replacement of parameter entities goes exclusively through xmlSkipBlankChars, we can account for the surrounding space characters there and remove the "blanks wrapper" hack.
This commit is contained in:
65
parser.c
65
parser.c
@@ -2169,7 +2169,6 @@ xmlSkipBlankChars(xmlParserCtxtPtr ctxt) {
|
|||||||
while (1) {
|
while (1) {
|
||||||
if (IS_BLANK_CH(CUR)) { /* CHECKED tstblanks.xml */
|
if (IS_BLANK_CH(CUR)) { /* CHECKED tstblanks.xml */
|
||||||
NEXT;
|
NEXT;
|
||||||
res++;
|
|
||||||
} else if (CUR == '%') {
|
} else if (CUR == '%') {
|
||||||
/*
|
/*
|
||||||
* Need to handle support of entities branching here
|
* Need to handle support of entities branching here
|
||||||
@@ -2184,6 +2183,15 @@ xmlSkipBlankChars(xmlParserCtxtPtr ctxt) {
|
|||||||
} else {
|
} else {
|
||||||
break;
|
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);
|
return(res);
|
||||||
@@ -2446,57 +2454,6 @@ xmlParseStringCharRef(xmlParserCtxtPtr ctxt, const xmlChar **str) {
|
|||||||
return(0);
|
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:
|
* xmlParserHandlePEReference:
|
||||||
* @ctxt: the parser context
|
* @ctxt: the parser context
|
||||||
@@ -7945,10 +7902,6 @@ xmlParsePEReference(xmlParserCtxtPtr ctxt)
|
|||||||
xmlWarningMsg(ctxt, XML_WAR_UNDECLARED_ENTITY,
|
xmlWarningMsg(ctxt, XML_WAR_UNDECLARED_ENTITY,
|
||||||
"Internal: %%%s; is not a parameter entity\n",
|
"Internal: %%%s; is not a parameter entity\n",
|
||||||
name, NULL);
|
name, NULL);
|
||||||
} else if (ctxt->input->free != deallocblankswrapper) {
|
|
||||||
input = xmlNewBlanksWrapperInputStream(ctxt, entity);
|
|
||||||
if (xmlPushInput(ctxt, input) < 0)
|
|
||||||
return;
|
|
||||||
} else {
|
} else {
|
||||||
xmlChar start[4];
|
xmlChar start[4];
|
||||||
xmlCharEncoding enc;
|
xmlCharEncoding enc;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
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;
|
||||||
^
|
^
|
||||||
|
|||||||
@@ -1,47 +1,47 @@
|
|||||||
Entity: line 1: parser error : Space required after '<!ENTITY'
|
Entity: line 1: parser error : Space required after '<!ENTITY'
|
||||||
%zz;
|
%zz;
|
||||||
^
|
^
|
||||||
Entity: line 1:
|
Entity: line 1:
|
||||||
<!ENTITY<?xDOCTYPEm~?>
|
<!ENTITY<?xDOCTYPEm~?>
|
||||||
^
|
^
|
||||||
Entity: line 1: parser error : xmlParseEntityDecl: no name
|
Entity: line 1: parser error : xmlParseEntityDecl: no name
|
||||||
%zz;
|
%zz;
|
||||||
^
|
^
|
||||||
Entity: line 1:
|
Entity: line 1:
|
||||||
<!ENTITY<?xDOCTYPEm~?>
|
<!ENTITY<?xDOCTYPEm~?>
|
||||||
^
|
^
|
||||||
Entity: line 1: parser error : ParsePI: PI xDOCTYPEm space expected
|
Entity: line 1: parser error : ParsePI: PI xDOCTYPEm space expected
|
||||||
%zz;
|
%zz;
|
||||||
^
|
^
|
||||||
Entity: line 1:
|
Entity: line 1:
|
||||||
<!ENTITY<?xDOCTYPEm~?>
|
<!ENTITY<?xDOCTYPEm~?>
|
||||||
^
|
^
|
||||||
Entity: line 1: parser error : Space required after '<!ENTITY'
|
Entity: line 3: parser error : Space required after '<!ENTITY'
|
||||||
%zz;
|
%zz;<!ELEMENTD(%MENT%MENTDŹMENTD%zNMT9KENSMYSYSTEM;MENT9%zz;
|
||||||
^
|
^
|
||||||
Entity: line 1:
|
Entity: line 1:
|
||||||
<!ENTITY<?xDOCTYPEm~?>
|
<!ENTITY<?xDOCTYPEm~?>
|
||||||
^
|
^
|
||||||
Entity: line 1: parser error : xmlParseEntityDecl: no name
|
Entity: line 3: parser error : xmlParseEntityDecl: no name
|
||||||
%zz;
|
%zz;<!ELEMENTD(%MENT%MENTDŹMENTD%zNMT9KENSMYSYSTEM;MENT9%zz;
|
||||||
^
|
^
|
||||||
Entity: line 1:
|
Entity: line 1:
|
||||||
<!ENTITY<?xDOCTYPEm~?>
|
<!ENTITY<?xDOCTYPEm~?>
|
||||||
^
|
^
|
||||||
Entity: line 1: parser error : ParsePI: PI xDOCTYPEm space expected
|
Entity: line 3: parser error : ParsePI: PI xDOCTYPEm space expected
|
||||||
%zz;
|
%zz;<!ELEMENTD(%MENT%MENTDŹMENTD%zNMT9KENSMYSYSTEM;MENT9%zz;
|
||||||
^
|
^
|
||||||
Entity: line 1:
|
Entity: line 1:
|
||||||
<!ENTITY<?xDOCTYPEm~?>
|
<!ENTITY<?xDOCTYPEm~?>
|
||||||
^
|
^
|
||||||
Entity: line 1: parser error : Space required after 'ELEMENT'
|
./test/errors/759573-2.xml:6: parser error : Space required after 'ELEMENT'
|
||||||
%xx;
|
%xx;<03>ggKENSMYNT#MENTDŴzz;'>
|
||||||
^
|
^
|
||||||
Entity: line 3:
|
Entity: line 3:
|
||||||
%zz;<!ELEMENTD(%MENT%MENTDŹMENTD%zNMT9KENSMYSYSTEM;MENT9%zz;
|
%zz;<!ELEMENTD(%MENT%MENTDŹMENTD%zNMT9KENSMYSYSTEM;MENT9%zz;
|
||||||
^
|
^
|
||||||
Entity: line 1: parser error : Content error in the external subset
|
./test/errors/759573-2.xml:6: parser error : Content error in the external subset
|
||||||
%xx;
|
%xx;<03>ggKENSMYNT#MENTDŴzz;'>
|
||||||
^
|
^
|
||||||
Entity: line 3:
|
Entity: line 3:
|
||||||
%zz;<!ELEMENTD(%MENT%MENTDŹMENTD%zNMT9KENSMYSYSTEM;MENT9%zz;
|
%zz;<!ELEMENTD(%MENT%MENTDŹMENTD%zNMT9KENSMYSYSTEM;MENT9%zz;
|
||||||
|
|||||||
@@ -7,14 +7,14 @@ LEMENT t (A)><!ENTITY % xx '%<![INCLUDE[000%ஸ000%z;'><!ENTITYz
|
|||||||
./test/errors/759573.xml:1: parser error : Entity value required
|
./test/errors/759573.xml:1: parser error : Entity value required
|
||||||
LEMENT t (A)><!ENTITY % xx '%<![INCLUDE[000%ஸ000%z;'><!ENTITYz
|
LEMENT t (A)><!ENTITY % xx '%<![INCLUDE[000%ஸ000%z;'><!ENTITYz
|
||||||
^
|
^
|
||||||
Entity: line 1: parser error : PEReference: no name
|
./test/errors/759573.xml:1: parser error : PEReference: no name
|
||||||
%xx;
|
T t (A)><!ENTITY % xx '%<![INCLUDE[000%ஸ000%z;'><!ENTITYz>%xx;
|
||||||
^
|
^
|
||||||
Entity: line 1:
|
Entity: line 1:
|
||||||
%<![INCLUDE[000%ஸ000%z;
|
%<![INCLUDE[000%ஸ000%z;
|
||||||
^
|
^
|
||||||
Entity: line 1: parser error : Content error in the external subset
|
./test/errors/759573.xml:1: parser error : Content error in the external subset
|
||||||
%xx;
|
T t (A)><!ENTITY % xx '%<![INCLUDE[000%ஸ000%z;'><!ENTITYz>%xx;
|
||||||
^
|
^
|
||||||
Entity: line 1:
|
Entity: line 1:
|
||||||
%<![INCLUDE[000%ஸ000%z;
|
%<![INCLUDE[000%ஸ000%z;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
Entity: line 1: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration
|
./test/errors10/781205.xml:3: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration
|
||||||
|
|
||||||
%a;
|
%a;
|
||||||
^
|
^
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
test/valid/dtds/766956.dtd:2: parser error : PEReference: expecting ';'
|
test/valid/dtds/766956.dtd:2: parser error : PEReference: expecting ';'
|
||||||
%ä%ent;
|
%ä%ent;
|
||||||
^
|
^
|
||||||
Entity: line 1: parser error : Content error in the external subset
|
test/valid/dtds/766956.dtd:2: parser error : Content error in the external subset
|
||||||
%ent;
|
%ä%ent;
|
||||||
^
|
^
|
||||||
Entity: line 1:
|
Entity: line 1:
|
||||||
value
|
value
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
test/valid/dtds/766956.dtd:2: parser error : PEReference: expecting ';'
|
test/valid/dtds/766956.dtd:2: parser error : PEReference: expecting ';'
|
||||||
%ä%ent;
|
%ä%ent;
|
||||||
^
|
^
|
||||||
Entity: line 1: parser error : Content error in the external subset
|
test/valid/dtds/766956.dtd:2: parser error : Content error in the external subset
|
||||||
%ent;
|
%ä%ent;
|
||||||
^
|
^
|
||||||
Entity: line 1:
|
Entity: line 1:
|
||||||
value
|
value
|
||||||
|
|||||||
@@ -1,20 +1,20 @@
|
|||||||
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:
|
Entity: line 1:
|
||||||
<!ELEMENT root (middle) >
|
<!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:
|
Entity: line 1:
|
||||||
<!ELEMENT middle (test) >
|
<!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:
|
Entity: line 1:
|
||||||
<!ELEMENT test (#PCDATA) >
|
<!ELEMENT test (#PCDATA) >
|
||||||
|
|||||||
@@ -1,20 +1,20 @@
|
|||||||
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:
|
Entity: line 1:
|
||||||
<!ELEMENT root (middle) >
|
<!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:
|
Entity: line 1:
|
||||||
<!ELEMENT middle (test) >
|
<!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:
|
Entity: line 1:
|
||||||
<!ELEMENT test (#PCDATA) >
|
<!ELEMENT test (#PCDATA) >
|
||||||
|
|||||||
@@ -1,20 +1,20 @@
|
|||||||
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:
|
Entity: line 1:
|
||||||
<!ELEMENT root (middle) >
|
<!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:
|
Entity: line 1:
|
||||||
<!ELEMENT middle (test) >
|
<!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:
|
Entity: line 1:
|
||||||
<!ELEMENT test (#PCDATA) >
|
<!ELEMENT test (#PCDATA) >
|
||||||
|
|||||||
@@ -1,20 +1,20 @@
|
|||||||
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:
|
Entity: line 1:
|
||||||
<!ELEMENT root (middle) >
|
<!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:
|
Entity: line 1:
|
||||||
<!ELEMENT middle (test) >
|
<!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:
|
Entity: line 1:
|
||||||
<!ELEMENT test (#PCDATA) >
|
<!ELEMENT test (#PCDATA) >
|
||||||
|
|||||||
Reference in New Issue
Block a user