]> granicus.if.org Git - php/commitdiff
Duplicate array only if neccessary
authorDmitry Stogov <dmitry@zend.com>
Thu, 28 Aug 2014 16:51:22 +0000 (20:51 +0400)
committerDmitry Stogov <dmitry@zend.com>
Thu, 28 Aug 2014 16:51:22 +0000 (20:51 +0400)
ext/standard/array.c

index 81ecfd74f168fb00e5cc4362af1c9e8d2daa3931..09aaddfbf58249172f1a18682ceea168768fb336 100644 (file)
@@ -1365,11 +1365,14 @@ PHP_FUNCTION(extract)
        int extract_refs = 0;
        zend_array *symbol_table;
 
-       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a/|lz/", &var_array, &extract_type, &prefix) == FAILURE) {
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a|lz/", &var_array, &extract_type, &prefix) == FAILURE) {
                return;
        }
 
        extract_refs = (extract_type & EXTR_REFS);
+       if (extract_refs) {
+               SEPARATE_ZVAL(var_array);
+       }
        extract_type &= 0xff;
 
        if (extract_type < EXTR_OVERWRITE || extract_type > EXTR_IF_EXISTS) {