alecpl
2011-04-08 d483cd78988494b207dfa885d17a82ff4c7d39cc
- Fix bug where some content would cause hang on html2text conversion (#1487863) 


2 files modified
31 ■■■■ changed files
CHANGELOG 3 ●●●● patch | view | raw | blame | history
program/lib/html2text.php 28 ●●●● patch | view | raw | blame | history
CHANGELOG
@@ -1,8 +1,9 @@
CHANGELOG Roundcube Webmail
===========================
- Fix bug where some content would cause hang on html2text conversion (#1487863)
- Improve space-stuffing handling in format=flowed messages (#1487861)
- Fixed bug where some dates would produce SQL error in MySQL (#1487856)
- Fix bug where some dates would produce SQL error in MySQL (#1487856)
- Added workaround for some IMAP server with broken STATUS response (#1487859)
- Fix bug where default_charset was not used for text messages (#1487836)
- Enable TinyMCE's contextmenu (#1487014)
program/lib/html2text.php
@@ -572,9 +572,16 @@
     */
    function _convert_pre(&$text)
    {
        // get the content of PRE element
        while (preg_match('/<pre[^>]*>(.*)<\/pre>/ismU', $text, $matches)) {
            $result = preg_replace($this->pre_search, $this->pre_replace, $matches[1]);
            $text = preg_replace('/<pre[^>]*>.*<\/pre>/ismU', '<div><br>' . $result . '<br></div>', $text, 1);
            // convert the content
            $this->pre_content = sprintf('<div><br>%s<br></div>',
                preg_replace($this->pre_search, $this->pre_replace, $matches[1]));
            // replace the content (use callback because content can contain $0 variable)
            $text = preg_replace_callback('/<pre[^>]*>.*<\/pre>/ismU',
                array('html2text', '_preg_pre_callback'), $text, 1);
            // free memory
            $this->pre_content = '';
        }
    }
@@ -639,9 +646,8 @@
     *
     *  @param  array PREG matches
     *  @return string
     *  @access private
     */
    function _preg_callback($matches)
    private function _preg_callback($matches)
    {
        switch($matches[1]) {
        case 'b':
@@ -659,13 +665,23 @@
    }
    /**
     *  Callback function for preg_replace_callback use in PRE content handler.
     *
     *  @param  array PREG matches
     *  @return string
     */
    private function _preg_pre_callback($matches)
    {
        return $this->pre_content;
    }
    /**
     *  Strtoupper multibyte wrapper function
     *
     *  @param  string
     *  @return string
     *  @access private
     */
    function _strtoupper($str)
    private function _strtoupper($str)
    {
        if (function_exists('mb_strtoupper'))
            return mb_strtoupper($str);