From ee18970580e2ec961b718a9ee647bfe3dbfc9f07 Mon Sep 17 00:00:00 2001 From: Ryan Boren Date: Wed, 23 Jul 2008 18:56:17 +0000 Subject: [PATCH] Work around fatal error caused by mbstring.func_overload = 2. Props codestyling . fixes #5599 for trunk git-svn-id: https://develop.svn.wordpress.org/trunk@8420 602fd350-edb4-49c9-b593-d223f7449a82 --- wp-includes/streams.php | 38 ++++++++++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/wp-includes/streams.php b/wp-includes/streams.php index 924394f171..60b617de8f 100644 --- a/wp-includes/streams.php +++ b/wp-includes/streams.php @@ -58,21 +58,39 @@ class StringReader { function StringReader($str='') { $this->_str = $str; $this->_pos = 0; + // If string functions are overloaded, we need to use the mb versions + $this->is_overloaded = ((ini_get("mbstring.func_overload") & 2) != 0) && function_exists('mb_substr'); + } + + function _substr($string, $start, $length) { + if ($this->is_overloaded) { + return mb_substr($string,$start,$length,'ascii'); + } else { + return substr($string,$start,$length); + } + } + + function _strlen($string) { + if ($this->is_overloaded) { + return mb_strlen($string,'ascii'); + } else { + return strlen($string); + } } function read($bytes) { - $data = substr($this->_str, $this->_pos, $bytes); + $data = $this->_substr($this->_str, $this->_pos, $bytes); $this->_pos += $bytes; - if (strlen($this->_str)<$this->_pos) - $this->_pos = strlen($this->_str); + if ($this->_strlen($this->_str)<$this->_pos) + $this->_pos = $this->_strlen($this->_str); return $data; } function seekto($pos) { $this->_pos = $pos; - if (strlen($this->_str)<$this->_pos) - $this->_pos = strlen($this->_str); + if ($this->_strlen($this->_str)<$this->_pos) + $this->_pos = $this->_strlen($this->_str); return $this->_pos; } @@ -81,9 +99,8 @@ class StringReader { } function length() { - return strlen($this->_str); + return $this->_strlen($this->_str); } - } @@ -149,17 +166,18 @@ class FileReader { // over it (it assumes knowledge of StringReader internals) class CachedFileReader extends StringReader { function CachedFileReader($filename) { + parent::StringReader(); + if (file_exists($filename)) { $length=filesize($filename); $fd = fopen($filename,'rb'); if (!$fd) { - $this->error = 3; // Cannot read file, probably permissions - return false; + $this->error = 3; // Cannot read file, probably permissions + return false; } $this->_str = fread($fd, $length); - $this->_pos = 0; fclose($fd); } else {