mirror of
https://github.com/darlinghq/darling-libxml2.git
synced 2025-01-09 05:30:30 +00:00
Fixed a really nasty problem raised by a DocBook XSLT transform provided
* entities.c parser.c tree.c include/libxml/entities.h: Fixed a really nasty problem raised by a DocBook XSLT transform provided by Sebastian Bergmann Daniel
This commit is contained in:
parent
29b3e285a7
commit
2d84a89478
@ -1,3 +1,9 @@
|
||||
Mon Dec 30 00:59:07 CET 2002 Daniel Veillard <daniel@veillard.com>
|
||||
|
||||
* entities.c parser.c tree.c include/libxml/entities.h: Fixed
|
||||
a really nasty problem raised by a DocBook XSLT transform
|
||||
provided by Sebastian Bergmann
|
||||
|
||||
Sun Dec 29 12:13:18 CET 2002 Daniel Veillard <daniel@veillard.com>
|
||||
|
||||
* xmlreader.c python/tests/reader.py: fixed a bug pointed out
|
||||
|
19
entities.c
19
entities.c
@ -48,7 +48,7 @@ static xmlHashTablePtr xmlPredefinedEntities = NULL;
|
||||
static void xmlFreeEntity(xmlEntityPtr entity) {
|
||||
if (entity == NULL) return;
|
||||
|
||||
if ((entity->children) &&
|
||||
if ((entity->children) && (entity->owner == 1) &&
|
||||
(entity == (xmlEntityPtr) entity->children->parent))
|
||||
xmlFreeNodeList(entity->children);
|
||||
if (entity->name != NULL)
|
||||
@ -127,6 +127,7 @@ xmlAddEntity(xmlDtdPtr dtd, const xmlChar *name, int type,
|
||||
ret->URI = NULL; /* to be computed by the layer knowing
|
||||
the defining entity */
|
||||
ret->orig = NULL;
|
||||
ret->owner = 0;
|
||||
|
||||
if (xmlHashAddEntry(table, name, ret)) {
|
||||
/*
|
||||
@ -846,6 +847,20 @@ xmlCreateEntitiesTable(void) {
|
||||
return((xmlEntitiesTablePtr) xmlHashCreate(0));
|
||||
}
|
||||
|
||||
/**
|
||||
* xmlFreeEntityWrapper:
|
||||
* @entity: An entity
|
||||
* @name: its name
|
||||
*
|
||||
* Deallocate the memory used by an entities in the hash table.
|
||||
*/
|
||||
static void
|
||||
xmlFreeEntityWrapper(xmlEntityPtr entity,
|
||||
const xmlChar *name ATTRIBUTE_UNUSED) {
|
||||
if (entity != NULL)
|
||||
xmlFreeEntity(entity);
|
||||
}
|
||||
|
||||
/**
|
||||
* xmlFreeEntitiesTable:
|
||||
* @table: An entity table
|
||||
@ -854,7 +869,7 @@ xmlCreateEntitiesTable(void) {
|
||||
*/
|
||||
void
|
||||
xmlFreeEntitiesTable(xmlEntitiesTablePtr table) {
|
||||
xmlHashFree(table, (xmlHashDeallocator) xmlFreeEntity);
|
||||
xmlHashFree(table, (xmlHashDeallocator) xmlFreeEntityWrapper);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -52,6 +52,7 @@ struct _xmlEntity {
|
||||
|
||||
struct _xmlEntity *nexte; /* unused */
|
||||
const xmlChar *URI; /* the full URI as computed */
|
||||
int owner; /* does the entity own the childrens */
|
||||
};
|
||||
|
||||
/*
|
||||
|
4
parser.c
4
parser.c
@ -5474,6 +5474,7 @@ xmlParseReference(xmlParserCtxtPtr ctxt) {
|
||||
(ent->children == NULL)) {
|
||||
ent->children = list;
|
||||
ent->last = list;
|
||||
ent->owner = 1;
|
||||
list->parent = (xmlNodePtr) ent;
|
||||
} else {
|
||||
xmlFreeNodeList(list);
|
||||
@ -5539,7 +5540,9 @@ xmlParseReference(xmlParserCtxtPtr ctxt) {
|
||||
(list->next == NULL)) {
|
||||
list->parent = (xmlNodePtr) ent;
|
||||
list = NULL;
|
||||
ent->owner = 1;
|
||||
} else {
|
||||
ent->owner = 0;
|
||||
while (list != NULL) {
|
||||
list->parent = (xmlNodePtr) ctxt->node;
|
||||
list->doc = ctxt->myDoc;
|
||||
@ -5552,6 +5555,7 @@ xmlParseReference(xmlParserCtxtPtr ctxt) {
|
||||
xmlAddEntityReference(ent, list, NULL);
|
||||
}
|
||||
} else {
|
||||
ent->owner = 1;
|
||||
while (list != NULL) {
|
||||
list->parent = (xmlNodePtr) ent;
|
||||
if (list->next == NULL)
|
||||
|
Loading…
Reference in New Issue
Block a user