From a27fbed208241f42887a7e914c81ea0f1ed91960 Mon Sep 17 00:00:00 2001 From: Gina Peter Banyard Date: Mon, 20 Jul 2026 19:43:02 +0100 Subject: [PATCH 1/2] streams: refactor _php_stream_opendir() to use early returns --- main/streams/streams.c | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/main/streams/streams.c b/main/streams/streams.c index 3d8830d7291f..116a85f2d8f8 100644 --- a/main/streams/streams.c +++ b/main/streams/streams.c @@ -2029,21 +2029,32 @@ PHPAPI php_stream *_php_stream_opendir(const char *path, int options, path_to_open = path; wrapper = php_stream_locate_url_wrapper(path, &path_to_open, options); - - if (wrapper && wrapper->wops->dir_opener) { - stream = wrapper->wops->dir_opener(wrapper, - path_to_open, "r", options & ~REPORT_ERRORS, NULL, - context STREAMS_REL_CC); - - if (stream) { - stream->wrapper = wrapper; - stream->flags |= PHP_STREAM_FLAG_NO_BUFFER | PHP_STREAM_FLAG_IS_DIR; + if (UNEXPECTED(wrapper == NULL)) { + if (options & REPORT_ERRORS) { + php_stream_display_wrapper_errors(NULL, context, PHP_STREAM_EC(OpenFailed), + "Failed to open directory"); + php_stream_tidy_wrapper_error_log(wrapper); } - } else if (wrapper) { + return NULL; + } + + if (UNEXPECTED(!wrapper->wops->dir_opener)) { php_stream_wrapper_log_warn(wrapper, context, options & ~REPORT_ERRORS, NoOpener, "not implemented"); + php_stream_display_wrapper_errors(wrapper, context, PHP_STREAM_EC(OpenFailed), + "Failed to open directory"); + php_stream_tidy_wrapper_error_log(wrapper); + return NULL; } - if (stream == NULL && (options & REPORT_ERRORS)) { + + stream = wrapper->wops->dir_opener(wrapper, + path_to_open, "r", options & ~REPORT_ERRORS, NULL, + context STREAMS_REL_CC); + + if (stream) { + stream->wrapper = wrapper; + stream->flags |= PHP_STREAM_FLAG_NO_BUFFER | PHP_STREAM_FLAG_IS_DIR; + } else if (options & REPORT_ERRORS) { php_stream_display_wrapper_errors(wrapper, context, PHP_STREAM_EC(OpenFailed), "Failed to open directory"); } From 721eaf4f038f1b0799778fd42096c27f07fa8d70 Mon Sep 17 00:00:00 2001 From: Gina Peter Banyard Date: Mon, 20 Jul 2026 19:48:12 +0100 Subject: [PATCH 2/2] streams: use new stream error API in _php_stream_opendir() --- main/streams/streams.c | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/main/streams/streams.c b/main/streams/streams.c index 116a85f2d8f8..f751528720c2 100644 --- a/main/streams/streams.c +++ b/main/streams/streams.c @@ -2030,20 +2030,13 @@ PHPAPI php_stream *_php_stream_opendir(const char *path, int options, wrapper = php_stream_locate_url_wrapper(path, &path_to_open, options); if (UNEXPECTED(wrapper == NULL)) { - if (options & REPORT_ERRORS) { - php_stream_display_wrapper_errors(NULL, context, PHP_STREAM_EC(OpenFailed), - "Failed to open directory"); - php_stream_tidy_wrapper_error_log(wrapper); - } + php_stream_wrapper_warn_name(PHP_STREAM_ERROR_WRAPPER_DEFAULT_NAME, context, options, OpenFailed, + "Failed to open directory"); return NULL; } if (UNEXPECTED(!wrapper->wops->dir_opener)) { - php_stream_wrapper_log_warn(wrapper, context, options & ~REPORT_ERRORS, - NoOpener, "not implemented"); - php_stream_display_wrapper_errors(wrapper, context, PHP_STREAM_EC(OpenFailed), - "Failed to open directory"); - php_stream_tidy_wrapper_error_log(wrapper); + php_stream_wrapper_warn(wrapper, context, options, NoOpener, "Failed to open directory: not implemented"); return NULL; }