summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Gohr <andi@splitbrain.org>2013-08-02 13:44:33 +0200
committerAndreas Gohr <andi@splitbrain.org>2013-08-02 13:45:19 +0200
commit20284fef7eb61e54db0fd854a9172295aa4f8baa (patch)
tree56dfdf38e8db44449f9a72d4245311ce73d9c313
parent363c0a9eb7c11cf712293630c861febb907ce17f (diff)
downloadrpg-20284fef7eb61e54db0fd854a9172295aa4f8baa.tar.gz
rpg-20284fef7eb61e54db0fd854a9172295aa4f8baa.tar.bz2
HTTPClient don't pull too much bytes when no content-length is given
-rw-r--r--_test/tests/inc/httpclient_http.test.php5
-rw-r--r--inc/HTTPClient.php2
2 files changed, 7 insertions, 0 deletions
diff --git a/_test/tests/inc/httpclient_http.test.php b/_test/tests/inc/httpclient_http.test.php
index 522f0790c..43dd4478f 100644
--- a/_test/tests/inc/httpclient_http.test.php
+++ b/_test/tests/inc/httpclient_http.test.php
@@ -122,9 +122,14 @@ class httpclient_http_test extends DokuWikiTest {
function test_maxbody(){
$http = new HTTPClient();
$http->max_bodysize = 250;
+
+ // this should abort completely
$data = $http->get($this->server.'/stream/30');
$this->assertTrue($data === false, 'HTTP response');
+
+ // this should read just the needed bytes
$http->max_bodysize_abort = false;
+ $http->keep_alive = false;
$data = $http->get($this->server.'/stream/30');
$this->assertFalse($data === false, 'HTTP response');
/* should read no more than max_bodysize+1 */
diff --git a/inc/HTTPClient.php b/inc/HTTPClient.php
index 3964c8fbc..b2621bdbb 100644
--- a/inc/HTTPClient.php
+++ b/inc/HTTPClient.php
@@ -463,6 +463,8 @@ class HTTPClient {
}
$r_body = $this->_readData($socket, $length, 'response (content-length limited)', true);
+ }elseif( !isset($this->resp_headers['transfer-encoding']) && $this->max_bodysize && !$this->keep_alive){
+ $r_body = $this->_readData($socket, $this->max_bodysize, 'response (content-length limited)', true);
}else{
// read entire socket
$r_size = 0;