Re: Missing warning for stats(), etc. when invoked with empty string
| From: | Christoph M. Becker | Date: | Fri, 04 Dec 2020 11:52:11 +0000 |
| Subject: | Re: Missing warning for stats(), etc. when invoked with empty string | ||
| References: | 1 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-112409@lists.php.net to get a copy of this message | ||
On 03.12.2020 at 11:20, Claude Pache wrote:
>
stats() and friends invoked with empty string or null as
> argument, return false (indicating failure), but do not emit the
> Warning that is expected on failure. See: https://3v4l.org/jXC2N
> <https://3v4l.org/jXC2N>
>
> That discrepancy between the two ways of indicating failure is problematic. Indeed, whenever I
> use one of those functions without prefixing it by @, I expect that it will either return a value of
> expected type (array in case of
> stats()), or run the panic procedure of my error handler.
>
> I propose to ensure that those functions always emit a Warning in each and every situation they
> return false/null (provided, of course, that those functions are not supposed to return
> false/null in absence of failure, and that their purpose is not to
> check failure condition as in file_exists()).
Returning false without raising a warning has been introduced[1] to fix
bug #21410[2]. The problem back then was that without that early
return, on Windows the empty string gave erroneous stat() results, and
filetype("") returned "dir". This is no longer the case at least as of
PHP 7.3.0 (I didn't test older versions); instead after reverting
560e33968d I now get:
Warning: stat(): stat failed for in %s on line %d
bool(false)
So, yes, I think we should revert that commit.
[1] <https://github.com/php/php-src/commit/560e33968d>
[2] <https://bugs.php.net/21410>
Regards,
Christoph