ID: 27010
User updated by: web-php-bugs at sklar dot com
Reported By: web-php-bugs at sklar dot com
Status: Open
Bug Type: XML related
Operating System: Linux
PHP Version: 5CVS-2004-01-22 (dev)
New Comment:
When I retrieve child elements like this:
foreach ($sxe->children('http://www.example.com/hot') as $element_name
=> $element) {
print "$element_name is
".$element->children('http://www.example.com/hot')."\n";
}
It works fine (duh). But I still get the segfault -- backtrace in my
previous comment.
Previous Comments:
------------------------------------------------------------------------
[2004-01-22 14:13:05] web-php-bugs at sklar dot com
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 1076484640 (LWP 16185)]
0x080eb813 in match_ns (sxe=0x402afb74, node=0x835c910,
name=0x835c4b8 "http://www.example.com/hot")
at /opt/cvs/cvs.php.net/php-src/ext/simplexml/simplexml.c:124
124 if (!xmlStrcmp(node->ns->href, name)) {
(gdb) bt
#0 0x080eb813 in match_ns (sxe=0x402afb74, node=0x835c910,
name=0x835c4b8 "http://www.example.com/hot")
at /opt/cvs/cvs.php.net/php-src/ext/simplexml/simplexml.c:124
#1 0x080eb2d6 in php_sxe_move_forward_iterator (sxe=0x402afb74)
at /opt/cvs/cvs.php.net/php-src/ext/simplexml/simplexml.c:1394
#2 0x080eb3ea in php_sxe_iterator_move_forward (iter=0x402afaec)
at /opt/cvs/cvs.php.net/php-src/ext/simplexml/simplexml.c:1424
#3 0x082390c5 in zend_fe_fetch_handler (execute_data=0xbfffd0c0,
op_array=0x402adb6c)
at /opt/cvs/cvs.php.net/php-src/Zend/zend_execute.c:3672
#4 0x0823221f in execute (op_array=0x402adb6c)
at /opt/cvs/cvs.php.net/php-src/Zend/zend_execute.c:1264
#5 0x08210d11 in zend_execute_scripts (type=8, retval=0x0,
file_count=3)
at /opt/cvs/cvs.php.net/php-src/Zend/zend.c:1051
#6 0x081ce776 in php_execute_script (primary_file=0xbffff4c0)
at /opt/cvs/cvs.php.net/php-src/main/main.c:1642
#7 0x0824252c in main (argc=2, argv=0xbffff554)
at /opt/cvs/cvs.php.net/php-src/sapi/cli/php_cli.c:939
#8 0x42015704 in __libc_start_main () from /lib/tls/libc.so.6
(gdb) p *node
$1 = {_private = 0x0, type = XML_ELEMENT_NODE, name = 0x835c900
"drink",
children = 0x835c968, last = 0x835c968, parent = 0x835c5d8,
next = 0x835c9e8, prev = 0x835c8c8, doc = 0x835c4f0, ns = 0x0,
content = 0x0, properties = 0x0, nsDef = 0x0}
------------------------------------------------------------------------
[2004-01-22 14:08:15] web-php-bugs at sklar dot com
Description:
------------
When iterating through the results of the SimpleXML children() method,
$element->name syntax returns the empty string instead of the text of
the "name" tag. var_dump($element), however reports the correct value
for the "name" property of $element.
Reproduce code:
---------------
$xml='
<drinks xmlns:hot="http://www.example.com/hot">
<hot:drink><hot:name>Coffee</hot:name></hot:drink>
<hot:drink><hot:name>Tea</hot:name></hot:drink>
<drink><name>Cola</name></drink>
<drink><name>Juice</name></drink>
</drinks>';
$sxe = simplexml_load_string($xml);
foreach ($sxe as $element_name => $element) {
print "$element_name is $element->name\n";
}
foreach ($sxe->children('http://www.example.com/hot') as $element_name
=> $element) {
print "$element_name is $element->name\n";
}
Expected result:
----------------
drink is Cola
drink is Juice
drink is Coffee
drink is Tea
Actual result:
--------------
drink is Cola
drink is Juice
drink is
drink is
Segmentation fault
Substituting var_dump($element) for the print statement produces:
object(simplexml_element)#5 (1) {
["name"]=>
string(6) "Coffee"
}
object(simplexml_element)#4 (1) {
["name"]=>
string(3) "Tea"
}
[New Thread 1076484640 (LWP 16144)]
drink is Cola
drink is Juice
drink is
drink is
On the segfault, GDB reports:
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 1076484640 (LWP 16144)]
0x080eb813 in match_ns (sxe=0x402af9d4, node=0x835c910,
name=0x835c4b8 "http://www.example.com/hot")
at /opt/cvs/cvs.php.net/php-src/ext/simplexml/simplexml.c:124
124 if (!xmlStrcmp(node->ns->href, name)) {
(gdb) bt
#0 0x080eb813 in match_ns (sxe=0x402af9d4, node=0x835c910,
name=0x835c4b8 "http://www.example.com/hot")
at /opt/cvs/cvs.php.net/php-src/ext/simplexml/simplexml.c:124
#1 0x080eb2d6 in php_sxe_move_forward_iterator (sxe=0x402af9d4)
at /opt/cvs/cvs.php.net/php-src/ext/simplexml/simplexml.c:1394
#2 0x080eb3ea in php_sxe_iterator_move_forward (iter=0x402af94c)
at /opt/cvs/cvs.php.net/php-src/ext/simplexml/simplexml.c:1424
#3 0x082390c5 in zend_fe_fetch_handler (execute_data=0xbfffd5c0,
op_array=0x402adb6c)
at /opt/cvs/cvs.php.net/php-src/Zend/zend_execute.c:3672
#4 0x0823221f in execute (op_array=0x402adb6c)
at /opt/cvs/cvs.php.net/php-src/Zend/zend_execute.c:1264
#5 0x08210d11 in zend_execute_scripts (type=8, retval=0x0,
file_count=3)
at /opt/cvs/cvs.php.net/php-src/Zend/zend.c:1051
#6 0x081ce776 in php_execute_script (primary_file=0xbffff9c0)
at /opt/cvs/cvs.php.net/php-src/main/main.c:1642
#7 0x0824252c in main (argc=2, argv=0xbffffa54)
at /opt/cvs/cvs.php.net/php-src/sapi/cli/php_cli.c:939
#8 0x42015704 in __libc_start_main () from /lib/tls/libc.so.6
(gdb) p *node
$1 = {_private = 0x0, type = XML_ELEMENT_NODE, name = 0x835c900
"drink",
children = 0x835c968, last = 0x835c968, parent = 0x835c5d8,
next = 0x835c9e8, prev = 0x835c8c8, doc = 0x835c4f0, ns = 0x0,
content = 0x0, properties = 0x0, nsDef = 0x0}
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=27010&edit=1