diff options
| author | Rob Richards <rrichards@php.net> | 2006-03-03 20:15:10 +0000 |
|---|---|---|
| committer | Rob Richards <rrichards@php.net> | 2006-03-03 20:15:10 +0000 |
| commit | 65211cddcc0fecbf7b0321cb250f5b7538428cf2 (patch) | |
| tree | bdeec77d7bc555f94f627f40c0c442f93355b4b6 /ext/dom/namednodemap.c | |
| parent | a1024ce67972714079bc591444a59870c780e350 (diff) | |
| download | php-git-65211cddcc0fecbf7b0321cb250f5b7538428cf2.tar.gz | |
fix crashes using notations and entity decls
add test
Diffstat (limited to 'ext/dom/namednodemap.c')
| -rw-r--r-- | ext/dom/namednodemap.c | 54 |
1 files changed, 35 insertions, 19 deletions
diff --git a/ext/dom/namednodemap.c b/ext/dom/namednodemap.c index 53707d02fb..1f7b80204f 100644 --- a/ext/dom/namednodemap.c +++ b/ext/dom/namednodemap.c @@ -61,8 +61,11 @@ int dom_namednodemap_length_read(dom_object *obj, zval **retval TSRMLS_DC) objmap = (dom_nnodemap_object *)obj->ptr; if (objmap != NULL) { - if (objmap->ht) { - count = xmlHashSize(objmap->ht); + if ((objmap->nodetype == XML_NOTATION_NODE) || + objmap->nodetype == XML_ENTITY_NODE) { + if (objmap->ht) { + count = xmlHashSize(objmap->ht); + } } else { nodep = dom_object_get_node(objmap->baseobj); if (nodep) { @@ -113,12 +116,17 @@ PHP_FUNCTION(dom_namednodemap_get_named_item) objmap = (dom_nnodemap_object *)intern->ptr; if (objmap != NULL) { - if (objmap->ht) { - if (objmap->nodetype == XML_ENTITY_NODE) { - itemnode = (xmlNodePtr)xmlHashLookup(objmap->ht, named); - } else { - notep = (xmlNotation *)xmlHashLookup(objmap->ht, named); - itemnode = create_notation(notep->name, notep->PublicID, notep->SystemID); + if ((objmap->nodetype == XML_NOTATION_NODE) || + objmap->nodetype == XML_ENTITY_NODE) { + if (objmap->ht) { + if (objmap->nodetype == XML_ENTITY_NODE) { + itemnode = (xmlNodePtr)xmlHashLookup(objmap->ht, named); + } else { + notep = (xmlNotation *)xmlHashLookup(objmap->ht, named); + if (notep) { + itemnode = create_notation(notep->name, notep->PublicID, notep->SystemID); + } + } } } else { nodep = dom_object_get_node(objmap->baseobj); @@ -185,11 +193,14 @@ PHP_FUNCTION(dom_namednodemap_item) objmap = (dom_nnodemap_object *)intern->ptr; if (objmap != NULL) { - if (objmap->ht) { - if (objmap->nodetype == XML_ENTITY_NODE) { - itemnode = php_dom_libxml_hash_iter(objmap->ht, index); - } else { - itemnode = php_dom_libxml_notation_iter(objmap->ht, index); + if ((objmap->nodetype == XML_NOTATION_NODE) || + objmap->nodetype == XML_ENTITY_NODE) { + if (objmap->ht) { + if (objmap->nodetype == XML_ENTITY_NODE) { + itemnode = php_dom_libxml_hash_iter(objmap->ht, index); + } else { + itemnode = php_dom_libxml_notation_iter(objmap->ht, index); + } } } else { nodep = dom_object_get_node(objmap->baseobj); @@ -241,12 +252,17 @@ PHP_FUNCTION(dom_namednodemap_get_named_item_ns) objmap = (dom_nnodemap_object *)intern->ptr; if (objmap != NULL) { - if (objmap->ht) { - if (objmap->nodetype == XML_ENTITY_NODE) { - itemnode = (xmlNodePtr)xmlHashLookup(objmap->ht, named); - } else { - notep = (xmlNotation *)xmlHashLookup(objmap->ht, named); - itemnode = create_notation(notep->name, notep->PublicID, notep->SystemID); + if ((objmap->nodetype == XML_NOTATION_NODE) || + objmap->nodetype == XML_ENTITY_NODE) { + if (objmap->ht) { + if (objmap->nodetype == XML_ENTITY_NODE) { + itemnode = (xmlNodePtr)xmlHashLookup(objmap->ht, named); + } else { + notep = (xmlNotation *)xmlHashLookup(objmap->ht, named); + if (notep) { + itemnode = create_notation(notep->name, notep->PublicID, notep->SystemID); + } + } } } else { nodep = dom_object_get_node(objmap->baseobj); |
