Commit ce798afac39 for php.net
commit ce798afac393a70653b34be66eb662b824bed032
Author: David CARLIER <devnexen@gmail.com>
Date: Thu Jan 29 19:49:45 2026 +0000
Fix GH-21058: error_log() crash on null destination argument. (#21064)
we preserve the lower branches behavior by letting php_stream_open_wrapper_ex
handling the null path and propagating the exception.
close GH-21064
diff --git a/NEWS b/NEWS
index bf00d8f663b..be349610ff8 100644
--- a/NEWS
+++ b/NEWS
@@ -101,6 +101,8 @@ PHP NEWS
while COW violation flag is still set). (alexandre-daubois)
. Invalid mode values now throw in array_filter() instead of being silently
defaulted to 0. (Jorg Sowa)
+ . Fixed bug GH-21058 (error_log() crashes with message_type 3 and
+ null destination). (David Carlier)
- Streams:
. Added so_keepalive, tcp_keepidle, tcp_keepintvl and tcp_keepcnt stream
diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c
index dc6146aec9d..1d7f2c1a9b5 100644
--- a/ext/standard/basic_functions.c
+++ b/ext/standard/basic_functions.c
@@ -1369,7 +1369,7 @@ PHPAPI zend_result _php_error_log(int opt_err, const zend_string *message, const
return FAILURE;
case 3: /*save to a file */
- stream = php_stream_open_wrapper(ZSTR_VAL(opt), "a", REPORT_ERRORS, NULL);
+ stream = php_stream_open_wrapper(opt ? ZSTR_VAL(opt) : NULL, "a", REPORT_ERRORS, NULL);
if (!stream) {
return FAILURE;
}
diff --git a/ext/standard/tests/general_functions/gh21058.phpt b/ext/standard/tests/general_functions/gh21058.phpt
new file mode 100644
index 00000000000..598625a2017
--- /dev/null
+++ b/ext/standard/tests/general_functions/gh21058.phpt
@@ -0,0 +1,13 @@
+--TEST--
+GH-21058 (error_log() crash with null destination and message type 3)
+--FILE--
+<?php
+
+try {
+ error_log("test", 3, null);
+} catch (\ValueError $e) {
+ echo $e->getMessage(), PHP_EOL;
+}
+?>
+--EXPECT--
+Path must not be empty