mirror of
https://gitlab.gnome.org/GNOME/libxml2.git
synced 2025-03-25 10:50:08 +03:00
parser: Copy default namespace in xmlParseBalancedChunkMemory
This commit is contained in:
parent
e0c2f14d83
commit
7a2d412f68
15
parser.c
15
parser.c
@ -12994,6 +12994,7 @@ xmlParseBalancedChunkMemoryInternal(xmlParserCtxtPtr oldctxt,
|
||||
xmlNodePtr content = NULL;
|
||||
xmlNodePtr last = NULL;
|
||||
xmlParserErrors ret = XML_ERR_OK;
|
||||
xmlHashedString hprefix, huri;
|
||||
unsigned i;
|
||||
|
||||
if (((oldctxt->depth > 40) && ((oldctxt->options & XML_PARSE_HUGE) == 0)) ||
|
||||
@ -13030,9 +13031,17 @@ xmlParseBalancedChunkMemoryInternal(xmlParserCtxtPtr oldctxt,
|
||||
* Making entities and namespaces work correctly requires additional
|
||||
* changes, see xmlParseReference.
|
||||
*/
|
||||
|
||||
/* Default namespace */
|
||||
hprefix.name = NULL;
|
||||
hprefix.hashValue = 0;
|
||||
huri.name = xmlParserNsLookupUri(oldctxt, &hprefix);
|
||||
huri.hashValue = 0;
|
||||
if (huri.name != NULL)
|
||||
xmlParserNsPush(ctxt, NULL, &huri, NULL, 0);
|
||||
|
||||
for (i = 0; i < oldctxt->nsdb->hashSize; i++) {
|
||||
xmlParserNsBucket *bucket = &oldctxt->nsdb->hash[i];
|
||||
xmlHashedString hprefix, huri;
|
||||
const xmlChar **ns;
|
||||
xmlParserNsExtra *extra;
|
||||
unsigned nsIndex;
|
||||
@ -13048,8 +13057,8 @@ xmlParseBalancedChunkMemoryInternal(xmlParserCtxtPtr oldctxt,
|
||||
huri.name = ns[1];
|
||||
huri.hashValue = extra->uriHashValue;
|
||||
/*
|
||||
* Don't copy SAX data top avoid a use-after-free in reader
|
||||
* mode. This matches the pre-2.12 behavior.
|
||||
* Don't copy SAX data to avoid a use-after-free with XML reader.
|
||||
* This matches the pre-2.12 behavior.
|
||||
*/
|
||||
xmlParserNsPush(ctxt, &hprefix, &huri, NULL, 0);
|
||||
}
|
||||
|
@ -1,8 +1,11 @@
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE doc [
|
||||
<!ENTITY ent "<ns:elem/>">
|
||||
<!ENTITY ent1 "<elem/>">
|
||||
<!ENTITY ent2 "<ns:elem/>">
|
||||
]>
|
||||
<doc>
|
||||
<c1 xmlns:ns="urn:ns1"><elem/></c1>
|
||||
<c2 xmlns:ns="urn:ns2"><elem/></c2>
|
||||
<a xmlns="urn:a"><elem/></a>
|
||||
<b xmlns="urn:b"><elem/></b>
|
||||
<a xmlns:ns="urn:a"><elem/></a>
|
||||
<b xmlns:ns="urn:b"><elem/></b>
|
||||
</doc>
|
||||
|
@ -1,24 +1,40 @@
|
||||
SAX.setDocumentLocator()
|
||||
SAX.startDocument()
|
||||
SAX.internalSubset(doc, , )
|
||||
SAX.entityDecl(ent, 1, (null), (null), <ns:elem/>)
|
||||
SAX.getEntity(ent)
|
||||
SAX.entityDecl(ent1, 1, (null), (null), <elem/>)
|
||||
SAX.getEntity(ent1)
|
||||
SAX.entityDecl(ent2, 1, (null), (null), <ns:elem/>)
|
||||
SAX.getEntity(ent2)
|
||||
SAX.externalSubset(doc, , )
|
||||
SAX.startElementNs(doc, NULL, NULL, 0, 0, 0)
|
||||
SAX.characters(
|
||||
, 5)
|
||||
SAX.startElementNs(c1, NULL, NULL, 1, xmlns:ns='urn:ns1', 0, 0)
|
||||
SAX.getEntity(ent)
|
||||
SAX.startElementNs(elem, ns, 'urn:ns1', 0, 0, 0)
|
||||
SAX.endElementNs(elem, ns, 'urn:ns1')
|
||||
SAX.endElementNs(c1, NULL, NULL)
|
||||
SAX.startElementNs(a, NULL, 'urn:a', 1, xmlns='urn:a', 0, 0)
|
||||
SAX.getEntity(ent1)
|
||||
SAX.startElementNs(elem, NULL, 'urn:a', 0, 0, 0)
|
||||
SAX.endElementNs(elem, NULL, 'urn:a')
|
||||
SAX.endElementNs(a, NULL, 'urn:a')
|
||||
SAX.characters(
|
||||
, 5)
|
||||
SAX.startElementNs(c2, NULL, NULL, 1, xmlns:ns='urn:ns2', 0, 0)
|
||||
SAX.getEntity(ent)
|
||||
SAX.startElementNs(elem, ns, 'urn:ns2', 0, 0, 0)
|
||||
SAX.endElementNs(elem, ns, 'urn:ns2')
|
||||
SAX.endElementNs(c2, NULL, NULL)
|
||||
SAX.startElementNs(b, NULL, 'urn:b', 1, xmlns='urn:b', 0, 0)
|
||||
SAX.getEntity(ent1)
|
||||
SAX.startElementNs(elem, NULL, 'urn:b', 0, 0, 0)
|
||||
SAX.endElementNs(elem, NULL, 'urn:b')
|
||||
SAX.endElementNs(b, NULL, 'urn:b')
|
||||
SAX.characters(
|
||||
, 5)
|
||||
SAX.startElementNs(a, NULL, NULL, 1, xmlns:ns='urn:a', 0, 0)
|
||||
SAX.getEntity(ent2)
|
||||
SAX.startElementNs(elem, ns, 'urn:a', 0, 0, 0)
|
||||
SAX.endElementNs(elem, ns, 'urn:a')
|
||||
SAX.endElementNs(a, NULL, NULL)
|
||||
SAX.characters(
|
||||
, 5)
|
||||
SAX.startElementNs(b, NULL, NULL, 1, xmlns:ns='urn:b', 0, 0)
|
||||
SAX.getEntity(ent2)
|
||||
SAX.startElementNs(elem, ns, 'urn:b', 0, 0, 0)
|
||||
SAX.endElementNs(elem, ns, 'urn:b')
|
||||
SAX.endElementNs(b, NULL, NULL)
|
||||
SAX.characters(
|
||||
, 1)
|
||||
SAX.endElementNs(doc, NULL, NULL)
|
||||
|
@ -1,8 +1,11 @@
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE doc [
|
||||
<!ENTITY ent "<ns:elem/>">
|
||||
<!ENTITY ent1 "<elem/>">
|
||||
<!ENTITY ent2 "<ns:elem/>">
|
||||
]>
|
||||
<doc>
|
||||
<c1 xmlns:ns="urn:ns1">&ent;</c1>
|
||||
<c2 xmlns:ns="urn:ns2">&ent;</c2>
|
||||
<a xmlns="urn:a">&ent1;</a>
|
||||
<b xmlns="urn:b">&ent1;</b>
|
||||
<a xmlns:ns="urn:a">&ent2;</a>
|
||||
<b xmlns:ns="urn:b">&ent2;</b>
|
||||
</doc>
|
||||
|
@ -2,14 +2,24 @@
|
||||
0 1 doc 0 0
|
||||
1 14 #text 0 1
|
||||
|
||||
1 1 c1 0 0
|
||||
1 1 a 0 0
|
||||
2 1 elem 1 0
|
||||
1 15 c1 0 0
|
||||
1 15 a 0 0
|
||||
1 14 #text 0 1
|
||||
|
||||
1 1 c2 0 0
|
||||
1 1 b 0 0
|
||||
2 1 elem 1 0
|
||||
1 15 c2 0 0
|
||||
1 15 b 0 0
|
||||
1 14 #text 0 1
|
||||
|
||||
1 1 a 0 0
|
||||
2 1 elem 1 0
|
||||
1 15 a 0 0
|
||||
1 14 #text 0 1
|
||||
|
||||
1 1 b 0 0
|
||||
2 1 elem 1 0
|
||||
1 15 b 0 0
|
||||
1 14 #text 0 1
|
||||
|
||||
0 15 doc 0 0
|
||||
|
@ -2,14 +2,24 @@
|
||||
0 1 doc 0 0
|
||||
1 14 #text 0 1
|
||||
|
||||
1 1 c1 0 0
|
||||
2 5 ent 0 0
|
||||
1 15 c1 0 0
|
||||
1 1 a 0 0
|
||||
2 5 ent1 0 0
|
||||
1 15 a 0 0
|
||||
1 14 #text 0 1
|
||||
|
||||
1 1 c2 0 0
|
||||
2 5 ent 0 0
|
||||
1 15 c2 0 0
|
||||
1 1 b 0 0
|
||||
2 5 ent1 0 0
|
||||
1 15 b 0 0
|
||||
1 14 #text 0 1
|
||||
|
||||
1 1 a 0 0
|
||||
2 5 ent2 0 0
|
||||
1 15 a 0 0
|
||||
1 14 #text 0 1
|
||||
|
||||
1 1 b 0 0
|
||||
2 5 ent2 0 0
|
||||
1 15 b 0 0
|
||||
1 14 #text 0 1
|
||||
|
||||
0 15 doc 0 0
|
||||
|
@ -1,26 +1,44 @@
|
||||
SAX.setDocumentLocator()
|
||||
SAX.startDocument()
|
||||
SAX.internalSubset(doc, , )
|
||||
SAX.entityDecl(ent, 1, (null), (null), <ns:elem/>)
|
||||
SAX.getEntity(ent)
|
||||
SAX.entityDecl(ent1, 1, (null), (null), <elem/>)
|
||||
SAX.getEntity(ent1)
|
||||
SAX.entityDecl(ent2, 1, (null), (null), <ns:elem/>)
|
||||
SAX.getEntity(ent2)
|
||||
SAX.externalSubset(doc, , )
|
||||
SAX.startElement(doc)
|
||||
SAX.characters(
|
||||
, 5)
|
||||
SAX.startElement(c1, xmlns:ns='urn:ns1')
|
||||
SAX.getEntity(ent)
|
||||
SAX.startElement(ns:elem)
|
||||
SAX.endElement(ns:elem)
|
||||
SAX.reference(ent)
|
||||
SAX.endElement(c1)
|
||||
SAX.startElement(a, xmlns='urn:a')
|
||||
SAX.getEntity(ent1)
|
||||
SAX.startElement(elem)
|
||||
SAX.endElement(elem)
|
||||
SAX.reference(ent1)
|
||||
SAX.endElement(a)
|
||||
SAX.characters(
|
||||
, 5)
|
||||
SAX.startElement(c2, xmlns:ns='urn:ns2')
|
||||
SAX.getEntity(ent)
|
||||
SAX.startElement(b, xmlns='urn:b')
|
||||
SAX.getEntity(ent1)
|
||||
SAX.startElement(elem)
|
||||
SAX.endElement(elem)
|
||||
SAX.reference(ent1)
|
||||
SAX.endElement(b)
|
||||
SAX.characters(
|
||||
, 5)
|
||||
SAX.startElement(a, xmlns:ns='urn:a')
|
||||
SAX.getEntity(ent2)
|
||||
SAX.startElement(ns:elem)
|
||||
SAX.endElement(ns:elem)
|
||||
SAX.reference(ent)
|
||||
SAX.endElement(c2)
|
||||
SAX.reference(ent2)
|
||||
SAX.endElement(a)
|
||||
SAX.characters(
|
||||
, 5)
|
||||
SAX.startElement(b, xmlns:ns='urn:b')
|
||||
SAX.getEntity(ent2)
|
||||
SAX.startElement(ns:elem)
|
||||
SAX.endElement(ns:elem)
|
||||
SAX.reference(ent2)
|
||||
SAX.endElement(b)
|
||||
SAX.characters(
|
||||
, 1)
|
||||
SAX.endElement(doc)
|
||||
|
@ -1,26 +1,44 @@
|
||||
SAX.setDocumentLocator()
|
||||
SAX.startDocument()
|
||||
SAX.internalSubset(doc, , )
|
||||
SAX.entityDecl(ent, 1, (null), (null), <ns:elem/>)
|
||||
SAX.getEntity(ent)
|
||||
SAX.entityDecl(ent1, 1, (null), (null), <elem/>)
|
||||
SAX.getEntity(ent1)
|
||||
SAX.entityDecl(ent2, 1, (null), (null), <ns:elem/>)
|
||||
SAX.getEntity(ent2)
|
||||
SAX.externalSubset(doc, , )
|
||||
SAX.startElementNs(doc, NULL, NULL, 0, 0, 0)
|
||||
SAX.characters(
|
||||
, 5)
|
||||
SAX.startElementNs(c1, NULL, NULL, 1, xmlns:ns='urn:ns1', 0, 0)
|
||||
SAX.getEntity(ent)
|
||||
SAX.startElementNs(elem, ns, 'urn:ns1', 0, 0, 0)
|
||||
SAX.endElementNs(elem, ns, 'urn:ns1')
|
||||
SAX.reference(ent)
|
||||
SAX.endElementNs(c1, NULL, NULL)
|
||||
SAX.startElementNs(a, NULL, 'urn:a', 1, xmlns='urn:a', 0, 0)
|
||||
SAX.getEntity(ent1)
|
||||
SAX.startElementNs(elem, NULL, 'urn:a', 0, 0, 0)
|
||||
SAX.endElementNs(elem, NULL, 'urn:a')
|
||||
SAX.reference(ent1)
|
||||
SAX.endElementNs(a, NULL, 'urn:a')
|
||||
SAX.characters(
|
||||
, 5)
|
||||
SAX.startElementNs(c2, NULL, NULL, 1, xmlns:ns='urn:ns2', 0, 0)
|
||||
SAX.getEntity(ent)
|
||||
SAX.startElementNs(elem, ns, 'urn:ns2', 0, 0, 0)
|
||||
SAX.endElementNs(elem, ns, 'urn:ns2')
|
||||
SAX.reference(ent)
|
||||
SAX.endElementNs(c2, NULL, NULL)
|
||||
SAX.startElementNs(b, NULL, 'urn:b', 1, xmlns='urn:b', 0, 0)
|
||||
SAX.getEntity(ent1)
|
||||
SAX.startElementNs(elem, NULL, 'urn:b', 0, 0, 0)
|
||||
SAX.endElementNs(elem, NULL, 'urn:b')
|
||||
SAX.reference(ent1)
|
||||
SAX.endElementNs(b, NULL, 'urn:b')
|
||||
SAX.characters(
|
||||
, 5)
|
||||
SAX.startElementNs(a, NULL, NULL, 1, xmlns:ns='urn:a', 0, 0)
|
||||
SAX.getEntity(ent2)
|
||||
SAX.startElementNs(elem, ns, 'urn:a', 0, 0, 0)
|
||||
SAX.endElementNs(elem, ns, 'urn:a')
|
||||
SAX.reference(ent2)
|
||||
SAX.endElementNs(a, NULL, NULL)
|
||||
SAX.characters(
|
||||
, 5)
|
||||
SAX.startElementNs(b, NULL, NULL, 1, xmlns:ns='urn:b', 0, 0)
|
||||
SAX.getEntity(ent2)
|
||||
SAX.startElementNs(elem, ns, 'urn:b', 0, 0, 0)
|
||||
SAX.endElementNs(elem, ns, 'urn:b')
|
||||
SAX.reference(ent2)
|
||||
SAX.endElementNs(b, NULL, NULL)
|
||||
SAX.characters(
|
||||
, 1)
|
||||
SAX.endElementNs(doc, NULL, NULL)
|
||||
|
@ -1,7 +1,10 @@
|
||||
<!DOCTYPE doc [
|
||||
<!ENTITY ent "<ns:elem/>">
|
||||
<!ENTITY ent1 "<elem/>">
|
||||
<!ENTITY ent2 "<ns:elem/>">
|
||||
]>
|
||||
<doc>
|
||||
<c1 xmlns:ns="urn:ns1">&ent;</c1>
|
||||
<c2 xmlns:ns="urn:ns2">&ent;</c2>
|
||||
<a xmlns="urn:a">&ent1;</a>
|
||||
<b xmlns="urn:b">&ent1;</b>
|
||||
<a xmlns:ns="urn:a">&ent2;</a>
|
||||
<b xmlns:ns="urn:b">&ent2;</b>
|
||||
</doc>
|
||||
|
Loading…
x
Reference in New Issue
Block a user