From 20284fef7eb61e54db0fd854a9172295aa4f8baa Mon Sep 17 00:00:00 2001
From: Andreas Gohr <andi@splitbrain.org>
Date: Fri, 2 Aug 2013 13:44:33 +0200
Subject: [PATCH] HTTPClient don't pull too much bytes when no content-length
 is given

---
 _test/tests/inc/httpclient_http.test.php | 5 +++++
 inc/HTTPClient.php                       | 2 ++
 2 files changed, 7 insertions(+)

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;
-- 
GitLab