cvs: ZendEngine2(PHP_5_3) / zend_execute_API.c /tests bug47572.phpt

[email protected] ("Felipe Pena") Thu, 05 Mar 2009 16:25:43 -0000
Newsgroups php.zend-engine.cvs
Message-ID <cvsfelipe1236270343@cvsserver>
felipe		Thu Mar  5 16:25:43 2009 UTC

  Added files:                 (Branch: PHP_5_3)
    /ZendEngine2/tests	bug47572.phpt 

  Modified files:              
    /ZendEngine2	zend_execute_API.c 
  Log:
  - MFH: Fixed bug #47572 (zval_update_constant_ex: Segmentation fault)
  
  
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_execute_API.c?r1=1.331.2.20.2.24.2.70&r2=1.331.2.20.2.24.2.71&diff_format=u
Index: ZendEngine2/zend_execute_API.c
diff -u ZendEngine2/zend_execute_API.c:1.331.2.20.2.24.2.70 ZendEngine2/zend_execute_API.c:1.331.2.20.2.24.2.71
--- ZendEngine2/zend_execute_API.c:1.331.2.20.2.24.2.70	Mon Feb  9 09:20:35 2009
+++ ZendEngine2/zend_execute_API.c	Thu Mar  5 16:25:43 2009
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_execute_API.c,v 1.331.2.20.2.24.2.70 2009/02/09 09:20:35 dmitry Exp $ */
+/* $Id: zend_execute_API.c,v 1.331.2.20.2.24.2.71 2009/03/05 16:25:43 felipe Exp $ */
 
 #include <stdio.h>
 #include <signal.h>
@@ -575,7 +575,7 @@
 	} else if (Z_TYPE_P(p) == IS_CONSTANT_ARRAY) {
 		zval **element, *new_val;
 		char *str_index;
-		uint str_index_len;
+		uint str_index_len = 0;
 		ulong num_index;
 		int ret;
 
@@ -613,9 +613,11 @@
 					str_index = colon;
 				} else {
 					if (str_index[str_index_len - 2] & IS_CONSTANT_UNQUALIFIED) {
-						actual = (char *)zend_memrchr(str_index, '\\', str_index_len - 3) + 1;
+						if ((actual = (char *)zend_memrchr(str_index, '\\', str_index_len - 3))) {
+							actual++;
 						str_index_len -= (actual - str_index);
-						str_index = actual;
+							str_index = save;
+						}
 					}
 					if (str_index[0] == '\\') {
 						++str_index;

http://cvs.php.net/viewvc.cgi/ZendEngine2/tests/bug47572.phpt?view=markup&rev=1.1
Index: ZendEngine2/tests/bug47572.phpt
+++ ZendEngine2/tests/bug47572.phpt
--TEST--
Bug #47572 (zval_update_constant_ex: Segmentation fault)
--FILE--
<?php

class Foo {
  public static $bar = array(
    FOO => "bar"
    );

}

$foo = new Foo();

?>
--EXPECTF--
Notice: Use of undefined constant FOO - assumed 'FOO' in %s on line %d