logo       
Google Custom Search
    AddThis Social Bookmark Button
-->

cvs: ZendEngine2 / zend_compile.c /tests bug40784.phpt: msg#00017

Subject: cvs: ZendEngine2 / zend_compile.c /tests bug40784.phpt
tony2001                Mon Mar 12 13:07:39 2007 UTC

  Added files:                 
    /ZendEngine2/tests  bug40784.phpt 

  Modified files:              
    /ZendEngine2        zend_compile.c 
  Log:
  fix #40784 (Case sensivity in constructor's fallback)
  
  
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_compile.c?r1=1.741&r2=1.742&diff_format=u
Index: ZendEngine2/zend_compile.c
diff -u ZendEngine2/zend_compile.c:1.741 ZendEngine2/zend_compile.c:1.742
--- ZendEngine2/zend_compile.c:1.741    Thu Mar  8 17:30:28 2007
+++ ZendEngine2/zend_compile.c  Mon Mar 12 13:07:39 2007
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_compile.c,v 1.741 2007/03/08 17:30:28 helly Exp $ */
+/* $Id: zend_compile.c,v 1.742 2007/03/12 13:07:39 tony2001 Exp $ */
 
 #include <zend_language_parser.h>
 #include "zend.h"
@@ -1586,21 +1586,28 @@
        opline->op2 = *method_name;
 
        if (opline->op2.op_type == IS_CONST) {
+               zstr lcname;
+               unsigned int lcname_len;
+
+               if (Z_TYPE(opline->op2.u.constant) == IS_UNICODE) {
+                       lcname = 
zend_u_str_case_fold(Z_TYPE(opline->op2.u.constant), 
Z_UNIVAL(opline->op2.u.constant), Z_UNILEN(opline->op2.u.constant), 0, 
&lcname_len);
+               } else {
+                       lcname.s = 
zend_str_tolower_dup(Z_STRVAL(opline->op2.u.constant), 
Z_STRLEN(opline->op2.u.constant));
+               }
+
                if ((sizeof(ZEND_CONSTRUCTOR_FUNC_NAME)-1) == 
Z_UNILEN(opline->op2.u.constant) &&
-                   ZEND_U_EQUAL(Z_TYPE(opline->op2.u.constant), 
Z_UNIVAL(opline->op2.u.constant), Z_UNILEN(opline->op2.u.constant), 
ZEND_CONSTRUCTOR_FUNC_NAME, sizeof(ZEND_CONSTRUCTOR_FUNC_NAME)-1)) {
+                               ZEND_U_EQUAL(Z_TYPE(opline->op2.u.constant), 
lcname, Z_UNILEN(opline->op2.u.constant), ZEND_CONSTRUCTOR_FUNC_NAME, 
sizeof(ZEND_CONSTRUCTOR_FUNC_NAME)-1)) {
                        zval_dtor(&opline->op2.u.constant);
                        SET_UNUSED(opline->op2);
+                       efree(lcname.v);
                } else {
                        if (Z_TYPE(opline->op2.u.constant) == IS_UNICODE) {
-                               unsigned int lcname_len;
-                               zstr lcname;
-
-                               lcname = 
zend_u_str_case_fold(Z_TYPE(opline->op2.u.constant), 
Z_UNIVAL(opline->op2.u.constant), Z_UNILEN(opline->op2.u.constant), 0, 
&lcname_len);
                                efree(Z_USTRVAL(opline->op2.u.constant));
                                Z_USTRVAL(opline->op2.u.constant) = lcname.u;
                                Z_USTRLEN(opline->op2.u.constant) = lcname_len;
                        } else {
-                               
zend_str_tolower(Z_STRVAL(opline->op2.u.constant), 
Z_STRLEN(opline->op2.u.constant));
+                               efree(Z_STRVAL(opline->op2.u.constant));
+                               Z_STRVAL(opline->op2.u.constant) = lcname.s;
                        }
                }
        }

http://cvs.php.net/viewvc.cgi/ZendEngine2/tests/bug40784.phpt?view=markup&rev=1.1
Index: ZendEngine2/tests/bug40784.phpt
+++ ZendEngine2/tests/bug40784.phpt
--TEST--
Bug #40784 (Case sensivity in constructor's fallback)
--FILE--
<?php

class A {
          function A () { echo "I'm A\n"; }
}

class B extends A {
  function __construct() {
    parent::__construct();
    parent::__constrUct();
  }
}

$b = new B;

echo "Done\n";
?>
--EXPECTF--     
I'm A
I'm A
Done

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




<Prev in Thread] Current Thread [Next in Thread>