summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnatol Belski <ab@php.net>2015-05-29 21:16:56 +0200
committerAnatol Belski <ab@php.net>2015-05-29 21:16:56 +0200
commit5683b6fa3962f483a407ca17d49397b203ed4145 (patch)
treecb8ab75f98544ed9cdd452130c85df6a2942417c
parentc4e9651b587e1ebcf3e2de7a2d3d586c0cc3e0c4 (diff)
downloadphp-git-5683b6fa3962f483a407ca17d49397b203ed4145.tar.gz
Refactored the fix for bug #66084, by cmb@php.net
-rw-r--r--NEWS4
-rw-r--r--ext/simplexml/simplexml.c2
-rw-r--r--ext/simplexml/tests/bug61335.phpt19
-rw-r--r--ext/simplexml/tests/bug62639.phpt63
-rw-r--r--ext/simplexml/tests/bug67116.phpt93
-rw-r--r--ext/simplexml/tests/bug67572.phpt33
-rw-r--r--ext/simplexml/tests/bug69169.phpt70
-rw-r--r--ext/simplexml/tests/bug69491.phpt20
8 files changed, 303 insertions, 1 deletions
diff --git a/NEWS b/NEWS
index 7997ccfb85..9e455df7c1 100644
--- a/NEWS
+++ b/NEWS
@@ -35,6 +35,10 @@
. Fixed bug #69549 (Memory leak with opcache.optimization_level=0xFFFFFFFF).
(Laruence, Dmitry)
+- SimpleXML:
+ . Refactored the fix for bug #66084 (simplexml_load_string() mangles empty
+ node name). (Christoph Michael Becker)
+
14 May 2015, PHP 5.5.25
- Core:
diff --git a/ext/simplexml/simplexml.c b/ext/simplexml/simplexml.c
index e0de6ee7ef..6b8e23a01a 100644
--- a/ext/simplexml/simplexml.c
+++ b/ext/simplexml/simplexml.c
@@ -1129,7 +1129,7 @@ static HashTable * sxe_get_prop_hash(zval *object, int is_debug TSRMLS_DC) /* {{
node = NULL;
} else if (sxe->iter.type != SXE_ITER_CHILD) {
- if ( !node->children || !node->parent || !node->next || node->children->next || node->children->children || node->parent->children == node->parent->last ) {
+ if ( sxe->iter.type == SXE_ITER_NONE || !node->children || !node->parent || node->children->next || node->children->children || node->parent->children == node->parent->last ) {
node = node->children;
} else {
iter_data = sxe->iter.data;
diff --git a/ext/simplexml/tests/bug61335.phpt b/ext/simplexml/tests/bug61335.phpt
new file mode 100644
index 0000000000..d2b9477ceb
--- /dev/null
+++ b/ext/simplexml/tests/bug61335.phpt
@@ -0,0 +1,19 @@
+--TEST--
+Bug #61335 - Access to array node returns wrong truth value
+--SKIPIF--
+<?php
+if (!extension_loaded("simplexml")) die("skip SimpleXML not available");
+?>
+--FILE--
+<?php
+$rec1 = simplexml_load_string("<foo><bar>aa</bar>\n</foo>");
+$rec2 = simplexml_load_string("<foo><bar>aa</bar></foo>");
+
+if ($rec1->bar[0]) echo "NONEMPTY1\n";
+if ($rec1->bar[0] . "") echo "NONEMPTY2\n";
+if ($rec2->bar[0]) echo "NONEMPTY3\n";
+?>
+--EXPECT--
+NONEMPTY1
+NONEMPTY2
+NONEMPTY3
diff --git a/ext/simplexml/tests/bug62639.phpt b/ext/simplexml/tests/bug62639.phpt
new file mode 100644
index 0000000000..4a4e157b76
--- /dev/null
+++ b/ext/simplexml/tests/bug62639.phpt
@@ -0,0 +1,63 @@
+--TEST--
+Bug #62639 (XML structure broken)
+--SKIPIF--
+<?php
+if (!extension_loaded("simplexml")) die("skip SimpleXML not available");
+?>
+--FILE--
+<?php
+
+class A extends SimpleXMLElement
+{
+}
+
+$xml1 = <<<XML
+<?xml version="1.0"?>
+<a>
+ <b>
+ <c>
+ <value attr="Some Attr">Some Value</value>
+ </c>
+ </b>
+</a>
+XML;
+
+$a1 = new A($xml1);
+
+foreach ($a1->b->c->children() as $key => $value) {
+ var_dump($value);
+}
+
+$xml2 = <<<XML
+<?xml version="1.0"?>
+<a>
+ <b>
+ <c><value attr="Some Attr">Some Value</value></c>
+ </b>
+</a>
+XML;
+
+$a2 = new A($xml2);
+
+foreach ($a2->b->c->children() as $key => $value) {
+ var_dump($value);
+}?>
+--EXPECT--
+object(A)#2 (2) {
+ ["@attributes"]=>
+ array(1) {
+ ["attr"]=>
+ string(9) "Some Attr"
+ }
+ [0]=>
+ string(10) "Some Value"
+}
+object(A)#3 (2) {
+ ["@attributes"]=>
+ array(1) {
+ ["attr"]=>
+ string(9) "Some Attr"
+ }
+ [0]=>
+ string(10) "Some Value"
+} \ No newline at end of file
diff --git a/ext/simplexml/tests/bug67116.phpt b/ext/simplexml/tests/bug67116.phpt
new file mode 100644
index 0000000000..774e43c99b
--- /dev/null
+++ b/ext/simplexml/tests/bug67116.phpt
@@ -0,0 +1,93 @@
+--TEST--
+Bug #67116 (Inconsistent parsing of Nodes w/o linefeed)
+--SKIPIF--
+<?php
+if (!extension_loaded("simplexml")) die("skip SimpleXML not available");
+?>
+--FILE--
+<?php
+
+$xml = <<<XML
+<?xml version="1.0" encoding="UTF-8"?>
+<aa>
+ <bs>
+ <b>b</b>
+ </bs>
+ <cs><c>b</c></cs>
+ <ds><d id="d"></d></ds>
+ <es>
+ <e id="e"></e>
+ </es>
+ <fs><f id="f"></f><f id="f"></f></fs>
+</aa>
+XML;
+$sxe = simplexml_load_string($xml);
+print_r($sxe);
+
+?>
+--EXPECT--
+SimpleXMLElement Object
+(
+ [bs] => SimpleXMLElement Object
+ (
+ [b] => b
+ )
+
+ [cs] => SimpleXMLElement Object
+ (
+ [c] => b
+ )
+
+ [ds] => SimpleXMLElement Object
+ (
+ [d] => SimpleXMLElement Object
+ (
+ [@attributes] => Array
+ (
+ [id] => d
+ )
+
+ )
+
+ )
+
+ [es] => SimpleXMLElement Object
+ (
+ [e] => SimpleXMLElement Object
+ (
+ [@attributes] => Array
+ (
+ [id] => e
+ )
+
+ )
+
+ )
+
+ [fs] => SimpleXMLElement Object
+ (
+ [f] => Array
+ (
+ [0] => SimpleXMLElement Object
+ (
+ [@attributes] => Array
+ (
+ [id] => f
+ )
+
+ )
+
+ [1] => SimpleXMLElement Object
+ (
+ [@attributes] => Array
+ (
+ [id] => f
+ )
+
+ )
+
+ )
+
+ )
+
+)
diff --git a/ext/simplexml/tests/bug67572.phpt b/ext/simplexml/tests/bug67572.phpt
new file mode 100644
index 0000000000..4631f16142
--- /dev/null
+++ b/ext/simplexml/tests/bug67572.phpt
@@ -0,0 +1,33 @@
+--TEST--
+Bug #67572 - SimpleXMLElement not parsing \n correctly
+--SKIPIF--
+<?php
+if (!extension_loaded("simplexml")) die("skip SimpleXML not available");
+?>
+--FILE--
+<?php
+$foo = 'bar';
+print "regular string ... ";
+var_dump(empty($foo));
+
+$xml = simplexml_load_string("<xml><something>somevalue</something></xml>");
+$xml2 = simplexml_load_string("<xml>\n<something>somevalue</something>\n</xml>");
+
+foreach($xml as $key => $value) {
+ print "$key = $value ... ";
+ var_dump(empty($value));
+ var_dump($value == false);
+}
+
+foreach($xml2 as $key => $value) {
+ print "$key = $value ... ";
+ var_dump(empty($value));
+ var_dump($value == false);
+}
+?>
+--EXPECT--
+regular string ... bool(false)
+something = somevalue ... bool(false)
+bool(false)
+something = somevalue ... bool(false)
+bool(false)
diff --git a/ext/simplexml/tests/bug69169.phpt b/ext/simplexml/tests/bug69169.phpt
new file mode 100644
index 0000000000..08cf299290
--- /dev/null
+++ b/ext/simplexml/tests/bug69169.phpt
@@ -0,0 +1,70 @@
+--TEST--
+Bug #69169 (simplexml_load_string parse wrongly when xml given in one row)
+--SKIPIF--
+<?php
+if (!extension_loaded("simplexml")) die("skip SimpleXML not available");
+?>
+--FILE--
+<?php
+$a = '<?xml version="1.0" encoding="UTF-8"?>
+<root a="b">
+ <row b="y">
+ <item s="t" />
+ </row>
+ <row p="c">
+ <item y="n" />
+ </row>
+</root>';
+$b = str_replace(array("\n", "\r", "\t"), "", $a);
+$simple_xml = simplexml_load_string($b);
+print_r($simple_xml);
+?>
+--EXPECT--
+SimpleXMLElement Object
+(
+ [@attributes] => Array
+ (
+ [a] => b
+ )
+
+ [row] => Array
+ (
+ [0] => SimpleXMLElement Object
+ (
+ [@attributes] => Array
+ (
+ [b] => y
+ )
+
+ [item] => SimpleXMLElement Object
+ (
+ [@attributes] => Array
+ (
+ [s] => t
+ )
+
+ )
+
+ )
+
+ [1] => SimpleXMLElement Object
+ (
+ [@attributes] => Array
+ (
+ [p] => c
+ )
+
+ [item] => SimpleXMLElement Object
+ (
+ [@attributes] => Array
+ (
+ [y] => n
+ )
+
+ )
+
+ )
+
+ )
+
+)
diff --git a/ext/simplexml/tests/bug69491.phpt b/ext/simplexml/tests/bug69491.phpt
new file mode 100644
index 0000000000..b48a40bf95
--- /dev/null
+++ b/ext/simplexml/tests/bug69491.phpt
@@ -0,0 +1,20 @@
+--TEST--
+Bug #69491 (simplexml doesn't correctly parse empty nodes on same line as another node)
+--SKIPIF--
+<?php
+if (!extension_loaded("simplexml")) die("skip SimpleXML not available");
+?>
+--FILE--
+<?php
+var_dump(simplexml_load_string('<a>
+ <b><c/></b>
+</a>'));?>
+--EXPECT--
+object(SimpleXMLElement)#1 (1) {
+ ["b"]=>
+ object(SimpleXMLElement)#2 (1) {
+ ["c"]=>
+ object(SimpleXMLElement)#3 (0) {
+ }
+ }
+}