rrichards                                Mon, 27 Dec 2010 18:57:49 +0000

Revision: http://svn.php.net/viewvc?view=revision&revision=306759

Log:
fix crash with entity declarations

Changed paths:
    U   php/php-src/branches/PHP_5_3/ext/simplexml/simplexml.c
    U   php/php-src/trunk/ext/simplexml/simplexml.c

Modified: php/php-src/branches/PHP_5_3/ext/simplexml/simplexml.c
===================================================================
--- php/php-src/branches/PHP_5_3/ext/simplexml/simplexml.c      2010-12-27 
17:17:43 UTC (rev 306758)
+++ php/php-src/branches/PHP_5_3/ext/simplexml/simplexml.c      2010-12-27 
18:57:49 UTC (rev 306759)
@@ -1099,22 +1099,24 @@
                if (sxe->iter.type == SXE_ITER_ELEMENT) {
                        node = php_sxe_get_first_node(sxe, node TSRMLS_CC);
                }
-               attr = node ? (xmlAttrPtr)node->properties : NULL;
-               zattr = NULL;
-               test = sxe->iter.name && sxe->iter.type == SXE_ITER_ATTRLIST;
-               while (attr) {
-                       if ((!test || !xmlStrcmp(attr->name, sxe->iter.name)) 
&& match_ns(sxe, (xmlNodePtr)attr, sxe->iter.nsprefix, sxe->iter.isprefix)) {
-                               MAKE_STD_ZVAL(value);
-                               ZVAL_STRING(value, 
sxe_xmlNodeListGetString((xmlDocPtr) sxe->document->ptr, attr->children, 1), 0);
-                               namelen = xmlStrlen(attr->name) + 1;
-                               if (!zattr) {
-                                       MAKE_STD_ZVAL(zattr);
-                                       array_init(zattr);
-                                       sxe_properties_add(rv, "@attributes", 
sizeof("@attributes"), zattr TSRMLS_CC);
+               if (node->tpye != XML_ENTITY_DECL) {
+                       attr = node ? (xmlAttrPtr)node->properties : NULL;
+                       zattr = NULL;
+                       test = sxe->iter.name && sxe->iter.type == 
SXE_ITER_ATTRLIST;
+                       while (attr) {
+                               if ((!test || !xmlStrcmp(attr->name, 
sxe->iter.name)) && match_ns(sxe, (xmlNodePtr)attr, sxe->iter.nsprefix, 
sxe->iter.isprefix)) {
+                                       MAKE_STD_ZVAL(value);
+                                       ZVAL_STRING(value, 
sxe_xmlNodeListGetString((xmlDocPtr) sxe->document->ptr, attr->children, 1), 0);
+                                       namelen = xmlStrlen(attr->name) + 1;
+                                       if (!zattr) {
+                                               MAKE_STD_ZVAL(zattr);
+                                               array_init(zattr);
+                                               sxe_properties_add(rv, 
"@attributes", sizeof("@attributes"), zattr TSRMLS_CC);
+                                       }
+                                       add_assoc_zval_ex(zattr, 
(char*)attr->name, namelen, value);
                                }
-                               add_assoc_zval_ex(zattr, (char*)attr->name, 
namelen, value);
+                               attr = attr->next;
                        }
-                       attr = attr->next;
                }
        }


Modified: php/php-src/trunk/ext/simplexml/simplexml.c
===================================================================
--- php/php-src/trunk/ext/simplexml/simplexml.c 2010-12-27 17:17:43 UTC (rev 
306758)
+++ php/php-src/trunk/ext/simplexml/simplexml.c 2010-12-27 18:57:49 UTC (rev 
306759)
@@ -1099,22 +1099,24 @@
                if (sxe->iter.type == SXE_ITER_ELEMENT) {
                        node = php_sxe_get_first_node(sxe, node TSRMLS_CC);
                }
-               attr = node ? (xmlAttrPtr)node->properties : NULL;
-               zattr = NULL;
-               test = sxe->iter.name && sxe->iter.type == SXE_ITER_ATTRLIST;
-               while (attr) {
-                       if ((!test || !xmlStrcmp(attr->name, sxe->iter.name)) 
&& match_ns(sxe, (xmlNodePtr)attr, sxe->iter.nsprefix, sxe->iter.isprefix)) {
-                               MAKE_STD_ZVAL(value);
-                               ZVAL_STRING(value, 
sxe_xmlNodeListGetString((xmlDocPtr) sxe->document->ptr, attr->children, 1), 0);
-                               namelen = xmlStrlen(attr->name) + 1;
-                               if (!zattr) {
-                                       MAKE_STD_ZVAL(zattr);
-                                       array_init(zattr);
-                                       sxe_properties_add(rv, "@attributes", 
sizeof("@attributes"), zattr TSRMLS_CC);
+               if (node->tpye != XML_ENTITY_DECL) {
+                       attr = node ? (xmlAttrPtr)node->properties : NULL;
+                       zattr = NULL;
+                       test = sxe->iter.name && sxe->iter.type == 
SXE_ITER_ATTRLIST;
+                       while (attr) {
+                               if ((!test || !xmlStrcmp(attr->name, 
sxe->iter.name)) && match_ns(sxe, (xmlNodePtr)attr, sxe->iter.nsprefix, 
sxe->iter.isprefix)) {
+                                       MAKE_STD_ZVAL(value);
+                                       ZVAL_STRING(value, 
sxe_xmlNodeListGetString((xmlDocPtr) sxe->document->ptr, attr->children, 1), 0);
+                                       namelen = xmlStrlen(attr->name) + 1;
+                                       if (!zattr) {
+                                               MAKE_STD_ZVAL(zattr);
+                                               array_init(zattr);
+                                               sxe_properties_add(rv, 
"@attributes", sizeof("@attributes"), zattr TSRMLS_CC);
+                                       }
+                                       add_assoc_zval_ex(zattr, 
(char*)attr->name, namelen, value);
                                }
-                               add_assoc_zval_ex(zattr, (char*)attr->name, 
namelen, value);
+                               attr = attr->next;
                        }
-                       attr = attr->next;
                }
        }


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

Reply via email to