diff --git a/pandora_console/ChangeLog b/pandora_console/ChangeLog index 055ca0744c..fc41eb4a63 100644 --- a/pandora_console/ChangeLog +++ b/pandora_console/ChangeLog @@ -1,3 +1,7 @@ +2011-02-22 Sancho Lerena + + * include/streams.php: Fixed bug 3184746. + 2011-02-22 Sergio Martin * include/languages/et.mo diff --git a/pandora_console/include/streams.php b/pandora_console/include/streams.php index e7c6a91d7a..daf6971ac0 100644 --- a/pandora_console/include/streams.php +++ b/pandora_console/include/streams.php @@ -1,185 +1,211 @@ -. - - This file is part of PHP-gettext. - - PHP-gettext is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - PHP-gettext is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with PHP-gettext; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -*/ - -/** - * Simple class to wrap file streams, string streams, etc. - * seek is essential, and it should be byte stream - * @package Include - * @subpackage Streams - */ -class StreamReader { - // should return a string [FIXME: perhaps return array of bytes?] - function read($bytes) { - return false; - } - - // should return new position - function seekto($position) { - return false; - } - - // returns current position - function currentpos() { - return false; - } - - // returns length of entire stream (limit for seekto()s) - function length() { - return false; - } -} - -/** - * @package Include - * @subpackage Streams - */ -class StringReader { - var $_pos; - var $_str; - - function StringReader($str='') { - $this->_str = $str; - $this->_pos = 0; - } - - function read($bytes) { - $data = substr($this->_str, $this->_pos, $bytes); - $this->_pos += $bytes; - if (strlen($this->_str)<$this->_pos) - $this->_pos = strlen($this->_str); - - return $data; - } - - function seekto($pos) { - $this->_pos = $pos; - if (strlen($this->_str)<$this->_pos) - $this->_pos = strlen($this->_str); - return $this->_pos; - } - - function currentpos() { - return $this->_pos; - } - - function length() { - return strlen($this->_str); - } - -} - -/** - * @package Include - * @subpackage Streams - */ -class FileReader { - var $_pos; - var $_fd; - var $_length; - - function FileReader($filename) { - if (file_exists($filename)) { - - $this->_length=filesize($filename); - $this->_pos = 0; - $this->_fd = fopen($filename,'rb'); - if (!$this->_fd) { - $this->error = 3; // Cannot read file, probably permissions - return false; - } - } else { - $this->error = 2; // File doesn't exist - return false; - } - } - - function read($bytes) { - if ($bytes) { - fseek($this->_fd, $this->_pos); - - // PHP 5.1.1 does not read more than 8192 bytes in one fread() - // the discussions at PHP Bugs suggest it's the intended behaviour - while ($bytes > 0) { - $chunk = fread($this->_fd, $bytes); - $data .= $chunk; - $bytes -= strlen($chunk); - } - $this->_pos = ftell($this->_fd); - - return $data; - } else return ''; - } - - function seekto($pos) { - fseek($this->_fd, $pos); - $this->_pos = ftell($this->_fd); - return $this->_pos; - } - - function currentpos() { - return $this->_pos; - } - - function length() { - return $this->_length; - } - - function close() { - fclose($this->_fd); - } - -} - -/** - * Preloads entire file in memory first, then creates a StringReader - * over it (it assumes knowledge of StringReader internals) - * @package Include - * @subpackage Streams - */ -class CachedFileReader extends StringReader { - function CachedFileReader($filename) { - if (file_exists($filename)) { - - $length=filesize($filename); - $fd = fopen($filename,'rb'); - - if (!$fd) { - $this->error = 3; // Cannot read file, probably permissions - return false; - } - $this->_str = fread($fd, $length); - fclose($fd); - - } else { - $this->error = 2; // File doesn't exist - return false; - } - } -} - - -?> \ No newline at end of file +. + + This file is part of PHP-gettext. + + PHP-gettext is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + PHP-gettext is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PHP-gettext; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + */ + + //------------------------------------ BUGFIX related to WordPress 2.5.x upto 2.6.0 ----------------------------------------------------------- + // all contained patches have been marked with BUGFIX-HR handling the the issues of "mbstring.func_overload = x" + // where x & 2 != 0 (str* function overloads) + // this bug at WordPress forces any translation file to fail with gettext / unpack errors and maximum runtime exceeded fatal stop + // Autor: Heiko Rabe info@code-styling.de + //------------------------------------------------------------------------------------------------------------------------------------------------------------- + +// Simple class to wrap file streams, string streams, etc. +// seek is essential, and it should be byte stream +class StreamReader { + // should return a string [FIXME: perhaps return array of bytes?] + function read($bytes) { + return false; + } + + // should return new position + function seekto($position) { + return false; + } + + // returns current position + function currentpos() { + return false; + } + + // returns length of entire stream (limit for seekto()s) + function length() { + return false; + } +} + +class StringReader { + var $_pos; + var $_str; + + function StringReader($str='') { + $this->_str = $str; + $this->_pos = 0; + //BUGFIX-HR: 2008-07-21 we have to detect, if we need mb_str* functions instead of normal functions ! + $this->is_overloaded = ((ini_get("mbstring.func_overload") & 2) != 0) && function_exists('mb_substr'); + } + + function read($bytes) { + //BUGFIX-HR: 2008-07-21 if we are overloaded, use the mb_str* functions + if ($this->is_overloaded) return $this->mb_read($bytes); + $data = substr($this->_str, $this->_pos, $bytes); + $this->_pos += $bytes; + if (strlen($this->_str)<$this->_pos) + $this->_pos = strlen($this->_str); + + return $data; + } + + //BUGFIX-HR: 2008-07-21 corresponding multi byte method + function mb_read($bytes) { + $data = mb_substr($this->_str, $this->_pos, $bytes, 'ascii'); + $this->_pos += $bytes; + if (mb_strlen($this->_str, 'ascii')<$this->_pos) + $this->_pos = mb_strlen($this->_str, 'ascii'); + + return $data; + } + + function seekto($pos) { + //BUGFIX-HR: 2008-07-21 if we are overloaded, use the mb_str* functions + if ($this->is_overloaded) return $this->mb_seekto($pos); + $this->_pos = $pos; + if (strlen($this->_str)<$this->_pos) + $this->_pos = strlen($this->_str); + return $this->_pos; + } + + //BUGFIX-HR: 2008-07-21 corresponding multi byte method + function mb_seekto($pos) { + $this->_pos = $pos; + if (mb_strlen($this->_str, 'ascii')<$this->_pos) + $this->_pos = mb_strlen($this->_str, 'ascii'); + return $this->_pos; + } + + function currentpos() { + return $this->_pos; + } + + function length() { + //BUGFIX-HR: 2008-07-21 if we are overloaded, use the mb_str* functions + if ($this->is_overloaded) return $this->mb_length(); + return strlen($this->_str); + } + + //BUGFIX-HR: 2008-07-21 corresponding multi byte method + function mb_length() { + return mb_strlen($this->str, 'ascii'); + } + +} + + +class FileReader { + var $_pos; + var $_fd; + var $_length; + + function FileReader($filename) { + if (file_exists($filename)) { + + $this->_length=filesize($filename); + $this->_pos = 0; + $this->_fd = fopen($filename,'rb'); + if (!$this->_fd) { + $this->error = 3; // Cannot read file, probably permissions + return false; + } + } else { + $this->error = 2; // File doesn't exist + return false; + } + } + + function read($bytes) { + if ($bytes) { + fseek($this->_fd, $this->_pos); + + // PHP 5.1.1 does not read more than 8192 bytes in one fread() + // the discussions at PHP Bugs suggest it's the intended behaviour + while ($bytes > 0) { + $chunk = fread($this->_fd, $bytes); + $data .= $chunk; + $bytes -= strlen($chunk); + } + $this->_pos = ftell($this->_fd); + + return $data; + } else return ''; + } + + function seekto($pos) { + fseek($this->_fd, $pos); + $this->_pos = ftell($this->_fd); + return $this->_pos; + } + + function currentpos() { + return $this->_pos; + } + + function length() { + return $this->_length; + } + + function close() { + fclose($this->_fd); + } + +} + +// Preloads entire file in memory first, then creates a StringReader +// over it (it assumes knowledge of StringReader internals) +class CachedFileReader extends StringReader { + function CachedFileReader($filename) { + parent::StringReader(); //BUGFIX-HR: 2008-07-21 missing parent constructor call + if (file_exists($filename)) { + + $length=filesize($filename); + $fd = fopen($filename,'rb'); + + if (!$fd) { + $this->error = 3; // Cannot read file, probably permissions + return false; + } + $this->_str = fread($fd, $length); +//BUGFIX-HR: 2008-07-21 not longer nessessary, cause parent contructor properly called now +// $this->_pos = 0; + fclose($fd); + + } else { + $this->error = 2; // File doesn't exist + return false; + } + } +} + + +?>