com php-src: fix memory leak & add test: ext/standard/http_fo pen_wrapper.c ext/standard/tests/http/bug69337 .phpt
| From: | Stanislav Malyshev | 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