1 |
slords |
1.1 |
|
2 |
|
|
http://svn.php.net/viewvc?view=revision&revision=305570 |
3 |
|
|
|
4 |
|
|
--- php-5.3.2/ext/standard/array.c.r305570 |
5 |
|
|
+++ php-5.3.2/ext/standard/array.c |
6 |
|
|
@@ -1380,10 +1380,10 @@ PHP_FUNCTION(extract) |
7 |
|
|
|
8 |
|
|
case EXTR_OVERWRITE: |
9 |
|
|
/* GLOBALS protection */ |
10 |
|
|
- if (var_exists && var_name_len == sizeof("GLOBALS") && !strcmp(var_name, "GLOBALS")) { |
11 |
|
|
+ if (var_exists && var_name_len == sizeof("GLOBALS")-1 && !strcmp(var_name, "GLOBALS")) { |
12 |
|
|
break; |
13 |
|
|
} |
14 |
|
|
- if (var_exists && var_name_len == sizeof("this") && !strcmp(var_name, "this") && EG(scope) && EG(scope)->name_length != 0) { |
15 |
|
|
+ if (var_exists && var_name_len == sizeof("this")-1 && !strcmp(var_name, "this") && EG(scope) && EG(scope)->name_length != 0) { |
16 |
|
|
break; |
17 |
|
|
} |
18 |
|
|
ZVAL_STRINGL(&final_name, var_name, var_name_len, 1); |
19 |
|
|
--- php-5.3.2/ext/standard/tests/array/extract_safety.phpt.r305570 |
20 |
|
|
+++ php-5.3.2/ext/standard/tests/array/extract_safety.phpt |
21 |
|
|
@@ -0,0 +1,24 @@ |
22 |
|
|
+--TEST-- |
23 |
|
|
+Test extract() for overwrite of GLOBALS |
24 |
|
|
+--FILE-- |
25 |
|
|
+<?php |
26 |
|
|
+$str = "John"; |
27 |
|
|
+debug_zval_dump($GLOBALS["str"]); |
28 |
|
|
+ |
29 |
|
|
+/* Extracting Global Variables */ |
30 |
|
|
+$splat = array("foo" => "bar"); |
31 |
|
|
+var_dump(extract(array("GLOBALS" => $splat, EXTR_OVERWRITE))); |
32 |
|
|
+ |
33 |
|
|
+unset ($splat); |
34 |
|
|
+ |
35 |
|
|
+debug_zval_dump($GLOBALS["str"]); |
36 |
|
|
+ |
37 |
|
|
+echo "\nDone"; |
38 |
|
|
+?> |
39 |
|
|
+ |
40 |
|
|
+--EXPECTF-- |
41 |
|
|
+string(4) "John" refcount(2) |
42 |
|
|
+int(0) |
43 |
|
|
+string(4) "John" refcount(2) |
44 |
|
|
+ |
45 |
|
|
+Done |