mirror of
https://gitlab.gnome.org/GNOME/libxml2.git
synced 2025-03-25 10:50:08 +03:00
parser: Copy namespaces in xmlParseBalancedChunkMemory
Reenable copying of namespaces but don't set SAX data. This should match the old behavior.
This commit is contained in:
parent
89d19534de
commit
e0c2f14d83
14
parser.c
14
parser.c
@ -12994,9 +12994,7 @@ xmlParseBalancedChunkMemoryInternal(xmlParserCtxtPtr oldctxt,
|
||||
xmlNodePtr content = NULL;
|
||||
xmlNodePtr last = NULL;
|
||||
xmlParserErrors ret = XML_ERR_OK;
|
||||
#if 0
|
||||
unsigned i;
|
||||
#endif
|
||||
|
||||
if (((oldctxt->depth > 40) && ((oldctxt->options & XML_PARSE_HUGE) == 0)) ||
|
||||
(oldctxt->depth > 100)) {
|
||||
@ -13029,14 +13027,9 @@ xmlParseBalancedChunkMemoryInternal(xmlParserCtxtPtr oldctxt,
|
||||
/*
|
||||
* Propagate namespaces down the entity
|
||||
*
|
||||
* This is disabled for now. The pre-2.12 code was already broken
|
||||
* since the SAX handler was using xmlSearchNs which didn't see the
|
||||
* namespaces added here.
|
||||
*
|
||||
* Making entities and namespaces work correctly requires additional
|
||||
* changes, see xmlParseReference.
|
||||
*/
|
||||
#if 0
|
||||
for (i = 0; i < oldctxt->nsdb->hashSize; i++) {
|
||||
xmlParserNsBucket *bucket = &oldctxt->nsdb->hash[i];
|
||||
xmlHashedString hprefix, huri;
|
||||
@ -13054,10 +13047,13 @@ xmlParseBalancedChunkMemoryInternal(xmlParserCtxtPtr oldctxt,
|
||||
hprefix.hashValue = bucket->hashValue;
|
||||
huri.name = ns[1];
|
||||
huri.hashValue = extra->uriHashValue;
|
||||
xmlParserNsPush(ctxt, &hprefix, &huri, extra->saxData, 0);
|
||||
/*
|
||||
* Don't copy SAX data top avoid a use-after-free in reader
|
||||
* mode. This matches the pre-2.12 behavior.
|
||||
*/
|
||||
xmlParserNsPush(ctxt, &hprefix, &huri, NULL, 0);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
oldsax = ctxt->sax;
|
||||
ctxt->sax = oldctxt->sax;
|
||||
|
8
result/noent/ns-ent.xml
Normal file
8
result/noent/ns-ent.xml
Normal file
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE doc [
|
||||
<!ENTITY ent "<ns:elem/>">
|
||||
]>
|
||||
<doc>
|
||||
<c1 xmlns:ns="urn:ns1"><elem/></c1>
|
||||
<c2 xmlns:ns="urn:ns2"><elem/></c2>
|
||||
</doc>
|
25
result/noent/ns-ent.xml.sax2
Normal file
25
result/noent/ns-ent.xml.sax2
Normal file
@ -0,0 +1,25 @@
|
||||
SAX.setDocumentLocator()
|
||||
SAX.startDocument()
|
||||
SAX.internalSubset(doc, , )
|
||||
SAX.entityDecl(ent, 1, (null), (null), <ns:elem/>)
|
||||
SAX.getEntity(ent)
|
||||
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.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.characters(
|
||||
, 1)
|
||||
SAX.endElementNs(doc, NULL, NULL)
|
||||
SAX.endDocument()
|
8
result/ns-ent.xml
Normal file
8
result/ns-ent.xml
Normal file
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE doc [
|
||||
<!ENTITY ent "<ns:elem/>">
|
||||
]>
|
||||
<doc>
|
||||
<c1 xmlns:ns="urn:ns1">&ent;</c1>
|
||||
<c2 xmlns:ns="urn:ns2">&ent;</c2>
|
||||
</doc>
|
15
result/ns-ent.xml.rde
Normal file
15
result/ns-ent.xml.rde
Normal file
@ -0,0 +1,15 @@
|
||||
0 10 doc 0 0
|
||||
0 1 doc 0 0
|
||||
1 14 #text 0 1
|
||||
|
||||
1 1 c1 0 0
|
||||
2 1 elem 1 0
|
||||
1 15 c1 0 0
|
||||
1 14 #text 0 1
|
||||
|
||||
1 1 c2 0 0
|
||||
2 1 elem 1 0
|
||||
1 15 c2 0 0
|
||||
1 14 #text 0 1
|
||||
|
||||
0 15 doc 0 0
|
15
result/ns-ent.xml.rdr
Normal file
15
result/ns-ent.xml.rdr
Normal file
@ -0,0 +1,15 @@
|
||||
0 10 doc 0 0
|
||||
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 14 #text 0 1
|
||||
|
||||
1 1 c2 0 0
|
||||
2 5 ent 0 0
|
||||
1 15 c2 0 0
|
||||
1 14 #text 0 1
|
||||
|
||||
0 15 doc 0 0
|
27
result/ns-ent.xml.sax
Normal file
27
result/ns-ent.xml.sax
Normal file
@ -0,0 +1,27 @@
|
||||
SAX.setDocumentLocator()
|
||||
SAX.startDocument()
|
||||
SAX.internalSubset(doc, , )
|
||||
SAX.entityDecl(ent, 1, (null), (null), <ns:elem/>)
|
||||
SAX.getEntity(ent)
|
||||
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.characters(
|
||||
, 5)
|
||||
SAX.startElement(c2, xmlns:ns='urn:ns2')
|
||||
SAX.getEntity(ent)
|
||||
SAX.startElement(ns:elem)
|
||||
SAX.endElement(ns:elem)
|
||||
SAX.reference(ent)
|
||||
SAX.endElement(c2)
|
||||
SAX.characters(
|
||||
, 1)
|
||||
SAX.endElement(doc)
|
||||
SAX.endDocument()
|
27
result/ns-ent.xml.sax2
Normal file
27
result/ns-ent.xml.sax2
Normal file
@ -0,0 +1,27 @@
|
||||
SAX.setDocumentLocator()
|
||||
SAX.startDocument()
|
||||
SAX.internalSubset(doc, , )
|
||||
SAX.entityDecl(ent, 1, (null), (null), <ns:elem/>)
|
||||
SAX.getEntity(ent)
|
||||
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.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.characters(
|
||||
, 1)
|
||||
SAX.endElementNs(doc, NULL, NULL)
|
||||
SAX.endDocument()
|
7
test/ns-ent.xml
Normal file
7
test/ns-ent.xml
Normal file
@ -0,0 +1,7 @@
|
||||
<!DOCTYPE doc [
|
||||
<!ENTITY ent "<ns:elem/>">
|
||||
]>
|
||||
<doc>
|
||||
<c1 xmlns:ns="urn:ns1">&ent;</c1>
|
||||
<c2 xmlns:ns="urn:ns2">&ent;</c2>
|
||||
</doc>
|
Loading…
x
Reference in New Issue
Block a user