cvs: ZendEngine2 / zend_execute.c /tests bug39018.phpt bug39018_2.phpt

[email protected] ("Felipe Pena")
Newsgroups php.zend-engine.cvs
Message-ID <cvsfelipe1204976495@cvsserver>
felipe		Sat Mar  8 11:41:35 2008 UTC

  Modified files:              
    /ZendEngine2	zend_execute.c 
    /ZendEngine2/tests	bug39018.phpt bug39018_2.phpt 
  Log:
  MFB: Fixed bug #39018 (Error control operator '@' fails to suppress "Uninitialized string offset")
  
  
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_execute.c?r1=1.790&r2=1.791&diff_format=u
Index: ZendEngine2/zend_execute.c
diff -u ZendEngine2/zend_execute.c:1.790 ZendEngine2/zend_execute.c:1.791
--- ZendEngine2/zend_execute.c:1.790	Tue Mar  4 10:06:22 2008
+++ ZendEngine2/zend_execute.c	Sat Mar  8 11:41:35 2008
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_execute.c,v 1.790 2008/03/04 10:06:22 dmitry Exp $ */
+/* $Id: zend_execute.c,v 1.791 2008/03/08 11:41:35 felipe Exp $ */
 
 #define ZEND_INTENSIVE_DEBUGGING 0
 
@@ -207,7 +207,6 @@
 		if (Z_TYPE_P(T->str_offset.str) == IS_STRING) {
 			if (((int)T->str_offset.offset<0)
 				|| (Z_STRLEN_P(T->str_offset.str) <= T->str_offset.offset)) {
-				zend_error(E_NOTICE, "Uninitialized string offset:  %d", T->str_offset.offset);
 				Z_STRVAL_P(ptr) = STR_EMPTY_ALLOC();
 				Z_STRLEN_P(ptr) = 0;
 			} else {
@@ -218,7 +217,6 @@
 		} else {
 			if (((int)T->str_offset.offset<0)
 				|| (Z_USTRCPLEN_P(T->str_offset.str) <= T->str_offset.offset)) {
-				zend_error(E_NOTICE, "Uninitialized string offset:  %d", T->str_offset.offset);
 				Z_USTRVAL_P(ptr) = USTR_MAKE("");
 				Z_USTRLEN_P(ptr) = 0;
 			} else {
@@ -1215,6 +1213,9 @@
 					dim = &tmp;
 				}
 				if (result) {
+					if (Z_LVAL_P(dim) < 0 || Z_UNILEN_P(container) <= Z_LVAL_P(dim)) {
+						zend_error(E_NOTICE, "Uninitialized string offset: %ld", Z_LVAL_P(dim));
+					}
 					container = *container_ptr;
 					result->str_offset.str = container;
 					PZVAL_LOCK(container);
http://cvs.php.net/viewvc.cgi/ZendEngine2/tests/bug39018.phpt?r1=1.1&r2=1.2&diff_format=u
Index: ZendEngine2/tests/bug39018.phpt
diff -u /dev/null ZendEngine2/tests/bug39018.phpt:1.2
--- /dev/null	Sat Mar  8 11:41:35 2008
+++ ZendEngine2/tests/bug39018.phpt	Sat Mar  8 11:41:35 2008
@@ -0,0 +1,82 @@
+--TEST--
+Bug #39018 (Error control operator '@' fails to suppress "Uninitialized string offset")
+--FILE--
+<?php
+
+error_reporting(E_ALL);
+
+$a = 'foo';
+$a[11111111111];
+
+$a = '';
+
+$a[0];
+
+print $a[0]; // 12
+
+$a[-11111111111111111111111];
+
+print $a[-11111111111111111111111]; // 16
+
+$a[-0];
+
+$x = 'test';
+
+@$x[4];
+
+@$y = $x[4];
+
+@('a' == $x[4]);
+
+$x[4] == 'a'; // 28
+
+@$x[4] == 'a';
+
+(@$x[4]) == 'a';
+
+($x[4]) == 'a'; // 34
+
+(@($x[4])) == 'a';
+
+(($x[4])) == 'a'; // 38
+
+@($x[4]) == 'a';
+
+($x[4]) == 'a'; // 42
+
+@($x[4] == 'a');
+
+($x[4] == 'a'); // 46
+
+$y = 'foobar';
+
+$y[12.2];
+
+print $y[12.2]; // 52
+
+$y[3.5];
+
+print $y[3.5]; // 56
+
+print "\nDone\n";
+
+?>
+--EXPECTF--
+
+Notice: Uninitialized string offset: 0 in %s on line 12
+
+Notice: Uninitialized string offset: -2147483648 in %s on line 16
+
+Notice: Uninitialized string offset: 4 in %s on line 28
+
+Notice: Uninitialized string offset: 4 in %s on line 34
+
+Notice: Uninitialized string offset: 4 in %s on line 38
+
+Notice: Uninitialized string offset: 4 in %s on line 42
+
+Notice: Uninitialized string offset: 4 in %s on line 46
+
+Notice: Uninitialized string offset: 12 in %s on line 52
+b
+Done
http://cvs.php.net/viewvc.cgi/ZendEngine2/tests/bug39018_2.phpt?r1=1.1&r2=1.2&diff_format=u
Index: ZendEngine2/tests/bug39018_2.phpt
diff -u /dev/null ZendEngine2/tests/bug39018_2.phpt:1.2
--- /dev/null	Sat Mar  8 11:41:35 2008
+++ ZendEngine2/tests/bug39018_2.phpt	Sat Mar  8 11:41:35 2008
@@ -0,0 +1,18 @@
+--TEST--
+Bug #39018 [2] (Error control operator '@' fails to suppress "Uninitialized string offset")
+--FILE--
+<?php
+
+error_reporting(E_ALL);
+
+$foo = 'test';
+$x = @$foo[6];
+
+print @($foo[100] + $foo[130]);
+
+print "\nDone\n";
+
+?>
+--EXPECT--
+0
+Done
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.