From d24c14cb5944167e413751963a608030f76c1ae9 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Fri, 11 Jun 2010 08:53:31 +0000 Subject: Fixed bug #51552 (debug_backtrace() causes segmentation fault and/or memory issues) --- ext/standard/array.c | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'ext/standard/array.c') diff --git a/ext/standard/array.c b/ext/standard/array.c index f4fef53ecb..501ced13cf 100644 --- a/ext/standard/array.c +++ b/ext/standard/array.c @@ -1057,6 +1057,9 @@ static int php_array_walk(HashTable *target_hash, zval **userdata, int recursive /* Set up known arguments */ args[1] = &key; args[2] = userdata; + if (userdata) { + Z_ADDREF_PP(userdata); + } zend_hash_internal_pointer_reset_ex(target_hash, &pos); @@ -1076,6 +1079,9 @@ static int php_array_walk(HashTable *target_hash, zval **userdata, int recursive thash = Z_ARRVAL_PP(args[0]); if (thash->nApplyCount > 1) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "recursion detected"); + if (userdata) { + zval_ptr_dtor(userdata); + } return 0; } @@ -1126,6 +1132,9 @@ static int php_array_walk(HashTable *target_hash, zval **userdata, int recursive zend_hash_move_forward_ex(target_hash, &pos); } + if (userdata) { + zval_ptr_dtor(userdata); + } return 0; } /* }}} */ -- cgit v1.2.1