Re: Disallow dynamic calls to assert()?
| From: | Gina P. Banyard | Date: | Sun, 11 May 2025 13:35:03 +0000 |
| Subject: | Re: Disallow dynamic calls to assert()? | ||
| References: | 1 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-127332@lists.php.net to get a copy of this message | ||
On Friday, 9 May 2025 at 08:35, Tim Düsterhus <tim@bastelstu.be> wrote:
> Hi
>
> I noticed that dynamic calls to the
assert() function do not
> take the
> zend.assertions into account, since for static calls
> zend.assertions
> is checked inside the compiler to completely bypass the call to
> assert() including the evaluation of all arguments. I created a
> PR to
> fix that, making dynamic calls to assert always return true just like
> static calls:
>
> https://github.com/php/php-src/pull/18521
>
> However these dynamic calls still evaluate their arguments, which makes
> for a behavioral difference that might be confusing. Niels rightfully
> pointed out that it is possible to forbid dynamic calls to a given
> function, this is already used for things like compact() or
> func_get_args(). Disallowing dynamic calls to
> assert() would
> completely bypass this problem.
>
> Does anyone have an opinion either way? Please comment on the GitHub
> issue if you do so:
>
> https://github.com/php/php-src/pull/18521#pullrequestreview-2825782965
>
> Best regards
> Tim Düsterhus
This makes sense to me, I don't really see why one would ever need to call assert dynamically.
Is it possible to prevent retrieving a closure by using the FCC syntax at compile time?
Best regards,
Gina P. Banyard