From 6c706c57147887a44a17b64732fbffa273b10d5b Mon Sep 17 00:00:00 2001 From: Niels Dossche <7771979+nielsdos@users.noreply.github.com> Date: Sun, 9 Feb 2025 20:32:52 +0100 Subject: [PATCH] Implement GH-17668: zlib streams should support locking --- ext/zlib/tests/zlib_wrapper_flock_basic.phpt | 6 +++--- ext/zlib/zlib_fopen_wrapper.c | 17 ++++++++++++++++- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/ext/zlib/tests/zlib_wrapper_flock_basic.phpt b/ext/zlib/tests/zlib_wrapper_flock_basic.phpt index 95329dd003e..89656c7fca6 100644 --- a/ext/zlib/tests/zlib_wrapper_flock_basic.phpt +++ b/ext/zlib/tests/zlib_wrapper_flock_basic.phpt @@ -1,13 +1,13 @@ --TEST-- -Test function stream_get_meta_data on a zlib stream +Test function flock on a zlib stream --EXTENSIONS-- zlib --FILE-- --EXPECT-- -bool(false) +bool(true) diff --git a/ext/zlib/zlib_fopen_wrapper.c b/ext/zlib/zlib_fopen_wrapper.c index b414b33a872..9cce8a6522b 100644 --- a/ext/zlib/zlib_fopen_wrapper.c +++ b/ext/zlib/zlib_fopen_wrapper.c @@ -95,6 +95,21 @@ static int php_gziop_flush(php_stream *stream) return gzflush(self->gz_file, Z_SYNC_FLUSH); } +static int php_gziop_set_option(php_stream *stream, int option, int value, void *ptrparam) +{ + struct php_gz_stream_data_t *self = stream->abstract; + + switch (option) { + case PHP_STREAM_OPTION_LOCKING: + case PHP_STREAM_OPTION_META_DATA_API: + return self->stream->ops->set_option(self->stream, option, value, ptrparam); + default: + break; + } + + return PHP_STREAM_OPTION_RETURN_NOTIMPL; +} + const php_stream_ops php_stream_gzio_ops = { php_gziop_write, php_gziop_read, php_gziop_close, php_gziop_flush, @@ -102,7 +117,7 @@ const php_stream_ops php_stream_gzio_ops = { php_gziop_seek, NULL, /* cast */ NULL, /* stat */ - NULL /* set_option */ + php_gziop_set_option /* set_option */ }; php_stream *php_stream_gzopen(php_stream_wrapper *wrapper, const char *path, const char *mode, int options,