diff --git a/ext/standard/io_poll.c b/ext/standard/io_poll.c index f01f8236d511..c500247dc8be 100644 --- a/ext/standard/io_poll.c +++ b/ext/standard/io_poll.c @@ -2,13 +2,11 @@ +----------------------------------------------------------------------+ | Copyright (c) The PHP Group | +----------------------------------------------------------------------+ - | This source file is subject to version 3.01 of the PHP license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | https://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | + | This source file is subject to the Modified BSD License that is | + | bundled with this package in the file LICENSE, and is available | + | through the World Wide Web at . | + | | + | SPDX-License-Identifier: BSD-3-Clause | +----------------------------------------------------------------------+ | Author: Jakub Zelenka | +----------------------------------------------------------------------+ diff --git a/ext/standard/tests/streams/stream_context_set_option_no_default_leak.phpt b/ext/standard/tests/streams/stream_context_set_option_no_default_leak.phpt new file mode 100644 index 000000000000..788b6d8a4676 --- /dev/null +++ b/ext/standard/tests/streams/stream_context_set_option_no_default_leak.phpt @@ -0,0 +1,29 @@ +--TEST-- +stream_context_set_option() on a context-less stream must not leak into the default context +--FILE-- + +--EXPECT-- +array(0) { +} +array(0) { +} +array(1) { + ["http"]=> + array(1) { + ["filename"]=> + string(8) "test.txt" + } +} diff --git a/main/streams/php_stream_errors.h b/main/streams/php_stream_errors.h index c55c06e37f25..1642a6bdabd7 100644 --- a/main/streams/php_stream_errors.h +++ b/main/streams/php_stream_errors.h @@ -2,13 +2,11 @@ +----------------------------------------------------------------------+ | Copyright (c) The PHP Group | +----------------------------------------------------------------------+ - | This source file is subject to version 3.01 of the PHP license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | https://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | + | This source file is subject to the Modified BSD License that is | + | bundled with this package in the file LICENSE, and is available | + | through the World Wide Web at . | + | | + | SPDX-License-Identifier: BSD-3-Clause | +----------------------------------------------------------------------+ | Authors: Jakub Zelenka | +----------------------------------------------------------------------+ diff --git a/main/streams/stream_errors.c b/main/streams/stream_errors.c index 3d7056c44d1e..72f7428594c3 100644 --- a/main/streams/stream_errors.c +++ b/main/streams/stream_errors.c @@ -2,13 +2,11 @@ +----------------------------------------------------------------------+ | Copyright (c) The PHP Group | +----------------------------------------------------------------------+ - | This source file is subject to version 3.01 of the PHP license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | https://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | + | This source file is subject to the Modified BSD License that is | + | bundled with this package in the file LICENSE, and is available | + | through the World Wide Web at . | + | | + | SPDX-License-Identifier: BSD-3-Clause | +----------------------------------------------------------------------+ | Authors: Jakub Zelenka | +----------------------------------------------------------------------+ diff --git a/main/streams/streams.c b/main/streams/streams.c index 715bbcfe0371..171748e6a08a 100644 --- a/main/streams/streams.c +++ b/main/streams/streams.c @@ -2248,7 +2248,12 @@ PHPAPI php_stream *_php_stream_open_wrapper_ex(const char *path, const char *mod stream->open_filename = __zend_orig_filename ? __zend_orig_filename : __zend_filename; stream->open_lineno = __zend_orig_lineno ? __zend_orig_lineno : __zend_lineno; #endif - if (stream->ctx == NULL && context != NULL && !persistent) { + /* Attach an explicitly provided context to the stream, but never the + * default context: sharing it by reference would let a later + * stream_context_set_option() on the stream mutate the global default + * context, leaking options into every other stream. Stream errors fall + * back to the default context on their own when the stream has none. */ + if (stream->ctx == NULL && context != NULL && context != FG(default_context) && !persistent) { php_stream_context_set(stream, context); } }