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

Reply via email to