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

Reply via email to