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

From: Date: Wed, 15 Apr 2015 08:18:35 +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-86260@lists.php.net to get a copy of this message
Commit: 1e273d1833dce213513f65744220cc91a402e334 Author: Stanislav Malyshev <stas@php.net> Sun, 12 Apr 2015 22:00:18 -0700 Committer: Julien Pauli <jpauli@php.net> Wed, 15 Apr 2015 10:18:35 +0200 Parents: 9ae865e10839fa4a8b2aaae166489ad9b771ca99 Branches: PHP-5.5.24 Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=1e273d1833dce213513f65744220cc91a402e334 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 3a53ae4..95f9cb5 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 (#86260) next »