diff options
author | Andreas Gohr <andi@splitbrain.org> | 2013-08-02 13:44:33 +0200 |
---|---|---|
committer | Andreas Gohr <andi@splitbrain.org> | 2013-08-02 21:50:16 +0200 |
commit | 5b230a45afb9bb825ba148e699bdcbfc57957fb4 (patch) | |
tree | a99659b2af3fcfde08dbbe2a0a6d194c81083494 | |
parent | 18ce55ed82c3241469c3b29caef3a5c21c501d68 (diff) | |
download | rpg-5b230a45afb9bb825ba148e699bdcbfc57957fb4.tar.gz rpg-5b230a45afb9bb825ba148e699bdcbfc57957fb4.tar.bz2 |
HTTPClient don't pull too much bytes when no content-length is given
-rw-r--r-- | _test/tests/inc/httpclient_http.test.php | 5 | ||||
-rw-r--r-- | inc/HTTPClient.php | 2 |
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; |