Hi all, I'm wandering what is the best practice of zval array hash initialization.
Following code leaks 56 bytes on ZVAL_NEW_ARR() chash = php_mb_convert_encoding_recursive(HASH_OF(entry), _to_encoding, _from_encodings); if (chash) { ZVAL_NEW_ARR(&entry_tmp); // _array_init() is called. Should leak by next line. Z_ARRVAL(entry_tmp) = chash; } I thought there would be API that replaces or initialize ZVAL array hash to existing hash, but I couldn't find one. So I fixed above code like chash = php_mb_convert_encoding_recursive(HASH_OF(entry), _to_encoding, _from_encodings); if (chash) { Z_TYPE_INFO(entry_tmp) = IS_ARRAY_EX; Z_ARRVAL(entry_tmp) = chash; } I used IS_ARRAY_EX like ZVAL_NEW_ARR(). However, this code seemed a little strange to me, so I grepped source tree and found no other .c code uses IS_ARRAY_EX. What's the best practice for this? It seems API does not expect to replace zval array hash by existing hash. Should I pass entry_tmp to php_mb_covert_encoding_recursive() instead? i.e. ZVAL_NEW_ARR(&entry_tmp); php_mb_convert_encoding_recursive(HASH_OF(&entry_tmp), HASH_OF(entry), _to_encoding, _from_encodings); Thank you. -- Yasuo Ohgaki yohg...@ohgaki.net -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php