]> granicus.if.org Git - php/commitdiff
Fix #76735: Incorrect message in fopen on invalid mode
authorChristoph M. Becker <cmbecker69@gmx.de>
Tue, 22 Sep 2020 16:57:21 +0000 (18:57 +0200)
committerChristoph M. Becker <cmbecker69@gmx.de>
Wed, 23 Sep 2020 08:54:06 +0000 (10:54 +0200)
We have to log errors in `stream_opener` callbacks to the wrapper's
error log, because otherwise we may pick up an unrelated `errno` or a
most generic message.

Closes GH-6187.

NEWS
ext/bz2/tests/002.phpt
ext/standard/tests/file/bug76735.phpt [new file with mode: 0644]
main/streams/plain_wrapper.c

diff --git a/NEWS b/NEWS
index 12a2de1385f01b0274ff74cc8cea935874130db1..6d8ed53499e1c6e7176e3e2ac2b78f637fb27d48 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -19,6 +19,7 @@ PHP                                                                        NEWS
 - Standard:
   . Fixed bug #80114 (parse_url does not accept URLs with port 0). (cmb, twosee)
   . Fixed bug #76943 (Inconsistent stream_wrapper_restore() errors). (cmb)
+  . Fixed bug #76735 (Incorrect message in fopen on invalid mode). (cmb)
 
 01 Oct 2020, PHP 7.3.23
 
index a69514a71132c9cbd5fe727cb09c4128bd266cef..1b0fd2a660742ed23802546483d7aa58bec49d9a 100644 (file)
@@ -83,12 +83,12 @@ bool(false)
 resource(%d) of type (stream)
 resource(%d) of type (stream)
 
-Warning: fopen(bz_open_002.txt): failed to open stream: Bad file %s in %s on line %d
+Warning: fopen(bz_open_002.txt): failed to open stream: `br' is not a valid mode for fopen in %s on line %d
 
 Warning: bzopen(): first parameter has to be string or file-resource in %s on line %d
 bool(false)
 
-Warning: fopen(bz_open_002.txt): failed to open stream: Bad file %s in %s on line %d
+Warning: fopen(bz_open_002.txt): failed to open stream: `br' is not a valid mode for fopen in %s on line %d
 
 Warning: bzopen(): first parameter has to be string or file-resource in %s on line %d
 bool(false)
diff --git a/ext/standard/tests/file/bug76735.phpt b/ext/standard/tests/file/bug76735.phpt
new file mode 100644 (file)
index 0000000..451988c
--- /dev/null
@@ -0,0 +1,8 @@
+--TEST--
+Bug #76735 (Incorrect message in fopen on invalid mode)
+--FILE--
+<?php
+fopen(__FILE__, 'Q');
+?>
+--EXPECTF--
+Warning: fopen(%s): failed to open stream: `Q' is not a valid mode for fopen in %s on line %d
index d00a6efe29d281a6342fb616f55298384ef70c4a..131f77c4218eb42c47148b2c299d0212603b8606 100644 (file)
@@ -1021,9 +1021,7 @@ PHPAPI php_stream *_php_stream_fopen(const char *filename, const char *mode, zen
        char *persistent_id = NULL;
 
        if (FAILURE == php_stream_parse_fopen_modes(mode, &open_flags)) {
-               if (options & REPORT_ERRORS) {
-                       php_error_docref(NULL, E_WARNING, "`%s' is not a valid mode for fopen", mode);
-               }
+               php_stream_wrapper_log_error(&php_plain_files_wrapper, options, "`%s' is not a valid mode for fopen", mode);
                return NULL;
        }