mirror of
https://github.com/php/php-src.git
synced 2025-01-24 12:43:38 +08:00
- Fixed extract() to do not overwrite $GLOBALS and $this when using EXTR_OVERWRITE.
patch by: jorto at redhat dot com
This commit is contained in:
parent
9608da9443
commit
897f0b4c27
@ -1389,10 +1389,10 @@ PHP_FUNCTION(extract)
|
||||
|
||||
case EXTR_OVERWRITE:
|
||||
/* GLOBALS protection */
|
||||
if (var_exists && var_name_len == sizeof("GLOBALS") && !strcmp(var_name, "GLOBALS")) {
|
||||
if (var_exists && var_name_len == sizeof("GLOBALS")-1 && !strcmp(var_name, "GLOBALS")) {
|
||||
break;
|
||||
}
|
||||
if (var_exists && var_name_len == sizeof("this") && !strcmp(var_name, "this") && EG(scope) && EG(scope)->name_length != 0) {
|
||||
if (var_exists && var_name_len == sizeof("this")-1 && !strcmp(var_name, "this") && EG(scope) && EG(scope)->name_length != 0) {
|
||||
break;
|
||||
}
|
||||
ZVAL_STRINGL(&final_name, var_name, var_name_len, 1);
|
||||
|
24
ext/standard/tests/array/extract_safety.phpt
Normal file
24
ext/standard/tests/array/extract_safety.phpt
Normal file
@ -0,0 +1,24 @@
|
||||
--TEST--
|
||||
Test extract() for overwrite of GLOBALS
|
||||
--FILE--
|
||||
<?php
|
||||
$str = "John";
|
||||
debug_zval_dump($GLOBALS["str"]);
|
||||
|
||||
/* Extracting Global Variables */
|
||||
$splat = array("foo" => "bar");
|
||||
var_dump(extract(array("GLOBALS" => $splat, EXTR_OVERWRITE)));
|
||||
|
||||
unset ($splat);
|
||||
|
||||
debug_zval_dump($GLOBALS["str"]);
|
||||
|
||||
echo "\nDone";
|
||||
?>
|
||||
|
||||
--EXPECTF--
|
||||
string(4) "John" refcount(2)
|
||||
int(0)
|
||||
string(4) "John" refcount(2)
|
||||
|
||||
Done
|
Loading…
Reference in New Issue
Block a user