Re: svn: /php/php-src/branches/PHP_5_4/ NEWS ext/zlib/tests/bug61139.phpt ext/zlib/zlib_fopen_wrapper.c
| From: | Hannes Magnusson | Date: | Tue, 01 May 2012 16:58:11 +0000 |
| Subject: | Re: svn: /php/php-src/branches/PHP_5_4/ NEWS ext/zlib/tests/bug61139.phpt ext/zlib/zlib_fopen_wrapper.c | ||
| References: | 1 | Groups: | php.cvs |
| Request: | Send a blank email to php-cvs+get-68910@lists.php.net to get a copy of this message | ||
Why is this test creating the file in the root directory?
And should it be created at all since the function fails?
-Hannes
On Fri, Mar 2, 2012 at 15:16, Nikita Popov <nikic@php.net> wrote:
> nikic Fri, 02 Mar 2012 14:16:47 +0000
>
> Revision:
> http://svn.php.net/viewvc?view=revision&revision=323819
>
> Log:
> Merge: Fix bug #61139: gzopen leaks when specifying invalid mode
>
> Bug: https://bugs.php.net/61139 (Assigned) gzopen leaks when
> specifying invalid mode
>
> Changed paths:
> U php/php-src/branches/PHP_5_4/NEWS
> A php/php-src/branches/PHP_5_4/ext/zlib/tests/bug61139.phpt
> U php/php-src/branches/PHP_5_4/ext/zlib/zlib_fopen_wrapper.c
>
> Modified: php/php-src/branches/PHP_5_4/NEWS
> ===================================================================
> --- php/php-src/branches/PHP_5_4/NEWS 2012-03-02 14:08:11 UTC (rev 323818)
> +++ php/php-src/branches/PHP_5_4/NEWS 2012-03-02 14:16:47 UTC (rev 323819)
> @@ -43,6 +43,9 @@
> - XMLRPC:
> . Fixed bug #61097 (Memory leak in xmlrpc functions copying zvals). (Nikita Popov)
>
> +- Zlib:
> + . Fixed bug #61139 (gzopen leaks when specifying invalid mode). (Nikita Popov)
> +
> 01 Mar 2012, PHP 5.4.0
>
> - Installation:
>
> Added: php/php-src/branches/PHP_5_4/ext/zlib/tests/bug61139.phpt
> ===================================================================
> --- php/php-src/branches/PHP_5_4/ext/zlib/tests/bug61139.phpt
> (rev 0)
> +++ php/php-src/branches/PHP_5_4/ext/zlib/tests/bug61139.phpt 2012-03-02 14:16:47 UTC (rev
> 323819)
> @@ -0,0 +1,14 @@
> +--TEST--
> +Bug #61139 (gzopen leaks when specifying invalid mode)
> +--SKIPIF--
> +<?php
> +if (!extension_loaded('zlib')) {
> + die('skip - zlib extension not loaded');
> +}
> +?>
> +--FILE--
> +<?php
> +
> +gzopen('someFile', 'c');
> +--EXPECTF--
> +Warning: gzopen(): gzopen failed in %s on line %d
>
> Modified: php/php-src/branches/PHP_5_4/ext/zlib/zlib_fopen_wrapper.c
> ===================================================================
> --- php/php-src/branches/PHP_5_4/ext/zlib/zlib_fopen_wrapper.c 2012-03-02 14:08:11 UTC (rev
> 323818)
> +++ php/php-src/branches/PHP_5_4/ext/zlib/zlib_fopen_wrapper.c 2012-03-02 14:16:47 UTC (rev
> 323819)
> @@ -109,7 +109,7 @@
> php_stream *php_stream_gzopen(php_stream_wrapper *wrapper, char *path, char *mode, int
> options,
> char
> **opened_path, php_stream_context *context STREAMS_DC TSRMLS_DC)
> {
> - struct php_gz_stream_data_t *self = {0};
> + struct php_gz_stream_data_t *self;
> php_stream *stream = NULL, *innerstream = NULL;
>
> /* sanity check the stream: it can be either read-only or write-only */
> @@ -120,8 +120,6 @@
> return NULL;
> }
>
> - self = emalloc(sizeof(*self));
> -
> if (strncasecmp("compress.zlib://", path, 16) == 0) {
> path += 16;
> } else if (strncasecmp("zlib:", path, 5) == 0) {
> @@ -134,32 +132,29 @@
> int fd;
>
> if (SUCCESS == php_stream_cast(innerstream, PHP_STREAM_AS_FD, (void **)
> &fd, REPORT_ERRORS)) {
> - self->gz_file = gzdopen(dup(fd), mode);
> + self = emalloc(sizeof(*self));
> self->stream = innerstream;
> - if (self->gz_file) {
> + self->gz_file = gzdopen(dup(fd), mode);
> +
> + if (self->gz_file) {
> stream =
> php_stream_alloc_rel(&php_stream_gzio_ops, self, 0, mode);
> if (stream) {
> stream->flags |=
> PHP_STREAM_FLAG_NO_BUFFER;
> return stream;
> }
> +
> gzclose(self->gz_file);
> }
> +
> + efree(self);
> if (options & REPORT_ERRORS) {
> php_error_docref(NULL TSRMLS_CC, E_WARNING,
> "gzopen failed");
> }
> - } else if (innerstream) {
> - php_stream_close(innerstream);
> }
> - }
>
> - if (stream) {
> - php_stream_close(stream);
> + php_stream_close(innerstream);
> }
> -
> - if (self) {
> - efree(self);
> - }
> -
> +
> return NULL;
> }
>
>
>
> --
> PHP CVS Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php