--- /dev/null
+--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
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;
}
}