rrichards Fri Jul 25 13:25:50 2003 EDT Modified files: /php-src/ext/dom domimplementation.c Log: doctype and namespace fix memory leak fix Index: php-src/ext/dom/domimplementation.c diff -u php-src/ext/dom/domimplementation.c:1.4 php-src/ext/dom/domimplementation.c:1.5 --- php-src/ext/dom/domimplementation.c:1.4 Thu Jun 12 16:02:05 2003 +++ php-src/ext/dom/domimplementation.c Fri Jul 25 13:25:50 2003 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: domimplementation.c,v 1.4 2003/06/12 20:02:05 rrichards Exp $ */ +/* $Id: domimplementation.c,v 1.5 2003/07/25 17:25:50 rrichards Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -130,7 +130,7 @@ zval *node = NULL, *rv = NULL; xmlDoc *docp; xmlNode *nodep; - xmlDtdPtr doctype = NULL, dtd = NULL; + xmlDtdPtr doctype = NULL; xmlNsPtr nsptr = NULL; int ret, uri_len = 0, name_len = 0; char *uri, *name; @@ -142,7 +142,7 @@ return; } - if (doctype != NULL) { + if (node != NULL) { DOM_GET_OBJ(doctype, node, xmlDtdPtr, doctobj); if (doctype->type == XML_DOCUMENT_TYPE_NODE) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid DocumentType object"); @@ -192,20 +192,16 @@ xmlFreeURI(uristruct); if (uri_len > 0) { - if (prefix == NULL) { + if ((nsptr = xmlNewNs(NULL, uri, prefix)) == NULL) { php_dom_throw_error(NAMESPACE_ERR, &return_value TSRMLS_CC); - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Namespace"); - xmlFree(localname); - RETURN_FALSE; - } else { - if ((nsptr = xmlNewNs(NULL, uri, prefix)) == NULL) { - php_dom_throw_error(NAMESPACE_ERR, &return_value TSRMLS_CC); + if (prefix != NULL) { xmlFree(prefix); - xmlFree(localname); - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Namespace"); - RETURN_FALSE; } + xmlFree(localname); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Namespace"); + RETURN_FALSE; } + } if (prefix != NULL) { xmlFree(prefix); @@ -223,24 +219,42 @@ } if (doctype != NULL) { - dtd = xmlCreateIntSubset (docp, doctype->name, - doctype->ExternalID, doctype->SystemID); + docp->intSubset = doctype; + doctype->parent = docp; + doctype->doc = docp; + docp->children = (xmlNodePtr) doctype; + docp->last = (xmlNodePtr) doctype; } if (localname != NULL) { nodep = xmlNewDocNode (docp, nsptr, localname, NULL); if (!nodep) { + if (doctype != NULL) { + docp->intSubset = NULL; + doctype->parent = NULL; + doctype->doc = NULL; + docp->children = NULL; + docp->last = NULL; + } xmlFreeDoc(docp); xmlFree(localname); /* Need some type of error here */ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unexpected Error"); RETURN_FALSE; } + + nodep->nsDef = nsptr; + xmlDocSetRootElement(docp, nodep); xmlFree(localname); } DOM_RET_OBJ(rv, (xmlNodePtr) docp, &ret, NULL); + + if (doctype != NULL) { + doctobj->document = ((dom_object *)((node_ptr *)docp->_private)->_private)->document; + increment_document_reference(doctobj, docp TSRMLS_CC); + } } /* }}} end dom_domimplementation_create_document */
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php