php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #27010 segfault after returning nodes with children()
Submitted: 2004-01-22 14:08 UTC Modified: 2004-01-22 16:30 UTC
From: web-php-bugs at sklar dot com Assigned:
Status: Closed Package: XML related
PHP Version: 5CVS-2004-01-22 (dev) OS: Linux
Private report: No CVE-ID: None
 [2004-01-22 14:08 UTC] 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}



Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2004-01-22 14:13 UTC] 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:14 UTC] web-php-bugs at sklar dot com
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.
 [2004-01-22 16:30 UTC] rrichards@php.net
This bug has been fixed in CVS.

Snapshots of the sources are packaged every three hours; this change
will be in the next snapshot. You can grab the snapshot at
http://snaps.php.net/.
 
Thank you for the report, and for helping us make PHP better.


 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Thu Apr 25 06:01:35 2024 UTC