diff options
-rw-r--r-- | program/include/rcube_content_filter.php | 55 | ||||
-rw-r--r-- | program/include/rcube_html_page.php | 44 | ||||
-rw-r--r-- | program/include/rcube_imap_cache.php | 48 |
3 files changed, 88 insertions, 59 deletions
diff --git a/program/include/rcube_content_filter.php b/program/include/rcube_content_filter.php index 430defec6..cde02ebdb 100644 --- a/program/include/rcube_content_filter.php +++ b/program/include/rcube_content_filter.php @@ -23,33 +23,34 @@ */ class rcube_content_filter extends php_user_filter { - private $buffer = ''; - private $cutoff = 2048; - - function onCreate() - { - $this->cutoff = rand(2048, 3027); - return true; - } - - function filter($in, $out, &$consumed, $closing) - { - while ($bucket = stream_bucket_make_writeable($in)) { - $this->buffer .= $bucket->data; - - // check for evil content and abort - if (preg_match('/<(script|iframe|object)/i', $this->buffer)) - return PSFS_ERR_FATAL; - - // keep buffer small enough - if (strlen($this->buffer) > 4096) - $this->buffer = substr($this->buffer, $this->cutoff); - - $consumed += $bucket->datalen; - stream_bucket_append($out, $bucket); + private $buffer = ''; + private $cutoff = 2048; + + function onCreate() + { + $this->cutoff = rand(2048, 3027); + return true; } - return PSFS_PASS_ON; - } -} + function filter($in, $out, &$consumed, $closing) + { + while ($bucket = stream_bucket_make_writeable($in)) { + $this->buffer .= $bucket->data; + + // check for evil content and abort + if (preg_match('/<(script|iframe|object)/i', $this->buffer)) { + return PSFS_ERR_FATAL; + } + + // keep buffer small enough + if (strlen($this->buffer) > 4096) { + $this->buffer = substr($this->buffer, $this->cutoff); + } + $consumed += $bucket->datalen; + stream_bucket_append($out, $bucket); + } + + return PSFS_PASS_ON; + } +} diff --git a/program/include/rcube_html_page.php b/program/include/rcube_html_page.php index 7d48168ef..ac4fc0b30 100644 --- a/program/include/rcube_html_page.php +++ b/program/include/rcube_html_page.php @@ -52,9 +52,13 @@ class rcube_html_page public function include_script($file, $position='head') { static $sa_files = array(); - - if (!preg_match('|^https?://|i', $file) && $file[0] != '/') - $file = $this->scripts_path . $file . (($fs = @filemtime($this->scripts_path . $file)) ? '?s='.$fs : ''); + + if (!preg_match('|^https?://|i', $file) && $file[0] != '/') { + $file = $this->scripts_path . $file; + if ($fs = @filemtime($file)) { + $file .= '?s=' . $fs; + } + } if (in_array($file, $sa_files)) { return; @@ -65,6 +69,7 @@ class rcube_html_page if (!is_array($this->script_files[$position])) { $this->script_files[$position] = array(); } + $this->script_files[$position][] = $file; } @@ -77,9 +82,10 @@ class rcube_html_page public function add_script($script, $position='head') { if (!isset($this->scripts[$position])) { - $this->scripts[$position] = "\n".rtrim($script); - } else { - $this->scripts[$position] .= "\n".rtrim($script); + $this->scripts[$position] = "\n" . rtrim($script); + } + else { + $this->scripts[$position] .= "\n" . rtrim($script); } } @@ -100,7 +106,7 @@ class rcube_html_page */ public function add_header($str) { - $this->header .= "\n".$str; + $this->header .= "\n" . $str; } /** @@ -111,7 +117,7 @@ class rcube_html_page */ public function add_footer($str) { - $this->footer .= "\n".$str; + $this->footer .= "\n" . $str; } /** @@ -262,7 +268,8 @@ class rcube_html_page ) { $css = ''; foreach ($this->css_files as $file) { - $css .= html::tag('link', array('rel' => 'stylesheet', 'type' => 'text/css', 'href' => $file, 'nl' => true)); + $css .= html::tag('link', array('rel' => 'stylesheet', + 'type' => 'text/css', 'href' => $file, 'nl' => true)); } $output = substr_replace($output, $css, $pos, 0); } @@ -279,10 +286,12 @@ class rcube_html_page // trigger hook with final HTML content to be sent $hook = rcmail::get_instance()->plugins->exec_hook("send_page", array('content' => $output)); if (!$hook['abort']) { - if ($this->charset != RCMAIL_CHARSET) + if ($this->charset != RCMAIL_CHARSET) { echo rcube_charset_convert($hook['content'], RCMAIL_CHARSET, $this->charset); - else + } + else { echo $hook['content']; + } } } @@ -296,14 +305,17 @@ class rcube_html_page $file = $matches[3]; // correct absolute paths - if ($file[0] == '/') + if ($file[0] == '/') { $file = $this->base_path . $file; + } // add file modification timestamp - if (preg_match('/\.(js|css)$/', $file)) - $file .= '?s=' . @filemtime($file); + if (preg_match('/\.(js|css)$/', $file)) { + if ($fs = @filemtime($file)) { + $file .= '?s=' . $fs; + } + } - return sprintf("%s=%s%s%s", $matches[1], $matches[2], $file, $matches[4]); + return $matches[1] . '=' . $matches[2] . $file . $matches[4]; } } - diff --git a/program/include/rcube_imap_cache.php b/program/include/rcube_imap_cache.php index 58336da4e..5eca539ac 100644 --- a/program/include/rcube_imap_cache.php +++ b/program/include/rcube_imap_cache.php @@ -120,8 +120,9 @@ class rcube_imap_cache */ function get_index($mailbox, $sort_field = null, $sort_order = null, $existing = false) { - if (empty($this->icache[$mailbox])) + if (empty($this->icache[$mailbox])) { $this->icache[$mailbox] = array(); + } $sort_order = strtoupper($sort_order) == 'ASC' ? 'ASC' : 'DESC'; @@ -226,8 +227,9 @@ class rcube_imap_cache */ function get_thread($mailbox) { - if (empty($this->icache[$mailbox])) + if (empty($this->icache[$mailbox])) { $this->icache[$mailbox] = array(); + } // Seek in internal cache if (array_key_exists('thread', $this->icache[$mailbox])) { @@ -404,16 +406,19 @@ class rcube_imap_cache */ function add_message($mailbox, $message, $force = false) { - if (!is_object($message) || empty($message->uid)) + if (!is_object($message) || empty($message->uid)) { return; + } $msg = serialize($this->db->encode(clone $message)); $flags = 0; if (!empty($message->flags)) { - foreach ($this->flags as $idx => $flag) - if (!empty($message->flags[$flag])) + foreach ($this->flags as $idx => $flag) { + if (!empty($message->flags[$flag])) { $flags += $idx; + } + } } unset($msg->flags); @@ -428,8 +433,9 @@ class rcube_imap_cache ." AND uid = ?", $flags, $msg, $this->userid, $mailbox, (int) $message->uid); - if ($this->db->affected_rows()) + if ($this->db->affected_rows()) { return; + } } // insert new record @@ -524,27 +530,30 @@ class rcube_imap_cache // The index should be only removed from database when // UIDVALIDITY was detected or the mailbox is empty // otherwise use 'valid' flag to not loose HIGHESTMODSEQ value - if ($remove) + if ($remove) { $this->db->query( "DELETE FROM ".get_table_name('cache_index') ." WHERE user_id = ".intval($this->userid) .(strlen($mailbox) ? " AND mailbox = ".$this->db->quote($mailbox) : "") ); - else + } + else { $this->db->query( "UPDATE ".get_table_name('cache_index') ." SET valid = 0" ." WHERE user_id = ".intval($this->userid) .(strlen($mailbox) ? " AND mailbox = ".$this->db->quote($mailbox) : "") ); + } if (strlen($mailbox)) { unset($this->icache[$mailbox]['index']); // Index removed, set flag to skip SELECT query in get_index() $this->icache[$mailbox]['index_queried'] = true; } - else + else { $this->icache = array(); + } } @@ -566,8 +575,9 @@ class rcube_imap_cache // Thread data removed, set flag to skip SELECT query in get_thread() $this->icache[$mailbox]['thread_queried'] = true; } - else + else { $this->icache = array(); + } } @@ -672,19 +682,21 @@ class rcube_imap_cache ); $data = implode('@', $data); - if ($exists) + if ($exists) { $sql_result = $this->db->query( "UPDATE ".get_table_name('cache_index') ." SET data = ?, valid = 1, changed = ".$this->db->now() ." WHERE user_id = ?" ." AND mailbox = ?", $data, $this->userid, $mailbox); - else + } + else { $sql_result = $this->db->query( "INSERT INTO ".get_table_name('cache_index') ." (user_id, mailbox, data, valid, changed)" ." VALUES (?, ?, ?, 1, ".$this->db->now().")", $this->userid, $mailbox, $data); + } } @@ -701,19 +713,21 @@ class rcube_imap_cache ); $data = implode('@', $data); - if ($exists) + if ($exists) { $sql_result = $this->db->query( "UPDATE ".get_table_name('cache_thread') ." SET data = ?, changed = ".$this->db->now() ." WHERE user_id = ?" ." AND mailbox = ?", $data, $this->userid, $mailbox); - else + } + else { $sql_result = $this->db->query( "INSERT INTO ".get_table_name('cache_thread') ." (user_id, mailbox, data, changed)" ." VALUES (?, ?, ?, ".$this->db->now().")", $this->userid, $mailbox, $data); + } } @@ -1023,9 +1037,11 @@ class rcube_imap_cache if ($message) { $message->flags = array(); - foreach ($this->flags as $idx => $flag) - if (($sql_arr['flags'] & $idx) == $idx) + foreach ($this->flags as $idx => $flag) { + if (($sql_arr['flags'] & $idx) == $idx) { $message->flags[$flag] = true; + } + } } return $message; |