Skip to content

Commit 0ef6c62

Browse files
committed
Fix broken memcmp
We can't really do memcmp("_call", "__callStatic", sizeof("__callStatic") -1), neither should we memcmp constants at all.
1 parent 749704c commit 0ef6c62

File tree

1 file changed

+12
-12
lines changed

1 file changed

+12
-12
lines changed

Zend/zend_compile.c

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5496,11 +5496,11 @@ void zend_compile_closure_uses(zend_ast *ast) /* {{{ */
54965496
}
54975497
/* }}} */
54985498

5499-
static void zend_check_magic_method_attr(uint32_t attr, const char* method) /* {{{ */
5499+
static void zend_check_magic_method_attr(uint32_t attr, const char* method, zend_bool is_static) /* {{{ */
55005500
{
5501-
if (memcmp(method, "__callStatic", sizeof("__callStatic") - 1) == 0) {
5501+
if (is_static) {
55025502
if (!(attr & ZEND_ACC_PUBLIC) || !(attr & ZEND_ACC_STATIC)) {
5503-
zend_error(E_WARNING, "The magic method __callStatic() must have public visibility and be static");
5503+
zend_error(E_WARNING, "The magic method %s() must have public visibility and be static");
55045504
}
55055505
} else if (!(attr & ZEND_ACC_PUBLIC) || (attr & ZEND_ACC_STATIC)) {
55065506
zend_error(E_WARNING,
@@ -5567,34 +5567,34 @@ void zend_begin_method_decl(zend_op_array *op_array, zend_string *name, zend_boo
55675567
} else if (zend_string_equals_literal(lcname, ZEND_CLONE_FUNC_NAME)) {
55685568
ce->clone = (zend_function *) op_array;
55695569
} else if (zend_string_equals_literal(lcname, ZEND_CALL_FUNC_NAME)) {
5570-
zend_check_magic_method_attr(fn_flags, "__call");
5570+
zend_check_magic_method_attr(fn_flags, "__call", 0);
55715571
ce->__call = (zend_function *) op_array;
55725572
} else if (zend_string_equals_literal(lcname, ZEND_CALLSTATIC_FUNC_NAME)) {
5573-
zend_check_magic_method_attr(fn_flags, "__callStatic");
5573+
zend_check_magic_method_attr(fn_flags, "__callStatic", 1);
55745574
ce->__callstatic = (zend_function *) op_array;
55755575
} else if (zend_string_equals_literal(lcname, ZEND_GET_FUNC_NAME)) {
5576-
zend_check_magic_method_attr(fn_flags, "__get");
5576+
zend_check_magic_method_attr(fn_flags, "__get", 0);
55775577
ce->__get = (zend_function *) op_array;
55785578
ce->ce_flags |= ZEND_ACC_USE_GUARDS;
55795579
} else if (zend_string_equals_literal(lcname, ZEND_SET_FUNC_NAME)) {
5580-
zend_check_magic_method_attr(fn_flags, "__set");
5580+
zend_check_magic_method_attr(fn_flags, "__set", 0);
55815581
ce->__set = (zend_function *) op_array;
55825582
ce->ce_flags |= ZEND_ACC_USE_GUARDS;
55835583
} else if (zend_string_equals_literal(lcname, ZEND_UNSET_FUNC_NAME)) {
5584-
zend_check_magic_method_attr(fn_flags, "__unset");
5584+
zend_check_magic_method_attr(fn_flags, "__unset", 0);
55855585
ce->__unset = (zend_function *) op_array;
55865586
ce->ce_flags |= ZEND_ACC_USE_GUARDS;
55875587
} else if (zend_string_equals_literal(lcname, ZEND_ISSET_FUNC_NAME)) {
5588-
zend_check_magic_method_attr(fn_flags, "__isset");
5588+
zend_check_magic_method_attr(fn_flags, "__isset", 0);
55895589
ce->__isset = (zend_function *) op_array;
55905590
ce->ce_flags |= ZEND_ACC_USE_GUARDS;
55915591
} else if (zend_string_equals_literal(lcname, ZEND_TOSTRING_FUNC_NAME)) {
5592-
zend_check_magic_method_attr(fn_flags, "__toString");
5592+
zend_check_magic_method_attr(fn_flags, "__toString", 0);
55935593
ce->__tostring = (zend_function *) op_array;
55945594
} else if (zend_string_equals_literal(lcname, ZEND_INVOKE_FUNC_NAME)) {
5595-
zend_check_magic_method_attr(fn_flags, "__invoke");
5595+
zend_check_magic_method_attr(fn_flags, "__invoke", 0);
55965596
} else if (zend_string_equals_literal(lcname, ZEND_DEBUGINFO_FUNC_NAME)) {
5597-
zend_check_magic_method_attr(fn_flags, "__debugInfo");
5597+
zend_check_magic_method_attr(fn_flags, "__debugInfo", 0);
55985598
ce->__debugInfo = (zend_function *) op_array;
55995599
}
56005600

0 commit comments

Comments
 (0)