rrichards               Mon Oct 20 11:50:35 2003 EDT

  Modified files:              
    /php-src/ext/dom    xpath.c php_dom.c node.c element.c dom_ce.h 
                        document.c 
  Log:
  implement namespace nodes
  fix getElementsByTagName
  fixes to attribute namespaces
  remove safemode stuff as its handled in streams
  
Index: php-src/ext/dom/xpath.c
diff -u php-src/ext/dom/xpath.c:1.7 php-src/ext/dom/xpath.c:1.8
--- php-src/ext/dom/xpath.c:1.7 Sun Oct  5 12:37:50 2003
+++ php-src/ext/dom/xpath.c     Mon Oct 20 11:50:34 2003
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: xpath.c,v 1.7 2003/10/05 16:37:50 shane Exp $ */
+/* $Id: xpath.c,v 1.8 2003/10/20 15:50:34 rrichards Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -214,8 +214,27 @@
                for (i = 0; i < nodesetp->nodeNr; i++) {
                        xmlNodePtr node = nodesetp->nodeTab[i];
                        zval *child;
-                       MAKE_STD_ZVAL(child);
 
+                       MAKE_STD_ZVAL(child);
+                       
+                       if (node->type == XML_NAMESPACE_DECL) {
+                               xmlNsPtr curns;
+                               xmlNodePtr nsparent;
+
+                               nsparent = node->_private;
+                               curns = xmlNewNs(NULL, node->name, NULL);
+                               if (node->children) {
+                                       curns->prefix = xmlStrdup((char *) 
node->children);
+                               }
+                               if (node->children) {
+                                       node = xmlNewDocNode(docp, NULL, (char *) 
node->children, node->name);
+                               } else {
+                                       node = xmlNewDocNode(docp, NULL, "xmlns", 
node->name);
+                               }
+                               node->type = XML_NAMESPACE_DECL;
+                               node->parent = nsparent;
+                               node->ns = curns;
+                       }
                        child = php_dom_create_object(node, &ret, NULL, child, intern 
TSRMLS_CC);
                        add_next_index_zval(return_value, child);
                }
Index: php-src/ext/dom/php_dom.c
diff -u php-src/ext/dom/php_dom.c:1.37 php-src/ext/dom/php_dom.c:1.38
--- php-src/ext/dom/php_dom.c:1.37      Sun Oct 19 19:17:54 2003
+++ php-src/ext/dom/php_dom.c   Mon Oct 20 11:50:34 2003
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_dom.c,v 1.37 2003/10/19 23:17:54 shane Exp $ */
+/* $Id: php_dom.c,v 1.38 2003/10/20 15:50:34 rrichards Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -58,6 +58,7 @@
 static HashTable dom_notation_prop_handlers;
 static HashTable dom_entity_prop_handlers;
 static HashTable dom_processinginstruction_prop_handlers;
+static HashTable dom_namespace_node_prop_handlers;
 #if defined(LIBXML_XPATH_ENABLED)
 static HashTable dom_xpath_prop_handlers;
 #endif
@@ -485,6 +486,19 @@
        dom_register_prop_handler(&dom_node_prop_handlers, "textContent", 
dom_node_text_content_read, dom_node_text_content_write TSRMLS_CC);
        zend_hash_add(&classes, ce.name, ce.name_length + 1, &dom_node_prop_handlers, 
sizeof(dom_node_prop_handlers), NULL);
 
+       REGISTER_DOM_CLASS(ce, "domnamespacenode", NULL, NULL, 
dom_namespace_node_class_entry);
+
+       zend_hash_init(&dom_namespace_node_prop_handlers, 0, NULL, NULL, 1);
+       dom_register_prop_handler(&dom_namespace_node_prop_handlers, "nodeName", 
dom_node_node_name_read, NULL TSRMLS_CC);
+       dom_register_prop_handler(&dom_namespace_node_prop_handlers, "nodeValue", 
dom_node_node_value_read, NULL TSRMLS_CC);
+       dom_register_prop_handler(&dom_namespace_node_prop_handlers, "nodeType", 
dom_node_node_type_read, NULL TSRMLS_CC);
+       dom_register_prop_handler(&dom_namespace_node_prop_handlers, "prefix", 
dom_node_prefix_read, NULL TSRMLS_CC);
+       dom_register_prop_handler(&dom_namespace_node_prop_handlers, "localName", 
dom_node_local_name_read, NULL TSRMLS_CC);
+       dom_register_prop_handler(&dom_namespace_node_prop_handlers, "namespaceURI", 
dom_node_namespace_uri_read, NULL TSRMLS_CC);
+       dom_register_prop_handler(&dom_namespace_node_prop_handlers, "ownerDocument", 
dom_node_owner_document_read, NULL TSRMLS_CC);
+       dom_register_prop_handler(&dom_namespace_node_prop_handlers, "parentNode", 
dom_node_parent_node_read, NULL TSRMLS_CC);
+       zend_hash_add(&classes, ce.name, ce.name_length + 1, 
&dom_namespace_node_prop_handlers, sizeof(dom_namespace_node_prop_handlers), NULL);
+
        REGISTER_DOM_CLASS(ce, "domdocumentfragment", dom_node_class_entry, 
php_dom_documentfragment_class_functions, dom_documentfragment_class_entry);
        zend_hash_add(&classes, ce.name, ce.name_length + 1, &dom_node_prop_handlers, 
sizeof(dom_node_prop_handlers), NULL);
        
@@ -742,6 +756,7 @@
        zend_hash_destroy(&dom_domimplementationlist_prop_handlers);
        zend_hash_destroy(&dom_document_prop_handlers);
        zend_hash_destroy(&dom_node_prop_handlers);
+       zend_hash_destroy(&dom_namespace_node_prop_handlers);
        zend_hash_destroy(&dom_nodelist_prop_handlers);
        zend_hash_destroy(&dom_namednodemap_prop_handlers);
        zend_hash_destroy(&dom_characterdata_prop_handlers);
@@ -815,8 +830,6 @@
                        case XML_ENTITY_DECL:
                        case XML_ELEMENT_DECL:
                        case XML_ATTRIBUTE_DECL:
-                       case XML_NAMESPACE_DECL:
-                               /* These can never stand alone */
                                break;
                        case XML_NOTATION_NODE:
                                /* These require special handling */
@@ -831,6 +844,12 @@
                                }
                                xmlFree(node);
                                break;
+                       case XML_NAMESPACE_DECL:
+                               if (node->ns) {
+                                       xmlFreeNs(node->ns);
+                                       node->ns = NULL;
+                               }
+                               node->type = XML_ELEMENT_NODE;
                        default:
                                xmlFreeNode(node);
                }
@@ -859,6 +878,7 @@
                                case XML_DOCUMENT_TYPE_NODE:
                                case XML_ENTITY_DECL:
                                case XML_ATTRIBUTE_NODE:
+                               case XML_NAMESPACE_DECL:
                                        node_free_list(node->children TSRMLS_CC);
                                        break;
                                default:
@@ -889,7 +909,7 @@
                case XML_HTML_DOCUMENT_NODE:
                        break;
                default:
-                       if (node->parent == NULL) {
+                       if (node->parent == NULL || node->type == XML_NAMESPACE_DECL) {
                                node_free_list((xmlNodePtr) node->children TSRMLS_CC);
                                switch (node->type) {
                                        /* Skip property freeing for the following 
types */
@@ -898,6 +918,7 @@
                                        case XML_DOCUMENT_TYPE_NODE:
                                        case XML_ENTITY_DECL:
                                        case XML_ATTRIBUTE_NODE:
+                                       case XML_NAMESPACE_DECL:
                                                break;
                                        default:
                                                node_free_list((xmlNodePtr) 
node->properties TSRMLS_CC);
@@ -1118,6 +1139,11 @@
                        ce = dom_notation_class_entry;
                        break;
                }
+               case XML_NAMESPACE_DECL:
+               {
+                       ce = dom_namespace_node_class_entry;
+                       break;
+               }
                default:
                        php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unsupported node 
type: %d\n", Z_TYPE_P(obj));
                        ZVAL_NULL(wrapper);
@@ -1183,17 +1209,13 @@
 /* {{{ void dom_element_get_elements_by_tag_name_ns_raw(xmlNodePtr nodep, char *ns, 
char *local, zval **retval  TSRMLS_DC) */
 void dom_get_elements_by_tag_name_ns_raw(xmlNodePtr nodep, char *ns, char *local, 
zval **retval, dom_object *intern  TSRMLS_DC)
 {
-       dom_object *wrapper;
        int ret;
 
        while (nodep != NULL) {
                if (nodep->type == XML_ELEMENT_NODE && xmlStrEqual(nodep->name, 
local)) {
                        if (ns == NULL || (nodep->ns != NULL && 
xmlStrEqual(nodep->ns->href, ns))) {
-                               zval *child = NULL;
-                               wrapper = dom_object_get_data(nodep);
-                               if (wrapper == NULL) {
-                                       MAKE_STD_ZVAL(child);
-                               }
+                               zval *child;
+                               MAKE_STD_ZVAL(child);
 
                                child = php_dom_create_object(nodep, &ret, NULL, 
child, intern TSRMLS_CC);
                                add_next_index_zval(*retval, child);
@@ -1328,7 +1350,7 @@
        if (localName == NULL || xmlStrEqual(localName, "")) {
                cur = node->nsDef;
                while (cur != NULL) {
-                       if (cur->prefix == NULL) {
+                       if (cur->prefix == NULL  && cur->href != NULL) {
                                ret = cur;
                                break;
                        }
Index: php-src/ext/dom/node.c
diff -u php-src/ext/dom/node.c:1.13 php-src/ext/dom/node.c:1.14
--- php-src/ext/dom/node.c:1.13 Sun Oct  5 17:53:08 2003
+++ php-src/ext/dom/node.c      Mon Oct 20 11:50:34 2003
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: node.c,v 1.13 2003/10/05 21:53:08 shane Exp $ */
+/* $Id: node.c,v 1.14 2003/10/20 15:50:34 rrichards Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -84,6 +84,17 @@
                                str = (char *) nodep->name;
                        }
                        break;
+               case XML_NAMESPACE_DECL:
+                       ns = nodep->ns;
+                       if (ns != NULL && ns->prefix) {
+                               qname = xmlStrdup("xmlns");
+                               qname = xmlStrcat(qname, ":");
+                               qname = xmlStrcat(qname, nodep->name);
+                               str = qname;
+                       } else {
+                               str = (char *) nodep->name;
+                       }
+                       break;
                case XML_DOCUMENT_TYPE_NODE:
                case XML_DTD_NODE:
                case XML_PI_NODE:
@@ -108,11 +119,6 @@
                case XML_TEXT_NODE:
                        str = "#text";
                        break;
-               case XML_NAMESPACE_DECL:
-                       if (nodep->ns != NULL) {
-                               str = (char *) nodep->ns->prefix;
-                       }
-                       break;
                default:
                        php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Node 
Type");
                        return FAILURE;
@@ -160,6 +166,9 @@
                case XML_PI_NODE:
                        str = xmlNodeGetContent(nodep);
                        break;
+               case XML_NAMESPACE_DECL:
+                       str = xmlNodeGetContent(nodep->children);
+                       break;
                default:
                        str = NULL;
                        break;
@@ -519,6 +528,7 @@
        switch (nodep->type) {
                case XML_ELEMENT_NODE:
                case XML_ATTRIBUTE_NODE:
+               case XML_NAMESPACE_DECL:
                        if (nodep->ns != NULL) {
                                str = (char *) nodep->ns->href;
                        }
@@ -559,6 +569,7 @@
        switch (nodep->type) {
                case XML_ELEMENT_NODE:
                case XML_ATTRIBUTE_NODE:
+               case XML_NAMESPACE_DECL:
                        ns = nodep->ns;
                        if (ns != NULL && ns->prefix) {
                                str = (char *) ns->prefix;
@@ -650,7 +661,7 @@
 
        ALLOC_ZVAL(*retval);
 
-       if (nodep->type == XML_ELEMENT_NODE || nodep->type == XML_ATTRIBUTE_NODE) {
+       if (nodep->type == XML_ELEMENT_NODE || nodep->type == XML_ATTRIBUTE_NODE || 
nodep->type == XML_NAMESPACE_DECL) {
                ZVAL_STRING(*retval, (char *) (nodep->name), 1);
        } else {
                ZVAL_NULL(*retval);
Index: php-src/ext/dom/element.c
diff -u php-src/ext/dom/element.c:1.17 php-src/ext/dom/element.c:1.18
--- php-src/ext/dom/element.c:1.17      Mon Oct  6 17:28:01 2003
+++ php-src/ext/dom/element.c   Mon Oct 20 11:50:34 2003
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: element.c,v 1.17 2003/10/06 21:28:01 rrichards Exp $ */
+/* $Id: element.c,v 1.18 2003/10/20 15:50:34 rrichards Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -392,60 +392,21 @@
 PHP_FUNCTION(dom_element_get_elements_by_tag_name)
 {
        zval *id;
-       xmlXPathContextPtr ctxp;
-       xmlNodePtr nodep;
-       xmlDocPtr docp;
-       xmlXPathObjectPtr xpathobjp;
-       int name_len, ret;
+       xmlNodePtr elemp;
+       int name_len;
        dom_object *intern;
-       char *str,*name;
+       char *name;
 
-       DOM_GET_THIS_OBJ(nodep, id, xmlNodePtr, intern);
+       DOM_GET_THIS_OBJ(elemp, id, xmlNodePtr, intern);
 
        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &name, &name_len) == 
FAILURE) {
                return;
        }
 
-       docp = nodep->doc;
-
-       ctxp = xmlXPathNewContext(docp);
-
-       ctxp->node = nodep;
-       str = (char*) safe_emalloc((name_len+13), sizeof(char), 0) ;
-       sprintf(str ,"descendant::%s",name);
-
-       xpathobjp = xmlXPathEval(str, ctxp);
-       efree(str);
-       ctxp->node = NULL;
-
-       if (!xpathobjp) {
-               RETURN_FALSE;
-       }
-
-       if (xpathobjp->type ==  XPATH_NODESET) {
-               int i;
-               xmlNodeSetPtr nodesetp;
-
-               if (NULL == (nodesetp = xpathobjp->nodesetval)) {
-                       xmlXPathFreeObject (xpathobjp);
-                       xmlXPathFreeContext(ctxp);
-                       RETURN_FALSE;
-               }
-
-               array_init(return_value);
-
-               for (i = 0; i < nodesetp->nodeNr; i++) {
-                       xmlNodePtr node = nodesetp->nodeTab[i];
-                       zval *child;
-                       MAKE_STD_ZVAL(child);
-
-                       child = php_dom_create_object(node, &ret, NULL, child, intern 
TSRMLS_CC);
-                       add_next_index_zval(return_value, child);
-               }
-       }
+       array_init(return_value);
+       elemp = elemp->children;
 
-       xmlXPathFreeObject(xpathobjp);
-       xmlXPathFreeContext(ctxp);
+       dom_get_elements_by_tag_name_ns_raw(elemp, NULL, name, &return_value, intern 
TSRMLS_CC);
 }
 /* }}} end dom_element_get_elements_by_tag_name */
 
@@ -496,15 +457,15 @@
 */
 PHP_FUNCTION(dom_element_set_attribute_ns)
 {
-       zval *id, *rv = NULL;
+       zval *id;
        xmlNodePtr elemp, nodep = NULL;
        xmlNsPtr nsptr;
        xmlAttr *attr;
-       int ret, uri_len = 0, name_len = 0, value_len = 0;
+       int uri_len = 0, name_len = 0, value_len = 0;
        char *uri, *name, *value;
        char *localname = NULL, *prefix = NULL;
        dom_object *intern;
-       int errorcode = 0, stricterror;
+       int errorcode = 0, stricterror, is_xmlns = 0;
 
        DOM_GET_THIS_OBJ(elemp, id, xmlNodePtr, intern);
 
@@ -516,7 +477,7 @@
 
        if (dom_node_is_read_only(elemp) == SUCCESS) {
                php_dom_throw_error(NO_MODIFICATION_ALLOWED_ERR, stricterror 
TSRMLS_CC);
-               RETURN_FALSE;
+               RETURN_NULL();
        }
 
        errorcode = dom_check_qname(name, &localname, &prefix, uri_len, name_len);
@@ -527,19 +488,37 @@
                        if (nodep != NULL) {
                                node_list_unlink(nodep->children TSRMLS_CC);
                        }
-                       nsptr = xmlSearchNsByHref(elemp->doc, elemp, uri);
-                       while (nsptr && nsptr->prefix == NULL) {
-                               nsptr = nsptr->next;
+
+                       if (xmlStrEqual(prefix,"xmlns") && xmlStrEqual(uri, 
DOM_XMLNS_NAMESPACE)) {
+                               is_xmlns = 1;
+                               nsptr = dom_get_nsdecl(elemp, localname);
+                       } else {
+                               nsptr = xmlSearchNsByHref(elemp->doc, elemp, uri);
+                               while (nsptr && nsptr->prefix == NULL) {
+                                       nsptr = nsptr->next;
+                               }
                        }
+
                        if (nsptr == NULL) {
                                if (prefix == NULL) {
                                        errorcode = NAMESPACE_ERR;
                                } else {
-                                       nsptr = dom_get_ns(elemp, uri, &errorcode, 
prefix);
+                                       if (is_xmlns == 1) {
+                                               xmlNewNs(elemp, value, localname);
+                                       } else {
+                                               nsptr = dom_get_ns(elemp, uri, 
&errorcode, prefix);
+                                       }
+                               }
+                       } else {
+                               if (is_xmlns == 1) {
+                                       if (nsptr->href) {
+                                               xmlFree((xmlChar *) nsptr->href);
+                                       }
+                                       nsptr->href = xmlStrdup(value);
                                }
                        }
 
-                       if (errorcode == 0) {
+                       if (errorcode == 0 && is_xmlns == 0) {
                                attr = xmlSetNsProp(elemp, nsptr, localname, value);
                        }
                } else {
@@ -558,14 +537,9 @@
 
        if (errorcode != 0) {
                php_dom_throw_error(errorcode, stricterror TSRMLS_CC);
-               RETURN_FALSE;
-       }
-
-       if (nodep == NULL) {
-               RETURN_FALSE;
        }
 
-       DOM_RET_OBJ(rv, nodep, &ret, intern);
+       RETURN_NULL();
 }
 /* }}} end dom_element_set_attribute_ns */
 
@@ -579,6 +553,7 @@
        zval *id;
        xmlNode *nodep;
        xmlAttr *attrp;
+       xmlNsPtr nsptr;
        dom_object *intern;
        int name_len, uri_len;
        char *name, *uri;
@@ -591,17 +566,28 @@
 
        if (dom_node_is_read_only(nodep) == SUCCESS) {
                php_dom_throw_error(NO_MODIFICATION_ALLOWED_ERR, 
dom_get_strict_error(intern->document) TSRMLS_CC);
-               RETURN_FALSE;
+               RETURN_NULL();
        }
 
-       if (xmlStrEqual(uri, DOM_XMLNS_NAMESPACE)) {
-               DOM_NOT_IMPLEMENTED();
-       } else {
-               attrp = xmlHasNsProp(nodep, name, uri);
-               if (attrp == NULL) {
-                       RETURN_FALSE;
+       attrp = xmlHasNsProp(nodep, name, uri);
+
+       nsptr = dom_get_nsdecl(nodep, name);
+       if (nsptr != NULL) {
+               if (xmlStrEqual(uri, nsptr->href)) {
+                       if (nsptr->href != NULL) {
+                               xmlFree((char *) nsptr->href);
+                               nsptr->href = NULL;
+                       }
+                       if (nsptr->prefix != NULL) {
+                               xmlFree((char *) nsptr->prefix);
+                               nsptr->prefix = NULL;
+                       }
+               } else {
+                       RETURN_NULL();
                }
+       }
 
+       if (attrp) {
                if (dom_object_get_data((xmlNodePtr) attrp) == NULL) {
                        node_list_unlink(attrp->children TSRMLS_CC);
                        xmlUnlinkNode((xmlNodePtr) attrp);
@@ -611,7 +597,7 @@
                }
        }
 
-       RETURN_TRUE;
+       RETURN_NULL();
 }
 /* }}} end dom_element_remove_attribute_ns */
 
@@ -622,12 +608,12 @@
 */
 PHP_FUNCTION(dom_element_get_attribute_node_ns)
 {
-       zval *id;
+       zval *id, *rv = NULL;
        xmlNodePtr elemp;
-       xmlNs *nsp;
+       xmlAttrPtr attrp;
        dom_object *intern;
-       int uri_len, name_len;
-       char *uri, *name, *value;
+       int uri_len, name_len, ret;
+       char *uri, *name;
 
        DOM_GET_THIS_OBJ(elemp, id, xmlNodePtr, intern);
 
@@ -635,23 +621,13 @@
                return;
        }
 
-       value = xmlGetNsProp(elemp, name, uri);
+       attrp = xmlHasNsProp(elemp, name, uri);
 
-       if (value != NULL) {
-               RETVAL_STRING(value, 1);
-               xmlFree(value);
-       } else {
-               if (xmlStrEqual(name, DOM_XMLNS_NAMESPACE)) {
-                       nsp = dom_get_nsdecl(elemp, name);
-                       if (nsp != NULL) {
-                               RETVAL_STRING((char *) nsp->href, 1);
-                       } else {
-                               RETVAL_EMPTY_STRING();
-                       }
-               } else {
-                       RETVAL_EMPTY_STRING();
-               }
+       if (attrp == NULL) {
+               RETURN_NULL();
        }
+
+       DOM_RET_OBJ(rv, (xmlNodePtr) attrp, &ret, intern);
 
 }
 /* }}} end dom_element_get_attribute_node_ns */
Index: php-src/ext/dom/dom_ce.h
diff -u php-src/ext/dom/dom_ce.h:1.3 php-src/ext/dom/dom_ce.h:1.4
--- php-src/ext/dom/dom_ce.h:1.3        Thu Jul 24 09:18:40 2003
+++ php-src/ext/dom/dom_ce.h    Mon Oct 20 11:50:34 2003
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: dom_ce.h,v 1.3 2003/07/24 13:18:40 rrichards Exp $ */
+/* $Id: dom_ce.h,v 1.4 2003/10/20 15:50:34 rrichards Exp $ */
 #ifndef DOM_CE_H
 #define DOM_CE_H
 
@@ -53,5 +53,6 @@
 #if defined(LIBXML_XPATH_ENABLED)
 zend_class_entry *dom_xpath_class_entry;
 #endif
+zend_class_entry *dom_namespace_node_class_entry;
 
 #endif /* DOM_CE_H */
Index: php-src/ext/dom/document.c
diff -u php-src/ext/dom/document.c:1.30 php-src/ext/dom/document.c:1.31
--- php-src/ext/dom/document.c:1.30     Mon Oct  6 17:28:01 2003
+++ php-src/ext/dom/document.c  Mon Oct 20 11:50:34 2003
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: document.c,v 1.30 2003/10/06 21:28:01 rrichards Exp $ */
+/* $Id: document.c,v 1.31 2003/10/20 15:50:34 rrichards Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -852,13 +852,11 @@
 PHP_FUNCTION(dom_document_get_elements_by_tag_name)
 {
        zval *id;
-       xmlXPathContextPtr ctxp;
        xmlDocPtr docp;
-       xmlXPathObjectPtr xpathobjp;
+       xmlNodePtr elemp;
+       int name_len;
        dom_object *intern;
-
-       int name_len, ret;
-       char *str,*name;
+       char *name;
 
        DOM_GET_THIS_OBJ(docp, id, xmlDocPtr, intern);
 
@@ -866,44 +864,10 @@
                return;
        }
 
-       ctxp = xmlXPathNewContext(docp);
-
-       ctxp->node = NULL;
-       str = (char*) safe_emalloc((name_len+3), sizeof(char), 0) ;
-       sprintf(str ,"//%s",name);
-
-       xpathobjp = xmlXPathEval(str, ctxp);
-       efree(str);
-       ctxp->node = NULL;
-
-       if (!xpathobjp) {
-               RETURN_FALSE;
-       }
-
-       if (xpathobjp->type ==  XPATH_NODESET) {
-               int i;
-               xmlNodeSetPtr nodesetp;
-
-               if (NULL == (nodesetp = xpathobjp->nodesetval)) {
-                       xmlXPathFreeObject (xpathobjp);
-                       xmlXPathFreeContext(ctxp);
-                       RETURN_FALSE;
-               }
-
-               array_init(return_value);
-
-               for (i = 0; i < nodesetp->nodeNr; i++) {
-                       xmlNodePtr node = nodesetp->nodeTab[i];
-                       zval *child;
-                       MAKE_STD_ZVAL(child);
-
-                       child = php_dom_create_object(node, &ret, NULL, child, intern 
TSRMLS_CC);
-                       add_next_index_zval(return_value, child);
-               }
-       }
+       array_init(return_value);
+       elemp = xmlDocGetRootElement(docp);
 
-       xmlXPathFreeObject(xpathobjp);
-       xmlXPathFreeContext(ctxp);
+       dom_get_elements_by_tag_name_ns_raw(elemp, NULL, name, &return_value, intern 
TSRMLS_CC);
 }
 /* }}} end dom_document_get_elements_by_tag_name */
 
@@ -1256,11 +1220,7 @@
 
        xmlFreeURI(uri);
 
-       if ((PG(safe_mode) && (!php_checkuid(file_dest, NULL, 
CHECKUID_CHECK_FILE_AND_DIR))) || php_check_open_basedir(file_dest TSRMLS_CC)) {
-               return NULL;
-       } else {
-               return file_dest;
-       }
+       return file_dest;
 }
 
 
@@ -1299,11 +1259,16 @@
                if (file_dest) {
                        ctxt = xmlCreateFileParserCtxt(file_dest);
                }
+               
        } else {
                ctxt = xmlCreateDocParserCtxt(source);
        }
 
        xmlKeepBlanksDefault(keep_blanks);
+       /* xmlIndentTreeOutput default is changed in xmlKeepBlanksDefault
+       reset back to 1 which is default value */
+
+       xmlIndentTreeOutput = 1;
 
        if (ctxt == NULL) {
                return(NULL);
@@ -1446,10 +1411,6 @@
        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &file, &file_len) == 
FAILURE) {
                return;
        }
-       
-       if ((PG(safe_mode) && (!php_checkuid(file, NULL, 
CHECKUID_CHECK_FILE_AND_DIR))) || php_check_open_basedir(file TSRMLS_CC)) {
-               RETURN_FALSE;
-       }
 
        /* encoding handled by property on doc */
 
@@ -1539,7 +1500,7 @@
     
        cvp.userData = NULL;
        cvp.error    = (xmlValidityErrorFunc) php_dom_validate_error;
-       cvp.warning  = NULL;
+       cvp.warning  = (xmlValidityErrorFunc) php_dom_validate_error;
 
        if (xmlValidateDocument(&cvp, docp)) {
                RETVAL_TRUE;
@@ -1735,9 +1696,6 @@
        }
 
        if (mode == DOM_LOAD_FILE) {
-               if ((PG(safe_mode) && (!php_checkuid(source, NULL, 
CHECKUID_CHECK_FILE_AND_DIR))) || php_check_open_basedir(source TSRMLS_CC)) {
-                       RETURN_FALSE;
-               }
                newdoc = htmlParseFile(source, NULL);
        } else {
                newdoc = htmlParseDoc(source, NULL);
@@ -1807,10 +1765,6 @@
        
        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &file, &file_len) == 
FAILURE) {
                return;
-       }
-       
-       if ((PG(safe_mode) && (!php_checkuid(file, NULL, 
CHECKUID_CHECK_FILE_AND_DIR))) || php_check_open_basedir(file TSRMLS_CC)) {
-               RETURN_FALSE;
        }
 
        /* encoding handled by property on doc */

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to