diff options
| author | Arnaud Le Blanc <lbarnaud@php.net> | 2008-12-27 03:06:57 +0000 |
|---|---|---|
| committer | Arnaud Le Blanc <lbarnaud@php.net> | 2008-12-27 03:06:57 +0000 |
| commit | 2dd8d6ff947e77383c5159753dfee37ce7b8b3d3 (patch) | |
| tree | 7a5c573641b84ad3098582b9512a23bc978ac500 /ext/standard/array.c | |
| parent | 765618b97f40b32eff134b11106cd6c5b48c8a4b (diff) | |
| download | php-git-2dd8d6ff947e77383c5159753dfee37ce7b8b3d3.tar.gz | |
MFH: Fixed bug #46873 (extract($foo) crashes if $foo['foo'] exists)
Diffstat (limited to 'ext/standard/array.c')
| -rw-r--r-- | ext/standard/array.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/ext/standard/array.c b/ext/standard/array.c index 70966edd88..8c6d962c4a 100644 --- a/ext/standard/array.c +++ b/ext/standard/array.c @@ -1283,6 +1283,13 @@ PHP_FUNCTION(extract) zend_rebuild_symbol_table(TSRMLS_C); } + /* var_array is passed by ref for the needs of EXTR_REFS (needs to + * work on the original array to create refs to its members) + * simulate pass_by_value if EXTR_REFS is not used */ + if (!extract_refs) { + SEPARATE_ARG_IF_REF(var_array); + } + zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(var_array), &pos); while (zend_hash_get_current_data_ex(Z_ARRVAL_P(var_array), (void **)&entry, &pos) == SUCCESS) { zval final_name; @@ -1382,6 +1389,10 @@ PHP_FUNCTION(extract) zend_hash_move_forward_ex(Z_ARRVAL_P(var_array), &pos); } + if (!extract_refs) { + zval_ptr_dtor(&var_array); + } + RETURN_LONG(count); } /* }}} */ |
