ID: 35785
Updated by: [EMAIL PROTECTED]
Reported By: TheFFF at gmail dot com
Status: Assigned
Bug Type: SimpleXML related
Operating System: *
PHP Version: 5CVS-2005-12-26 (cvs)
Assigned To: helly
New Comment:
In HEAD the following raises an error now, but no more mem corruption:
$xml->bla-props[0]->name = $val;
This works now:
$xml->bla->props->name = $val;
Previous Comments:
------------------------------------------------------------------------
[2005-12-26 13:20:04] [EMAIL PROTECTED]
>From dmitry:
The problem is:
$xml->bla-props[0]->name = 0;
For nonexisting element "props" simplexml returns NULL with refcount ==
0;
Then ZE trying to assign dimension into it;
It converts NULL into array;
inserts uninitialized zval into it (for index 0);
stores zval** for next opcode
Then it destroys array, because refcount is 0 (this 0 comes from
simplexml)
Next opcode crashes because stored zval** is destroyed together with
array.
This bug must be fixed in ext/simplexml.
It must care about "type" argument of read_property() callback and
implement
implicit element/attribute creation or prohibit it.
ZE cannot handle such assignment automatic. (It uses get_zval_ptr_ptr()
for
that, but simplexml doesn't define it).
So this goes back to me
------------------------------------------------------------------------
[2005-12-23 15:16:55] [EMAIL PROTECTED]
Reproducible with 5.1.2-dev.
The backtrace is quite useless:
Program received signal SIGSEGV, Segmentation fault.
0x081d285e in zend_pzval_unlock_func (z=0x5a5a5a5a,
should_free=0xbfffc76c) at
/usr/src/dev/clean/php-src_5_1/Zend/zend_execute.c:66
66 if (!--z->refcount) {
(gdb) bt
#0 0x081d285e in zend_pzval_unlock_func (z=0x5a5a5a5a,
should_free=0xbfffc76c) at
/usr/src/dev/clean/php-src_5_1/Zend/zend_execute.c:66
#1 0x081d2c16 in _get_zval_ptr_ptr_var (node=0x82d8558, Ts=0xbfffc7c0,
should_free=0xbfffc76c) at
/usr/src/dev/clean/php-src_5_1/Zend/zend_execute.c:259
#2 0x081a4270 in ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_HANDLER
(execute_data=0xbfffca30) at zend_vm_execute.h:8726
#3 0x0818f3ad in execute (op_array=0x82d3ed4) at zend_vm_execute.h:92
#4 0x081727c8 in zend_execute_scripts (type=8, retval=0x0,
file_count=3) at /usr/src/dev/clean/php-src_5_1/Zend/zend.c:1101
#5 0x0812f104 in php_execute_script (primary_file=0xbfffeed0) at
/usr/src/dev/clean/php-src_5_1/main/main.c:1720
#6 0x081d5d2e in main (argc=2, argv=0xbfffefb4) at
/usr/src/dev/clean/php-src_5_1/sapi/cli/php_cli.c:1077
------------------------------------------------------------------------
[2005-12-23 12:14:24] TheFFF at gmail dot com
Description:
------------
trying to set some values
Reproduce code:
---------------
<?php
$options["database"] = "xmldatabase";
$x = simplexml_load_string("<root></root>");
$count = count($x -> posts) + 1;
$x -> bla -> posts[$count] -> name = $_POST["name"];
echo $x -> asXML();
?>
also getting the error with simplexml_load_file();
Expected result:
----------------
bla dosen't exist so some kinda error
Actual result:
--------------
The instuction at "0x006d693c" referenced memory "0x000000c". The
memory could not be "read"
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=35785&edit=1