From: Felipe Pena Date: Mon, 3 Aug 2009 13:16:24 +0000 (+0000) Subject: - Re-fix stream_is_local() memory leaks X-Git-Tag: php-5.3.1RC1~188 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1648ab5750d5307d326a3d82b25961ccc47d386d;p=php - Re-fix stream_is_local() memory leaks --- diff --git a/NEWS b/NEWS index c712d904dd..972749fcae 100644 --- a/NEWS +++ b/NEWS @@ -6,6 +6,7 @@ PHP NEWS - Fixed open_basedir circumvention for mail.log. (Maksymilian Arciemowicz, Stas) - Fixed signature generation/validation for zip archives in ext/phar. (Greg) +- Fixed memory leak in stream_is_local(). (Felipe) - Fixed bug #49132 (posix_times returns false without error). (phpbugs at gunnu dot us) diff --git a/ext/standard/streamsfuncs.c b/ext/standard/streamsfuncs.c index 508a95c9b0..d0282e031d 100644 --- a/ext/standard/streamsfuncs.c +++ b/ext/standard/streamsfuncs.c @@ -1463,8 +1463,17 @@ PHP_FUNCTION(stream_is_local) } wrapper = stream->wrapper; } else { - convert_to_string_ex(&zstream); - wrapper = php_stream_locate_url_wrapper(Z_STRVAL_P(zstream), NULL, 0 TSRMLS_CC); + zval *copy_tmp; + + ALLOC_ZVAL(copy_tmp); + *copy_tmp = *zstream; + zval_copy_ctor(copy_tmp); + INIT_PZVAL(copy_tmp); + convert_to_string(copy_tmp); + + wrapper = php_stream_locate_url_wrapper(Z_STRVAL_P(copy_tmp), NULL, 0 TSRMLS_CC); + + zval_ptr_dtor(©_tmp); } if(!wrapper) { diff --git a/ext/standard/tests/streams/stream_is_local.phpt b/ext/standard/tests/streams/stream_is_local.phpt new file mode 100644 index 0000000000..c90eb19cde --- /dev/null +++ b/ext/standard/tests/streams/stream_is_local.phpt @@ -0,0 +1,17 @@ +--TEST-- +Testing stream_is_local() +--FILE-- + +--EXPECT-- +bool(true) +int(1) +bool(true)