cvs: ZendEngine2 / zend_execute_API.c /tests bug47572.phpt

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

  Added files:                 
    /ZendEngine2/tests	bug47572.phpt 

  Modified files:              
    /ZendEngine2	zend_execute_API.c 
  Log:
  - Fixed bug #47572 (zval_update_constant_ex: Segmentation fault)
  
  
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_execute_API.c?r1=1.472&r2=1.473&diff_format=u
Index: ZendEngine2/zend_execute_API.c
diff -u ZendEngine2/zend_execute_API.c:1.472 ZendEngine2/zend_execute_API.c:1.473
--- ZendEngine2/zend_execute_API.c:1.472	Mon Feb  9 09:20:46 2009
+++ ZendEngine2/zend_execute_API.c	Thu Mar  5 16:24:41 2009
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_execute_API.c,v 1.472 2009/02/09 09:20:46 dmitry Exp $ */
+/* $Id: zend_execute_API.c,v 1.473 2009/03/05 16:24:41 felipe Exp $ */
 
 #include <stdio.h>
 #include <signal.h>
@@ -655,10 +655,12 @@
 						str_index.u = colon.u + 1;
 					} else {
 						if (str_index.u[str_index_len - 2] & IS_CONSTANT_UNQUALIFIED) {
-							actual = (UChar *)u_memrchr(str_index.u, '\\', str_index_len - 3) + 1;
+							if ((actual = (UChar *)u_memrchr(str_index.u, '\\', str_index_len - 3))) {
+								actual++;
 							str_index_len -= (actual - str_index.u);
 							str_index.u = actual;
 						}
+						}
 						if (str_index.u[0] == '\\') {
 							++str_index.u;
 							--str_index_len;
@@ -678,10 +680,12 @@
 						str_index.s = colon.s + 1;
 					} else {
 						if (str_index.s[str_index_len - 2] & IS_CONSTANT_UNQUALIFIED) {
-							actual = (char *)zend_memrchr(str_index.s, '\\', str_index_len - 3) + 1;
+							if ((actual = (char *)zend_memrchr(str_index.s, '\\', str_index_len - 3))) {
+								actual++;
 							str_index_len -= (actual - str_index.s);
 							str_index.s = actual;
 						}
+						}
 						if (str_index.s[0] == '\\') {
 							++str_index.s;
 							--str_index_len;

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