Dmitry: maybe you want to review this fix. :)
thanks On Thu, Oct 18, 2012 at 3:49 PM, Xinchen Hui <larue...@php.net> wrote: > Commit: ccc519b7a92bfe4b191c0e2e3869516171247ac2 > Author: Xinchen Hui <larue...@php.net> Thu, 18 Oct 2012 15:49:37 > +0800 > Parents: 82fb5df380c726ab919355caf46c54207d0f1253 > Branches: PHP-5.4 > > Link: > http://git.php.net/?p=php-src.git;a=commitdiff;h=ccc519b7a92bfe4b191c0e2e3869516171247ac2 > > Log: > Fixed bug #63055 (Segfault in zend_gc with SF2 testsuite) > > This should also fixed various segfaults which the bt looks like cored in > zval_mark_grey > > Bugs: > https://bugs.php.net/63055 > > Changed paths: > M NEWS > A Zend/tests/bug63055.phpt > M Zend/zend_gc.h > > > Diff: > diff --git a/NEWS b/NEWS > index eca6698..06bdf3d 100644 > --- a/NEWS > +++ b/NEWS > @@ -2,6 +2,9 @@ PHP > NEWS > > ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| > ?? ??? 2012, PHP 5.4.9 > > +- Core: > + . Fixed bug #63055 (Segfault in zend_gc with SF2 testsuite). (Laruence) > + > - Fileinfo: > . Fixed bug #63248 (Load multiple magic files from a directory under > Windows). > (Anatoliy) > diff --git a/Zend/tests/bug63055.phpt b/Zend/tests/bug63055.phpt > new file mode 100644 > index 0000000..0901e5b > --- /dev/null > +++ b/Zend/tests/bug63055.phpt > @@ -0,0 +1,23 @@ > +--TEST-- > +Bug #63055 (Segfault in zend_gc with SF2 testsuite) > +--FILE-- > +<?php > +for ($i=0; $i<9998; $i++) { > + $array = array(); > + $array[0] = &$array; > + unset($array); > +} > + > +$matches = array("foo" => "bar"); > +$dummy = array("dummy"); > +$dummy[1] = &$dummy; > + > +$matches[1] = &$matches; > +$matches[2] = $dummy; > + > +$ma = $matches; > +preg_match_all("/(\d)+/", "foo123456bar", $matches); > +echo "okey"; > +?> > +--EXPECTF-- > +okey > diff --git a/Zend/zend_gc.h b/Zend/zend_gc.h > index ba30b3a..1f86f19 100644 > --- a/Zend/zend_gc.h > +++ b/Zend/zend_gc.h > @@ -179,7 +179,7 @@ END_EXTERN_C() > > static zend_always_inline void gc_zval_check_possible_root(zval *z TSRMLS_DC) > { > - if (z->type == IS_ARRAY || z->type == IS_OBJECT) { > + if ((z->type == IS_ARRAY && !z->value.ht->inconsistent) || z->type == > IS_OBJECT) { > gc_zval_possible_root(z TSRMLS_CC); > } > } > > > -- > PHP CVS Mailing List (http://www.php.net/) > To unsubscribe, visit: http://www.php.net/unsub.php > -- Laruence Xinchen Hui http://www.laruence.com/ -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php