felipe                                   Fri, 19 Nov 2010 22:06:44 +0000

Revision: http://svn.php.net/viewvc?view=revision&revision=305570

Log:
- Fixed extract() to do not overwrite $GLOBALS and $this when using 
EXTR_OVERWRITE.
  patch by: jorto at redhat dot com

Changed paths:
    U   php/php-src/branches/PHP_5_2/NEWS
    U   php/php-src/branches/PHP_5_2/ext/standard/array.c
    A   
php/php-src/branches/PHP_5_2/ext/standard/tests/array/extract_safety.phpt
    U   php/php-src/branches/PHP_5_3/NEWS
    U   php/php-src/branches/PHP_5_3/ext/standard/array.c
    A   
php/php-src/branches/PHP_5_3/ext/standard/tests/array/extract_safety.phpt
    U   php/php-src/trunk/ext/standard/array.c
    A   php/php-src/trunk/ext/standard/tests/array/extract_safety.phpt

Modified: php/php-src/branches/PHP_5_2/NEWS
===================================================================
--- php/php-src/branches/PHP_5_2/NEWS   2010-11-19 21:38:48 UTC (rev 305569)
+++ php/php-src/branches/PHP_5_2/NEWS   2010-11-19 22:06:44 UTC (rev 305570)
@@ -1,6 +1,8 @@
 PHP                                                                        
NEWS
 |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
 ?? ??? 2010, PHP 5.2.15RC2
+- Fixed extract() to do not overwrite $GLOBALS and $this when using
+  EXTR_OVERWRITE. (jorto at redhat dot com)

 18 Nov 2010, PHP 5.2.15RC1
 - Fixed a possible double free in imap extension (Identified by Mateusz

Modified: php/php-src/branches/PHP_5_2/ext/standard/array.c
===================================================================
--- php/php-src/branches/PHP_5_2/ext/standard/array.c   2010-11-19 21:38:48 UTC 
(rev 305569)
+++ php/php-src/branches/PHP_5_2/ext/standard/array.c   2010-11-19 22:06:44 UTC 
(rev 305570)
@@ -1516,10 +1516,10 @@

                        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;
                                }
                                smart_str_appendl(&final_name, var_name, 
var_name_len);

Added: php/php-src/branches/PHP_5_2/ext/standard/tests/array/extract_safety.phpt
===================================================================
--- php/php-src/branches/PHP_5_2/ext/standard/tests/array/extract_safety.phpt   
                        (rev 0)
+++ php/php-src/branches/PHP_5_2/ext/standard/tests/array/extract_safety.phpt   
2010-11-19 22:06:44 UTC (rev 305570)
@@ -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
\ No newline at end of file


Property changes on: 
php/php-src/branches/PHP_5_2/ext/standard/tests/array/extract_safety.phpt
___________________________________________________________________
Added: svn:keywords
   + Id Rev Revision
Added: svn:eol-style
   + native

Modified: php/php-src/branches/PHP_5_3/NEWS
===================================================================
--- php/php-src/branches/PHP_5_3/NEWS   2010-11-19 21:38:48 UTC (rev 305569)
+++ php/php-src/branches/PHP_5_3/NEWS   2010-11-19 22:06:44 UTC (rev 305570)
@@ -1,6 +1,8 @@
 PHP                                                                        
NEWS
 |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
 ?? ??? 2010, PHP 5.3.4
+- Fixed extract() to do not overwrite $GLOBALS and $this when using
+  EXTR_OVERWRITE. (jorto at redhat dot com)
 - Fixed bug #53362 (Segmentation fault when extending SplFixedArray). (Felipe)
 - Fixed bug #47168 (printf of floating point variable prints maximum of 40
   decimal places). (Ilia)

Modified: php/php-src/branches/PHP_5_3/ext/standard/array.c
===================================================================
--- php/php-src/branches/PHP_5_3/ext/standard/array.c   2010-11-19 21:38:48 UTC 
(rev 305569)
+++ php/php-src/branches/PHP_5_3/ext/standard/array.c   2010-11-19 22:06:44 UTC 
(rev 305570)
@@ -1389,10 +1389,10 @@

                        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);

Added: php/php-src/branches/PHP_5_3/ext/standard/tests/array/extract_safety.phpt
===================================================================
--- php/php-src/branches/PHP_5_3/ext/standard/tests/array/extract_safety.phpt   
                        (rev 0)
+++ php/php-src/branches/PHP_5_3/ext/standard/tests/array/extract_safety.phpt   
2010-11-19 22:06:44 UTC (rev 305570)
@@ -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
\ No newline at end of file


Property changes on: 
php/php-src/branches/PHP_5_3/ext/standard/tests/array/extract_safety.phpt
___________________________________________________________________
Added: svn:keywords
   + Id Rev Revision
Added: svn:eol-style
   + native

Modified: php/php-src/trunk/ext/standard/array.c
===================================================================
--- php/php-src/trunk/ext/standard/array.c      2010-11-19 21:38:48 UTC (rev 
305569)
+++ php/php-src/trunk/ext/standard/array.c      2010-11-19 22:06:44 UTC (rev 
305570)
@@ -1389,10 +1389,10 @@

                        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);

Added: php/php-src/trunk/ext/standard/tests/array/extract_safety.phpt
===================================================================
--- php/php-src/trunk/ext/standard/tests/array/extract_safety.phpt              
                (rev 0)
+++ php/php-src/trunk/ext/standard/tests/array/extract_safety.phpt      
2010-11-19 22:06:44 UTC (rev 305570)
@@ -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
\ No newline at end of file


Property changes on: 
php/php-src/trunk/ext/standard/tests/array/extract_safety.phpt
___________________________________________________________________
Added: svn:keywords
   + Id Rev Revision
Added: svn:eol-style
   + native

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to