From: laruence
Operating system:
PHP version: 5.3.10
Package: Scripting Engine problem
Bug Type: Bug
Bug description:zend gc should not mark persistent hashtable
Description:
------------
zend gc was introducted in 5.3
thinking of a zval which is a Hashtable allocated by a extension in
persistent,
and it also has hashtable children in it,
then , if the extension return this to php script:
array_init(return_value);
zend_hash_copy(Z_ARRVAL_P(return_value),
Z_ARRVAL_P(persitent_zval_hashtable),
***)..
since zval_copy_ctor does shallow copy, so the persistent array return to
the
php
script.
then if it happen to be parsed by zval_ptr_dtor, then the persistent array
will
be
parsed by gc_zval_possible_root,
ZEND_API void gc_zval_possible_root(zval *zv TSRMLS_DC)
{
..................
if (GC_ZVAL_GET_COLOR(zv) != GC_PURPLE) {
GC_ZVAL_SET_PURPLE(zv);
..................
then the malloc info of the block(not sure before or after) will be
polluted.
then when the extension try to free the block, a warning will be show
like:
munmap_chunk(): invalid pointer 0x*******
Test script:
---------------
none
Expected result:
----------------
none
Actual result:
--------------
none
--
Edit bug report at https://bugs.php.net/bug.php?id=61649&edit=1
--
Try a snapshot (PHP 5.4):
https://bugs.php.net/fix.php?id=61649&r=trysnapshot54
Try a snapshot (PHP 5.3):
https://bugs.php.net/fix.php?id=61649&r=trysnapshot53
Try a snapshot (trunk):
https://bugs.php.net/fix.php?id=61649&r=trysnapshottrunk
Fixed in SVN:
https://bugs.php.net/fix.php?id=61649&r=fixed
Fixed in SVN and need be documented:
https://bugs.php.net/fix.php?id=61649&r=needdocs
Fixed in release:
https://bugs.php.net/fix.php?id=61649&r=alreadyfixed
Need backtrace:
https://bugs.php.net/fix.php?id=61649&r=needtrace
Need Reproduce Script:
https://bugs.php.net/fix.php?id=61649&r=needscript
Try newer version:
https://bugs.php.net/fix.php?id=61649&r=oldversion
Not developer issue:
https://bugs.php.net/fix.php?id=61649&r=support
Expected behavior:
https://bugs.php.net/fix.php?id=61649&r=notwrong
Not enough info:
https://bugs.php.net/fix.php?id=61649&r=notenoughinfo
Submitted twice:
https://bugs.php.net/fix.php?id=61649&r=submittedtwice
register_globals:
https://bugs.php.net/fix.php?id=61649&r=globals
PHP 4 support discontinued:
https://bugs.php.net/fix.php?id=61649&r=php4
Daylight Savings: https://bugs.php.net/fix.php?id=61649&r=dst
IIS Stability:
https://bugs.php.net/fix.php?id=61649&r=isapi
Install GNU Sed:
https://bugs.php.net/fix.php?id=61649&r=gnused
Floating point limitations:
https://bugs.php.net/fix.php?id=61649&r=float
No Zend Extensions:
https://bugs.php.net/fix.php?id=61649&r=nozend
MySQL Configuration Error:
https://bugs.php.net/fix.php?id=61649&r=mysqlcfg