@@ -2485,35 +2485,33 @@ PHP_FUNCTION(extract)
2485
2485
break ;
2486
2486
}
2487
2487
} else {
2488
+ /* The array might be stored in a local variable that will be overwritten */
2489
+ zval array_copy ;
2490
+ ZVAL_COPY (& array_copy , var_array_param );
2488
2491
switch (extract_type ) {
2489
2492
case EXTR_IF_EXISTS :
2490
- count = php_extract_if_exists (Z_ARRVAL_P ( var_array_param ), symbol_table );
2493
+ count = php_extract_if_exists (Z_ARRVAL ( array_copy ), symbol_table );
2491
2494
break ;
2492
2495
case EXTR_OVERWRITE :
2493
- {
2494
- zval zv ;
2495
- /* The array might be stored in a local variable that will be overwritten */
2496
- ZVAL_COPY (& zv , var_array_param );
2497
- count = php_extract_overwrite (Z_ARRVAL (zv ), symbol_table );
2498
- zval_ptr_dtor (& zv );
2499
- }
2496
+ count = php_extract_overwrite (Z_ARRVAL (array_copy ), symbol_table );
2500
2497
break ;
2501
2498
case EXTR_PREFIX_IF_EXISTS :
2502
- count = php_extract_prefix_if_exists (Z_ARRVAL_P ( var_array_param ), symbol_table , prefix );
2499
+ count = php_extract_prefix_if_exists (Z_ARRVAL ( array_copy ), symbol_table , prefix );
2503
2500
break ;
2504
2501
case EXTR_PREFIX_SAME :
2505
- count = php_extract_prefix_same (Z_ARRVAL_P ( var_array_param ), symbol_table , prefix );
2502
+ count = php_extract_prefix_same (Z_ARRVAL ( array_copy ), symbol_table , prefix );
2506
2503
break ;
2507
2504
case EXTR_PREFIX_ALL :
2508
- count = php_extract_prefix_all (Z_ARRVAL_P ( var_array_param ), symbol_table , prefix );
2505
+ count = php_extract_prefix_all (Z_ARRVAL ( array_copy ), symbol_table , prefix );
2509
2506
break ;
2510
2507
case EXTR_PREFIX_INVALID :
2511
- count = php_extract_prefix_invalid (Z_ARRVAL_P ( var_array_param ), symbol_table , prefix );
2508
+ count = php_extract_prefix_invalid (Z_ARRVAL ( array_copy ), symbol_table , prefix );
2512
2509
break ;
2513
2510
default :
2514
- count = php_extract_skip (Z_ARRVAL_P ( var_array_param ), symbol_table );
2511
+ count = php_extract_skip (Z_ARRVAL ( array_copy ), symbol_table );
2515
2512
break ;
2516
2513
}
2514
+ zval_ptr_dtor (& array_copy );
2517
2515
}
2518
2516
2519
2517
RETURN_LONG (count );
0 commit comments