Slipt error messages while checking magic methods attributes

Closes GH-5465
This commit is contained in:
Gabriel Caruso 2020-04-26 07:34:19 +02:00
parent f38d6cea42
commit 7ce8c5ad89
No known key found for this signature in database
GPG key ID: 4B385A6EE6C9678D
20 changed files with 32 additions and 24 deletions

View file

@ -20,9 +20,9 @@ echo $b->__invoke();
?>
--EXPECTF--
Warning: The magic method InvokeAble::__invoke() must have public visibility and cannot be static in %sbug61025.php on line %d
Warning: The magic method InvokeAble::__invoke() cannot be static in %sbug61025.php on line %d
Warning: The magic method Bar::__invoke() must have public visibility and cannot be static in %sbug61025.php on line %d
Warning: The magic method Bar::__invoke() must have public visibility in %sbug61025.php on line %d
Bar
Fatal error: Uncaught Error: Call to private method Bar::__invoke() from context '' in %sbug61025.php:%d
Stack trace:

View file

@ -19,6 +19,6 @@ eval('class A { private function __invoke() { } }');
?>
--EXPECTF--
string(%d) "The magic method A::__invoke() must have public visibility and cannot be static"
string(%d) "The magic method A::__invoke() must have public visibility"
string(%d) "%s(%d) : eval()'d code"
string(1) "X"

View file

@ -22,6 +22,6 @@ a::staticTest();
$b = new b();
$b->test();
--EXPECTF--
string(%d) "The magic method b::__invoke() must have public visibility and cannot be static"
string(%d) "The magic method b::__invoke() must have public visibility"
b::test()
a::test(c::TESTCONSTANT)

View file

@ -14,6 +14,6 @@ a::staticTest();
$b = new b();
$b->test();
--EXPECTF--
Warning: The magic method b::__invoke() must have public visibility and cannot be static in %s on line %d
Warning: The magic method b::__invoke() must have public visibility in %s on line %d
b::test()
a::test(c::TESTCONSTANT)

View file

@ -17,5 +17,5 @@ $b();
?>
--EXPECTF--
Warning: The magic method A::__invoke() must have public visibility and cannot be static in %s on line %d
Warning: The magic method A::__invoke() cannot be static in %s on line %d
A

View file

@ -14,7 +14,7 @@ eval('class A { private function __invoke() { } }');
?>
--EXPECTF--
string(%d) "The magic method A::__invoke() must have public visibility and cannot be static"
string(%d) "The magic method A::__invoke() must have public visibility"
string(%d) "%s(%d) : eval()'d code"
Warning: Undefined variable $undefined in %s on line %d

View file

@ -11,4 +11,4 @@ class foo {
?>
--EXPECTF--
Warning: The magic method foo::__unset() must have public visibility and cannot be static in %s on line %d
Warning: The magic method foo::__unset() must have public visibility in %s on line %d

View file

@ -11,4 +11,4 @@ class foo {
?>
--EXPECTF--
Warning: The magic method foo::__unset() must have public visibility and cannot be static in %s on line %d
Warning: The magic method foo::__unset() cannot be static in %s on line %d

View file

@ -11,4 +11,4 @@ class foo {
?>
--EXPECTF--
Warning: The magic method foo::__unset() must have public visibility and cannot be static in %s on line %d
Warning: The magic method foo::__unset() must have public visibility in %s on line %d

View file

@ -9,4 +9,4 @@ interface a {
?>
--EXPECTF--
Warning: The magic method a::__call() must have public visibility and cannot be static in %s on line %d
Warning: The magic method a::__call() cannot be static in %s on line %d

View file

@ -9,4 +9,4 @@ interface a {
?>
--EXPECTF--
Warning: The magic method a::__callStatic() must have public visibility and be static in %s on line %d
Warning: The magic method a::__callStatic() must be static in %s on line %d

View file

@ -9,6 +9,6 @@ abstract class b {
?>
--EXPECTF--
Warning: The magic method b::__set() must have public visibility and cannot be static in %s on line %d
Warning: The magic method b::__set() must have public visibility in %s on line %d
Fatal error: Method b::__set() must take exactly 2 arguments in %s on line %d

View file

@ -14,6 +14,6 @@ class a extends b {
?>
--EXPECTF--
Warning: The magic method a::__set() must have public visibility and cannot be static in %s on line %d
Warning: The magic method a::__set() must have public visibility in %s on line %d
Fatal error: Access level to a::__set() must be public (as in class b) in %s on line 8

View file

@ -10,4 +10,4 @@ class a {
?>
--EXPECTF--
Warning: The magic method a::__callStatic() must have public visibility and be static in %s on line %d
Warning: The magic method a::__callStatic() must have public visibility in %s on line %d

View file

@ -10,6 +10,8 @@ class a {
?>
--EXPECTF--
Warning: The magic method a::__toString() must have public visibility and cannot be static in %s on line %d
Warning: The magic method a::__toString() must have public visibility in %s on line %d
Warning: The magic method a::__toString() cannot be static in %s on line %d
Fatal error: Method a::__toString() cannot take arguments in %s on line %d

View file

@ -7,6 +7,6 @@ class Foo {
}
?>
--EXPECTF--
Warning: The magic method Foo::__serialize() must have public visibility and cannot be static in %s on line %d
Warning: The magic method Foo::__serialize() cannot be static in %s on line %d
Fatal error: Method Foo::__serialize() cannot take arguments in %s on line %d

View file

@ -7,6 +7,6 @@ class Foo {
}
?>
--EXPECTF--
Warning: The magic method Foo::__unserialize() must have public visibility and cannot be static in %s on line %d
Warning: The magic method Foo::__unserialize() cannot be static in %s on line %d
Fatal error: Method Foo::__unserialize() must take exactly 1 argument in %s on line %d

View file

@ -6041,15 +6041,21 @@ static void zend_compile_implicit_closure_uses(closure_info *info)
static void zend_check_magic_method_attr(uint32_t attr, zend_class_entry *ce, const char* method, zend_bool is_static) /* {{{ */
{
if (!(attr & ZEND_ACC_PUBLIC)) {
zend_error(E_WARNING,
"The magic method %s::%s() must have public visibility",
ZSTR_VAL(ce->name), method);
}
if (is_static) {
if (!(attr & ZEND_ACC_PUBLIC) || !(attr & ZEND_ACC_STATIC)) {
if (!(attr & ZEND_ACC_STATIC)) {
zend_error(E_WARNING,
"The magic method %s::%s() must have public visibility and be static",
"The magic method %s::%s() must be static",
ZSTR_VAL(ce->name), method);
}
} else if (!(attr & ZEND_ACC_PUBLIC) || (attr & ZEND_ACC_STATIC)) {
} else if (attr & ZEND_ACC_STATIC) {
zend_error(E_WARNING,
"The magic method %s::%s() must have public visibility and cannot be static",
"The magic method %s::%s() cannot be static",
ZSTR_VAL(ce->name), method);
}
}

View file

@ -22,7 +22,7 @@ $b = new B();
$b->test();
?>
--EXPECTF--
Warning: The magic method A::__call() must have public visibility and cannot be static in %s__call_005.php on line 3
Warning: The magic method A::__call() must have public visibility in %s__call_005.php on line 3
In A::__call(test1, array(1,a))
object(B)#1 (0) {
}

View file

@ -51,7 +51,7 @@ try {
}
?>
--EXPECTF--
Warning: The magic method A::__call() must have public visibility and cannot be static in %s on line 3
Warning: The magic method A::__call() cannot be static in %s on line 3
---> Invoke __call via simple method call.
object(A)#1 (0) {
}