Bug #81591 [Opn->Fbk]: Fatal Error not properly logged in particular cases

From: Date: Thu, 04 Nov 2021 14:27:18 +0000
Subject: Bug #81591 [Opn->Fbk]: Fatal Error not properly logged in particular cases
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-237554@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=81591&edit=1

 ID:                 81591
 Updated by:         nikic@php.net
 Reported by:        anton at cpp dot in
 Summary:            Fatal Error not properly logged in particular cases
-Status:             Open
+Status:             Feedback
 Type:               Bug
 Package:            *General Issues
 Operating System:   FreeBSD 12.3
 PHP Version:        8.0.12
 Block user comment: N
 Private report:     N

 New Comment:

I can't reproduce this. https://3v4l.org/iAGg4 shows that
this works with error display, and trying with "-d display_errors=0 -d log_errors=1"
instead I get the same result, with both errors logged.

Which ini settings are necessary to reproduce this?


Previous Comments:
------------------------------------------------------------------------
[2021-11-04 14:15:48] anton at cpp dot in

Description:
------------
We had a few 500 pages without any traces in php.log after updating from 7.4 to 8.0.

The reason was a parameter type mismatch of in_array and array_key_exists functions, but TypeError
was not logged if a warning previously occurred at the same line.

We had these warnings silenced with @$_REQUEST['whatever'], so no log messages were
produced as a result of the crash.

While this pattern is ugly and should be refactored with proper checking and casting (and it was), I
believe TypeError should be generated and properly logged in this case nonetheless.


Test script:
---------------
<?php

error_reporting(E_ALL);

$not_array = false;

// Case #1, incorrect: only 'PHP Warning:  Undefined array key "nonexistant"' is
logged
echo (array_key_exists($_REQUEST['nonexistant'], $not_array) ? "yes" :
"no");

// Case #2, correct: 'PHP Fatal error:  Uncaught TypeError: array_key_exists(): Argument #2
($array) must be of type array, bool given' is logged
$nonexistant = NULL;
echo (array_key_exists($nonexistant, $not_array) ? "yes" : "no");

// Case #3, correct: both Warning and Fatal error are logged
function my_ake(string|int $key, array $array): bool {return array_key_exists($key, $array);}
echo (my_ake($_REQUEST['nonexistant'], $not_array) ? "yes" : "no");




------------------------------------------------------------------------



--
Edit this bug report at https://bugs.php.net/bug.php?id=81591&edit=1


Thread (6 messages)

« previous php.bugs (#237554) next »