From e53287583e3d804c6be3f37ad232582303bfebf0 Mon Sep 17 00:00:00 2001 From: Yasushi Ichikawa Date: Mon, 31 Oct 2011 18:31:08 +0900 Subject: [PATCH 1/3] return byte length instead of number of characters in Content-Length --- lib/Cake/Network/CakeResponse.php | 5 ++--- lib/Cake/Test/Case/Network/CakeResponseTest.php | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/lib/Cake/Network/CakeResponse.php b/lib/Cake/Network/CakeResponse.php index 41cb0f412..baa97996d 100644 --- a/lib/Cake/Network/CakeResponse.php +++ b/lib/Cake/Network/CakeResponse.php @@ -350,10 +350,9 @@ class CakeResponse { $codeMessage = $this->_statusCodes[$this->_status]; $this->_sendHeader("{$this->_protocol} {$this->_status} {$codeMessage}"); $this->_sendHeader('Content-Type', "{$this->_contentType}; charset={$this->_charset}"); - $shouldSetLength = empty($this->_headers['Content-Length']) && class_exists('Multibyte'); - $shouldSetLength = $shouldSetLength && !in_array($this->_status, range(301, 307)); + $shouldSetLength = empty($this->_headers['Content-Length']) && !in_array($this->_status, range(301, 307)); if ($shouldSetLength && !$this->outputCompressed()) { - $this->_headers['Content-Length'] = mb_strlen($this->_body); + $this->_headers['Content-Length'] = strlen($this->_body); } foreach ($this->_headers as $header => $value) { $this->_sendHeader($header, $value); diff --git a/lib/Cake/Test/Case/Network/CakeResponseTest.php b/lib/Cake/Test/Case/Network/CakeResponseTest.php index c118fd62e..74b29573e 100644 --- a/lib/Cake/Test/Case/Network/CakeResponseTest.php +++ b/lib/Cake/Test/Case/Network/CakeResponseTest.php @@ -396,7 +396,7 @@ class CakeResponseTest extends CakeTestCase { $response->expects($this->at(1)) ->method('_sendHeader')->with('Content-Type', 'text/html; charset=UTF-8'); $response->expects($this->at(2)) - ->method('_sendHeader')->with('Content-Length', mb_strlen($body)); + ->method('_sendHeader')->with('Content-Length', 116); $response->send(); $response = $this->getMock('CakeResponse', array('_sendHeader', '_sendContent', 'outputCompressed')); From f39c683130164e64214eb7e0958763a56eb71748 Mon Sep 17 00:00:00 2001 From: Yasushi Ichikawa Date: Mon, 31 Oct 2011 23:29:59 +0900 Subject: [PATCH 2/3] check mbstring.func_overload before using strlen() --- lib/Cake/Network/CakeResponse.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/Cake/Network/CakeResponse.php b/lib/Cake/Network/CakeResponse.php index baa97996d..55f9df353 100644 --- a/lib/Cake/Network/CakeResponse.php +++ b/lib/Cake/Network/CakeResponse.php @@ -352,7 +352,11 @@ class CakeResponse { $this->_sendHeader('Content-Type', "{$this->_contentType}; charset={$this->_charset}"); $shouldSetLength = empty($this->_headers['Content-Length']) && !in_array($this->_status, range(301, 307)); if ($shouldSetLength && !$this->outputCompressed()) { - $this->_headers['Content-Length'] = strlen($this->_body); + if (ini_get('mbstring.func_overload') & 2 && function_exists('mb_strlen')) { + $this->_headers['Content-Length'] = mb_strlen($this->_body, '8bit'); + } else { + $this->_headers['Content-Length'] = strlen($this->_body); + } } foreach ($this->_headers as $header => $value) { $this->_sendHeader($header, $value); From 4aeb5b461d64092d64e3c7dd69376dc1f044b85b Mon Sep 17 00:00:00 2001 From: Yasushi Ichikawa Date: Mon, 31 Oct 2011 23:47:36 +0900 Subject: [PATCH 3/3] delete App::uses Multibyte class. It is no longer needed. --- lib/Cake/Network/CakeResponse.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/Cake/Network/CakeResponse.php b/lib/Cake/Network/CakeResponse.php index 55f9df353..68401b5cc 100644 --- a/lib/Cake/Network/CakeResponse.php +++ b/lib/Cake/Network/CakeResponse.php @@ -17,8 +17,6 @@ * @license MIT License (http://www.opensource.org/licenses/mit-license.php) */ -App::uses('Multibyte', 'I18n'); - /** * CakeResponse is responsible for managing the response text, status and headers of a HTTP response. *