com php-src: fix memory leak & add test: ext/standard/http_fo pen_wrapper.c ext/standard/tests/http/bug69337 .phpt

From: Date: Mon, 13 Apr 2015 05:38:34 +0000
Subject: com php-src: fix memory leak & add test: ext/standard/http_fo pen_wrapper.c ext/standard/tests/http/bug69337 .phpt
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-86176@lists.php.net to get a copy of this message
Commit: 45facd15fb1be704ee1ae374fa306dad8450edbd Author: Stanislav Malyshev <stas@php.net> Sun, 12 Apr 2015 22:00:18 -0700 Parents: a643ccfb90750e0d830106588d2a46af87706b5b Branches: PHP-5.4 Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=45facd15fb1be704ee1ae374fa306dad8450edbd Log: fix memory leak & add test Changed paths: M ext/standard/http_fopen_wrapper.c A ext/standard/tests/http/bug69337.phpt Diff: diff --git a/ext/standard/http_fopen_wrapper.c b/ext/standard/http_fopen_wrapper.c index 9c99496..bd64287 100644 --- a/ext/standard/http_fopen_wrapper.c +++ b/ext/standard/http_fopen_wrapper.c @@ -922,8 +922,13 @@ out: if (transfer_encoding) { php_stream_filter_append(&stream->readfilters, transfer_encoding); } - } else if (transfer_encoding) { - php_stream_filter_free(transfer_encoding TSRMLS_CC); + } else { + if(response_header) { + Z_DELREF_P(response_header); + } + if (transfer_encoding) { + php_stream_filter_free(transfer_encoding TSRMLS_CC); + } } return stream; diff --git a/ext/standard/tests/http/bug69337.phpt b/ext/standard/tests/http/bug69337.phpt new file mode 100644 index 0000000..1451d4b --- /dev/null +++ b/ext/standard/tests/http/bug69337.phpt @@ -0,0 +1,41 @@ +--TEST-- +Bug #69337 (Stream context leaks when http request fails) +--SKIPIF-- +<?php require 'server.inc'; http_server_skipif('tcp://127.0.0.1:22345'); ?> +--INI-- +allow_url_fopen=1 +allow_url_include=1 +--FILE-- +<?php +require 'server.inc'; + +function stream_notification_callback($notification_code, $severity, $message, $message_code, $bytes_transferred, $bytes_max) +{ + if($notification_code == STREAM_NOTIFY_REDIRECTED) { + // $http_response_header is now a string, but will be used as an array + // by php_stream_url_wrap_http_ex() later on + $GLOBALS['http_response_header'] = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\0\0\0\0"; + } +} + +$ctx = stream_context_create(); +stream_context_set_params($ctx, array("notification" => "stream_notification_callback")); + +$responses = array( + "data://text/plain,HTTP/1.0 302 Found\r\nLocation: http://127.0.0.1:22345/try-again\r\n\r\n", + "data://text/plain,HTTP/1.0 404 Not Found\r\n\r\n", +); + +$pid = http_server("tcp://127.0.0.1:22345", $responses, $output); + +$f = file_get_contents('http://127.0.0.1:22345/', 0, $ctx); + +http_server_kill($pid); +var_dump($f); +?> +==DONE== +--EXPECTF-- +string(26) "HTTP/1.0 404 Not Found + +" +==DONE== \ No newline at end of file

« previous php.cvs (#86176) next »