-
-
Notifications
You must be signed in to change notification settings - Fork 9.6k
[ExpressionLanguage] throws an exception on calling uncallable method #24041
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
@@ -77,8 +77,11 @@ public function evaluate($functions, $values) | |||
if (!is_object($obj)) { | |||
throw new \RuntimeException('Unable to get a property on a non-object.'); | |||
} | |||
if (($toCall = array($obj, $this->nodes['attribute']->attributes['value'])) && !is_callable($toCall)) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
if (!is_callable($toCall = array($obj, $this->nodes['attribute']->attributes['value']))) {
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@nicolas-grekas fixed
@@ -164,6 +164,15 @@ public function testRegisterAfterEval($registerCallback) | |||
} | |||
|
|||
/** | |||
* @expectedException \RuntimeException |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
please add also an @expectedExceptionMessage
annotation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done. I did not add before to be consistent with the codebase in this component. I use @expectedExceptionMessageRegExp
instead :)
Thank you @fmata. |
…able method (fmata) This PR was merged into the 2.7 branch. Discussion ---------- [ExpressionLanguage] throws an exception on calling uncallable method | Q | A | ------------- | --- | Branch? | 2.7 | Bug fix? | yes | New feature? | no | BC breaks? | no | Deprecations? | no | Tests pass? | yes | Fixed tickets | n/a | License | MIT | Doc PR | n/a When we evaluate an expression, if a callable is incorrect (not exists or not accessible) a warning is printed. This PR handles this case and throws a \RuntimeException when `is_callable()` returns `false` : ```php $el = new ExpressionLanguage(); $el->evaluate('foo.myfunction()', array('foo' => new \stdClass())); ``` **Before:** `Warning: call_user_func_array() expects parameter 1 to be a valid callback, class 'stdClass' does not have a method 'myfunction' in /home/.../src/Symfony/Component/ExpressionLanguage/Node/GetAttrNode.php on line 84` **After:** `Fatal error: Uncaught RuntimeException: Unable to call method "myfunction" of object "stdClass". in /home/.../src/Symfony/Component/ExpressionLanguage/Node/GetAttrNode.php:81` Commits ------- c8b65ae [ExpressionLanguage] throws an exception on calling uncallable method
When we evaluate an expression, if a callable is incorrect (not exists or not accessible) a warning is printed.
This PR handles this case and throws a \RuntimeException when
is_callable()
returnsfalse
:Before:
Warning: call_user_func_array() expects parameter 1 to be a valid callback, class 'stdClass' does not have a method 'myfunction' in /home/.../src/Symfony/Component/ExpressionLanguage/Node/GetAttrNode.php on line 84
After:
Fatal error: Uncaught RuntimeException: Unable to call method "myfunction" of object "stdClass". in /home/.../src/Symfony/Component/ExpressionLanguage/Node/GetAttrNode.php:81