rrichards Mon Aug 14 11:58:49 2006 UTC Modified files: /php-src/ext/simplexml simplexml.c /php-src/ext/simplexml/tests bug38424.phpt Log: MFB: fix bug #38424 (Different attribute assignment if new or existing) add test http://cvs.php.net/viewvc.cgi/php-src/ext/simplexml/simplexml.c?r1=1.216&r2=1.217&diff_format=u Index: php-src/ext/simplexml/simplexml.c diff -u php-src/ext/simplexml/simplexml.c:1.216 php-src/ext/simplexml/simplexml.c:1.217 --- php-src/ext/simplexml/simplexml.c:1.216 Tue Aug 8 20:52:45 2006 +++ php-src/ext/simplexml/simplexml.c Mon Aug 14 11:58:49 2006 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: simplexml.c,v 1.216 2006/08/08 20:52:45 rrichards Exp $ */ +/* $Id: simplexml.c,v 1.217 2006/08/14 11:58:49 rrichards Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -366,6 +366,8 @@ static void change_node_zval(xmlNodePtr node, zval *value TSRMLS_DC) { zval value_copy; + xmlChar *buffer; + int buffer_len; if (!value) { @@ -386,7 +388,20 @@ convert_to_string_with_converter(value, UG(utf8_conv)); /* break missing intentionally */ case IS_STRING: - xmlNodeSetContentLen(node, (xmlChar *)Z_STRVAL_P(value), Z_STRLEN_P(value)); + if (node->type == XML_ATTRIBUTE_NODE) { + buffer = xmlEncodeEntitiesReentrant(node->doc, (xmlChar *)Z_STRVAL_P(value)); + buffer_len = xmlStrlen(buffer); + } else { + buffer = (xmlChar *)Z_STRVAL_P(value); + buffer_len = Z_STRLEN_P(value); + } + /* check for NULL buffer in case of memory error in xmlEncodeEntitiesReentrant */ + if (buffer) { + xmlNodeSetContentLen(node, buffer, buffer_len); + if (node->type == XML_ATTRIBUTE_NODE) { + xmlFree(buffer); + } + } if (value == &value_copy) { zval_dtor(value); } @@ -2324,7 +2339,7 @@ { php_info_print_table_start(); php_info_print_table_header(2, "Simplexml support", "enabled"); - php_info_print_table_row(2, "Revision", "$Revision: 1.216 $"); + php_info_print_table_row(2, "Revision", "$Revision: 1.217 $"); php_info_print_table_row(2, "Schema support", #ifdef LIBXML_SCHEMAS_ENABLED "enabled"); http://cvs.php.net/viewvc.cgi/php-src/ext/simplexml/tests/bug38424.phpt?r1=1.1&r2=1.2&diff_format=u Index: php-src/ext/simplexml/tests/bug38424.phpt diff -u /dev/null php-src/ext/simplexml/tests/bug38424.phpt:1.2 --- /dev/null Mon Aug 14 11:58:49 2006 +++ php-src/ext/simplexml/tests/bug38424.phpt Mon Aug 14 11:58:49 2006 @@ -0,0 +1,26 @@ +--TEST-- +Bug #38424 (Different attribute assignment if new or exists) +--SKIPIF-- +<?php if (!extension_loaded("simplexml")) print "skip"; ?> +--FILE-- +<?php + +$xml = simplexml_load_string(b'<xml></xml>'); + +$str = "abc & def" ; + +$xml["a1"] = "" ; +$xml["a1"] = htmlspecialchars($str,ENT_NOQUOTES) ; + +$xml["a2"] = htmlspecialchars($str,ENT_NOQUOTES) ; + +$xml["a3"] = "" ; +$xml["a3"] = $str ; + +$xml["a4"] = $str ; + +echo $xml->asXML(); +?> +--EXPECT-- +<?xml version="1.0"?> +<xml a1="abc &amp; def" a2="abc &amp; def" a3="abc & def" a4="abc & def"/>
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php