diff options
| author | Moriyoshi Koizumi <moriyoshi@php.net> | 2004-08-10 06:01:20 +0000 |
|---|---|---|
| committer | Moriyoshi Koizumi <moriyoshi@php.net> | 2004-08-10 06:01:20 +0000 |
| commit | 1c6896076f1bcbc6df164ddf2b5b5c0fadacee4c (patch) | |
| tree | acf052deb66a68a8d2f0ce59161812a52b08f454 /ext | |
| parent | 6a2d265af67a35d35b4e3fcf6342758a665c4214 (diff) | |
| download | php-git-1c6896076f1bcbc6df164ddf2b5b5c0fadacee4c.tar.gz | |
- Bugfix #29493 (extract(array, EXTR_REFS) misbehaves with elements referred
twice or more times)
Diffstat (limited to 'ext')
| -rw-r--r-- | ext/standard/array.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/ext/standard/array.c b/ext/standard/array.c index f1e957f062..2b6f205a11 100644 --- a/ext/standard/array.c +++ b/ext/standard/array.c @@ -1375,13 +1375,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 { |
