From: Dmitry Stogov Date: Thu, 11 Apr 2019 11:24:04 +0000 (+0300) Subject: Fixed bug #77877 (call_user_func() passes $this to satatic methods). X-Git-Tag: php-7.4.0alpha1~555 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a1b7ccdfc69a1ad9938039f687ad7059ed1bd506;p=php Fixed bug #77877 (call_user_func() passes $this to satatic methods). --- diff --git a/NEWS b/NEWS index 178b551273..faa1c164b4 100644 --- a/NEWS +++ b/NEWS @@ -5,6 +5,8 @@ PHP NEWS - Core: . Fixed bug #77345 (Stack Overflow caused by circular reference in garbage collection). (Alexandru Patranescu, Nikita, Dmitry) + . Fixed bug #77877 (call_user_func() passes $this to satatic methods). + (Dmitry) . Implemented request #76148 (Add array_key_exists() to the list of specially compiled functions). (Majkl578) . Fixed bug #76430 (__METHOD__ inconsistent outside of method). diff --git a/Zend/tests/bug77877.phpt b/Zend/tests/bug77877.phpt new file mode 100644 index 0000000000..9e0181e1a6 --- /dev/null +++ b/Zend/tests/bug77877.phpt @@ -0,0 +1,23 @@ +--TEST-- +Bug #77877 call_user_func() passes $this to satatic methods +--FILE-- +getMessage() . "\n"; +} +try { + call_user_func([new Foo, 'bar']); +} catch (Throwable $e) { + echo $e->getMessage() . "\n"; +} +?> +--EXPECT-- +Using $this when not in object context +Using $this when not in object context diff --git a/Zend/zend_API.c b/Zend/zend_API.c index 881ee27a03..20b5fbb3b4 100644 --- a/Zend/zend_API.c +++ b/Zend/zend_API.c @@ -3170,6 +3170,10 @@ get_function_via_handler: if (fcc->object) { fcc->called_scope = fcc->object->ce; + if (fcc->function_handler + && fcc->function_handler->common.fn_flags & ZEND_ACC_STATIC) { + fcc->object = NULL; + } } return retval; }