From 51fc7b8ea5ce69aa91698e048d78630d18bafca0 Mon Sep 17 00:00:00 2001 From: Moriyoshi Koizumi Date: Tue, 10 Aug 2004 06:00:30 +0000 Subject: [PATCH] - Bugfix #29493 (extract(array, EXTR_REFS) misbehaves with elements referred twice or more times). (Patch inspired by Michael Manley. Thanks.) --- ext/standard/array.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/ext/standard/array.c b/ext/standard/array.c index 5ee9796357d..f7ea8d1d960 100644 --- a/ext/standard/array.c +++ b/ext/standard/array.c @@ -1377,13 +1377,16 @@ PHP_FUNCTION(extract) if (extract_refs) { zval **orig_var; - SEPARATE_ZVAL_TO_MAKE_IS_REF(entry); - zval_add_ref(entry); - if (zend_hash_find(EG(active_symbol_table), final_name.c, final_name.len+1, (void **) &orig_var) == SUCCESS) { zval_ptr_dtor(orig_var); + + SEPARATE_ZVAL_TO_MAKE_IS_REF(entry); + zval_add_ref(entry); + *orig_var = *entry; } else { + (*entry)->is_ref = 1; + zval_add_ref(entry); zend_hash_update(EG(active_symbol_table), final_name.c, final_name.len+1, (void **) entry, sizeof(zval *), NULL); } } else {