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
|