summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Zend/zend.c3
-rw-r--r--Zend/zend_API.c11
2 files changed, 14 insertions, 0 deletions
diff --git a/Zend/zend.c b/Zend/zend.c
index 669a9becf8..076d7154c0 100644
--- a/Zend/zend.c
+++ b/Zend/zend.c
@@ -221,6 +221,9 @@ ZEND_API void zend_make_printable_zval(zval *expr, zval *expr_copy, int *use_cop
{
TSRMLS_FETCH();
+ if(Z_OBJ_HT_P(expr)->cast_object && Z_OBJ_HANDLER_P(expr, cast_object)(expr, expr_copy, IS_STRING TSRMLS_CC) == SUCCESS) {
+ break;
+ }
/* Standard PHP objects */
if (Z_OBJ_HT_P(expr) == &std_object_handlers || !Z_OBJ_HT_P(expr)->cast_object) {
if (zend_std_cast_object_tostring(expr, expr_copy, IS_STRING TSRMLS_CC) == SUCCESS) {
diff --git a/Zend/zend_API.c b/Zend/zend_API.c
index e444090c74..c32cbdcd02 100644
--- a/Zend/zend_API.c
+++ b/Zend/zend_API.c
@@ -366,6 +366,17 @@ static char *zend_parse_arg_impl(int arg_num, zval **arg, va_list *va, char **sp
*p = Z_STRVAL_PP(arg);
break;
}
+ zval_ptr_dtor(arg);
+ }
+ /* Standard PHP objects */
+ if (Z_OBJ_HT_PP(arg) == &std_object_handlers || !Z_OBJ_HT_PP(arg)->cast_object) {
+ SEPARATE_ZVAL_IF_NOT_REF(arg);
+ if (zend_std_cast_object_tostring(*arg, *arg, IS_STRING TSRMLS_CC) == SUCCESS) {
+ *pl = Z_STRLEN_PP(arg);
+ *p = Z_STRVAL_PP(arg);
+ break;
+ }
+ zval_ptr_dtor(arg);
}
}