@@ -2528,35 +2528,33 @@ PHP_FUNCTION(extract)
2528
2528
break ;
2529
2529
}
2530
2530
} else {
2531
+ /* The array might be stored in a local variable that will be overwritten */
2532
+ zval array_copy ;
2533
+ ZVAL_COPY (& array_copy , var_array_param );
2531
2534
switch (extract_type ) {
2532
2535
case EXTR_IF_EXISTS :
2533
- count = php_extract_if_exists (Z_ARRVAL_P ( var_array_param ), symbol_table );
2536
+ count = php_extract_if_exists (Z_ARRVAL ( array_copy ), symbol_table );
2534
2537
break ;
2535
2538
case EXTR_OVERWRITE :
2536
- {
2537
- zval zv ;
2538
- /* The array might be stored in a local variable that will be overwritten */
2539
- ZVAL_COPY (& zv , var_array_param );
2540
- count = php_extract_overwrite (Z_ARRVAL (zv ), symbol_table );
2541
- zval_ptr_dtor (& zv );
2542
- }
2539
+ count = php_extract_overwrite (Z_ARRVAL (array_copy ), symbol_table );
2543
2540
break ;
2544
2541
case EXTR_PREFIX_IF_EXISTS :
2545
- count = php_extract_prefix_if_exists (Z_ARRVAL_P ( var_array_param ), symbol_table , prefix );
2542
+ count = php_extract_prefix_if_exists (Z_ARRVAL ( array_copy ), symbol_table , prefix );
2546
2543
break ;
2547
2544
case EXTR_PREFIX_SAME :
2548
- count = php_extract_prefix_same (Z_ARRVAL_P ( var_array_param ), symbol_table , prefix );
2545
+ count = php_extract_prefix_same (Z_ARRVAL ( array_copy ), symbol_table , prefix );
2549
2546
break ;
2550
2547
case EXTR_PREFIX_ALL :
2551
- count = php_extract_prefix_all (Z_ARRVAL_P ( var_array_param ), symbol_table , prefix );
2548
+ count = php_extract_prefix_all (Z_ARRVAL ( array_copy ), symbol_table , prefix );
2552
2549
break ;
2553
2550
case EXTR_PREFIX_INVALID :
2554
- count = php_extract_prefix_invalid (Z_ARRVAL_P ( var_array_param ), symbol_table , prefix );
2551
+ count = php_extract_prefix_invalid (Z_ARRVAL ( array_copy ), symbol_table , prefix );
2555
2552
break ;
2556
2553
default :
2557
- count = php_extract_skip (Z_ARRVAL_P ( var_array_param ), symbol_table );
2554
+ count = php_extract_skip (Z_ARRVAL ( array_copy ), symbol_table );
2558
2555
break ;
2559
2556
}
2557
+ zval_ptr_dtor (& array_copy );
2560
2558
}
2561
2559
2562
2560
RETURN_LONG (count );
0 commit comments