Browse Source

MFH: fix #40784 (Case sensivity in constructor's fallback)

experimental/5.2-WITH_DRCP
Antony Dovgal 20 years ago
parent
commit
30f45e15de
  1. 24
      Zend/tests/bug40784.phpt
  2. 7
      Zend/zend_compile.c

24
Zend/tests/bug40784.phpt

@ -0,0 +1,24 @@
--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

7
Zend/zend_compile.c

@ -1480,12 +1480,15 @@ void zend_do_begin_class_member_function_call(znode *class_name, znode *method_n
opline->op2 = *method_name;
if (opline->op2.op_type == IS_CONST) {
char *lcname = zend_str_tolower_dup(Z_STRVAL(opline->op2.u.constant), Z_STRLEN(opline->op2.u.constant));
if ((sizeof(ZEND_CONSTRUCTOR_FUNC_NAME)-1) == Z_STRLEN(opline->op2.u.constant) &&
memcmp(Z_STRVAL(opline->op2.u.constant), ZEND_CONSTRUCTOR_FUNC_NAME, sizeof(ZEND_CONSTRUCTOR_FUNC_NAME)-1) == 0) {
memcmp(lcname, ZEND_CONSTRUCTOR_FUNC_NAME, sizeof(ZEND_CONSTRUCTOR_FUNC_NAME)-1) == 0) {
zval_dtor(&opline->op2.u.constant);
SET_UNUSED(opline->op2);
efree(lcname);
} else {
zend_str_tolower(opline->op2.u.constant.value.str.val, opline->op2.u.constant.value.str.len);
efree(opline->op2.u.constant.value.str.val);
opline->op2.u.constant.value.str.val = lcname;
}
}

Loading…
Cancel
Save