[prev in list] [next in list] [prev in thread] [next in thread] 

List:       php-cvs
Subject:    [PHP-CVS] =?utf-8?q?svn:_/php/php-src/_branches/PHP=5F5=5F3/ext/simplexml/simplexml.c_trunk/ext/simp
From:       Rob_Richards <rrichards () php ! net>
Date:       2010-12-27 18:57:49
Message-ID: svn-rrichards-1293476269-306759-1947533197 () svn ! php ! net
[Download RAW message or body]

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

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic