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;
}
}
}