diff options
author | Dmitry Stogov <dmitry@php.net> | 2011-09-14 13:18:19 +0000 |
---|---|---|
committer | Dmitry Stogov <dmitry@php.net> | 2011-09-14 13:18:19 +0000 |
commit | 750e4e10117d75e536bdcfdf344a18aaf8637739 (patch) | |
tree | 50c383ebfe124a157ac14d348ca7143265a82dcd /Zend/zend.c | |
parent | 4de9123b85088ceebf0e141e09c5abf532c21452 (diff) | |
download | php-git-750e4e10117d75e536bdcfdf344a18aaf8637739.tar.gz |
Fixed bug #55578 (Segfault on implode/concat)
Diffstat (limited to 'Zend/zend.c')
-rw-r--r-- | Zend/zend.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/Zend/zend.c b/Zend/zend.c index c6f57aa37b..a8617e1a23 100644 --- a/Zend/zend.c +++ b/Zend/zend.c @@ -257,8 +257,17 @@ ZEND_API void zend_make_printable_zval(zval *expr, zval *expr_copy, int *use_cop { TSRMLS_FETCH(); - if (Z_OBJ_HANDLER_P(expr, cast_object) && Z_OBJ_HANDLER_P(expr, cast_object)(expr, expr_copy, IS_STRING TSRMLS_CC) == SUCCESS) { - break; + if (Z_OBJ_HANDLER_P(expr, cast_object)) { + zval *val; + + ALLOC_ZVAL(val); + INIT_PZVAL_COPY(val, expr); + zval_copy_ctor(val); + if (Z_OBJ_HANDLER_P(expr, cast_object)(val, expr_copy, IS_STRING TSRMLS_CC) == SUCCESS) { + zval_ptr_dtor(&val); + break; + } + zval_ptr_dtor(&val); } /* Standard PHP objects */ if (Z_OBJ_HT_P(expr) == &std_object_handlers || !Z_OBJ_HANDLER_P(expr, cast_object)) { |