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 <ni...@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

Reply via email to