Re: Re: Don't silence fatal errors
| From: | Zeev Suraski | Date: | Mon, 03 Dec 2018 12:08:20 +0000 |
| Subject: | Re: Re: Don't silence fatal errors | ||
| References: | 1 2 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-103546@lists.php.net to get a copy of this message | ||
On Mon, Dec 3, 2018 at 12:51 AM Andrea Faulds <ajf@ajf.me> wrote:
> Hi Nikita,
>
> Nikita Popov wrote:
> > When the silencing operator @ is used, the intention is generally to
> > silence expected warnings or notices. However, it currently also silences
> > fatal errors. As fatal errors also abort request execution, the result
> will
> > often be a hard to debug white screen of death.
> >
> > The most recent occurrence which motivated me to write this mail is
> > https://bugs.php.net/bug.php?id=77205, but I've seen
> > this play out
> multiple
> > times already.
> >
> > I would like to propose to change the behavior of @ to only silence
> > warnings, notices and other low-level diagnostics, but leave fatal errors
> > intake.
> It's always been bizarre to me that @ can silence fatal errors, which
> has no practical application and makes using @ to silence a lower-level
> error potentially hszardous if its targeted function can also produce a
> fatal error.
>
Well, it does have one practical application which I think we should pay
attention to if we are to change the behavior - in case of display_errors
being on (yes, nobody should have that in production, but that doesn't
change the fact that many do) - suddenly we would potentially be exposing
sensitive data to remote users - data that was previously explicitly
silenced and with this change we'd be breaking that contract. This is not
an unlikely scenario.
OTOH I do see the value of being able to silence only non-critical
messages. What if we do something along the lines of what somebody
proposed, and introduce another error level E_ERROR_WHILE_SILENCED or
something like that? Folks who would want to will be able to turn it on,
and we can leave it out of E_ALL so that it would require explicit enabling.
Zeev