Hey:

On Tue, May 17, 2016 at 6:00 AM, Adam Baratz <adam.bar...@gmail.com> wrote:

> Hi,
>
> I've encountered a hard-to-consistently-reproduce issue with HashTable
> zvals. I have code that will generate big nested \stdClass structures for
> JSON encoding. It does so using classes that have methods that generate
> those fields. For example, you could have a class like this:
>
> class Block {
>   public function css_classes() {
>     return ['x', 'y', 'z'];
>   }
> }
>
> Other code would translate it into a value that would var_dump() as this:
>
> object(stdClass)#1 (1) {
>   ["css_classes"]=>
>   array(3) {
>     [0]=>
>     string(1) "x"
>     [1]=>
>     string(1) "y"
>     [2]=>
>     string(1) "z"
>   }
> }
>
> The template data could include multiple instances of Block. As in, a
> \stdClass could be generated with multiple copies of that array content.
> That data could get sent to json_encode(), which
> uses ZEND_HASH_APPLY_PROTECTION/etc. to avoid recursion. I've seen
> situations where that array of strings triggers that recursion check. But
>
the array might be stored in shared memory(immutable array), in this case,
you should not edit the apply count ,

you should check it,  like what json does:

    https://github.com/php/php-src/blob/master/ext/json/json_encoder.c#L156


thanks

it's not always, and a php-fpm restart can make it go away.
>
> Can anyone think of why this might happen?
>
> Thanks,
> Adam
>



-- 
Xinchen Hui
@Laruence
http://www.laruence.com/

Reply via email to