Re: Please do not call zval_dtor on recursive array

From: Date: Thu, 18 Oct 2012 10:56:28 +0000
Subject: Re: Please do not call zval_dtor on recursive array
References: 1 2  Groups: php.internals php.pecl.dev 
Request: Send a blank email to internals+get-63526@lists.php.net to get a copy of this message
On Thu, Oct 18, 2012 at 6:45 PM, Pierre Joye <pierre.php@gmail.com> wrote: > hi Dmitry, Laruence! > > On Thu, Oct 18, 2012 at 11:46 AM, Laruence <laruence@php.net> wrote: >> Hey: >> >> recently we found a problem, that is "usage zval_dtor on a recursive >> array while gc enabled" has chance to result a segfault. >> >> a reproduce script could be found here: >> >> https://github.com/php/php-src/blob/8bd5e15ff7a57791956c4017ee8fb4a8ac0d8d2e/ext/pcre/tests/bug63055.phpt >> >> the preg_match used to call zval_dtor on the third argument. which >> result a segfault, reported at #63055 >> >> the segfault backtrace will looks like: >> http://pastebin.com/uPWBgrTZ >> >> thanks to dmitry, we got a simple solution, that is: instead of >> directly call to zval_dtor, please use following codes instead: >> " >> zval garbage = *subpats; >> array_init(subpats); >> zval_dtor(&garbage); >> " > Nice catch! > > We could add a macro? As it looks like many will forget to do that :) maybe a seris macro: ZVAL_REPLACE_LONG() ZVAL_REPLACE_STRING{L}() ZVAL_REPLACE_ZVAL() etc; thanks , will do it later, only for trunk I think thanks > > Cheers, > -- > Pierre > > @pierrejoye | http://blog.thepimp.net | > http://www.libgd.org -- Laruence Xinchen Hui http://www.laruence.com/

« previous php.internals (#63526) next »