From a2cf7c41b97a587d90188b83e4d15da1567a54b4 Mon Sep 17 00:00:00 2001 From: Thomas Bruederli <thomas@roundcube.net> Date: Wed, 09 Apr 2014 02:48:28 -0400 Subject: [PATCH] Fix accidental key replacements --- program/steps/mail/func.inc | 47 ++++++++++++----------------------------------- 1 files changed, 12 insertions(+), 35 deletions(-) diff --git a/program/steps/mail/func.inc b/program/steps/mail/func.inc index 7c9b491..f711da3 100644 --- a/program/steps/mail/func.inc +++ b/program/steps/mail/func.inc @@ -69,8 +69,8 @@ } // remove mbox part from _uid -if (($_uid = get_input_value('_uid', RCUBE_INPUT_GPC)) && preg_match('/^\d+-[^,]+$/', $_uid)) { - list($_uid, $mbox) = explode('-', $_uid); +if (($_uid = rcube_utils::get_input_value('_uid', RCUBE_INPUT_GPC)) && !is_array($_uid) && preg_match('/^\d+-.+/', $_uid)) { + list($_uid, $mbox) = explode('-', $_uid, 2); if (isset($_GET['_uid'])) $_GET['_uid'] = $_uid; if (isset($_POST['_uid'])) $_POST['_uid'] = $_uid; $_REQUEST['_uid'] = $_uid; @@ -185,35 +185,6 @@ 'group-expand' => 'autocomplete.inc', )); - -/** - * Returns message UID(s) and IMAP folder(s) from GET/POST data - * - * @return array List of message UIDs per folder - */ -function rcmail_get_uids() -{ - // message UID (or comma-separated list of IDs) is provided in - // the form of <ID>-<MBOX>[,<ID>-<MBOX>]* - - $_uid = get_input_value('_uid', RCUBE_INPUT_GPC); - $_mbox = (string)get_input_value('_mbox', RCUBE_INPUT_GPC); - - if (is_array($uid)) { - return $uid; - } - - // create a per-folder UIDs array - $result = array(); - foreach (explode(',', $_uid) as $uid) { - list($uid, $mbox) = explode('-', $uid, 2); - if (empty($mbox)) - $mbox = $_mbox; - $result[$mbox][] = $uid; - } - - return $result; -} /** * Returns default search mods @@ -418,9 +389,11 @@ $OUTPUT->command('set_message_coltypes', $a_show_cols, $thead, $smart_col); - if ($multifolder) { + if ($multifolder && $_SESSION['search_scope'] == 'all') { $OUTPUT->command('select_folder', ''); } + + $OUTPUT->set_env('multifolder_listing', $multifolder); if (empty($a_headers)) { return; @@ -1770,7 +1743,8 @@ { $parts = array(); foreach ($p as $key => $val) { - $parts[] = $key . '=' . ($key == 'folder' ? base64_encode($val) : $val); + $encode = $key == 'folder' || strpos($val, ';') !== false; + $parts[] = $key . '=' . ($encode ? 'B::' . base64_encode($val) : $val); } return join('; ', $parts); @@ -1782,7 +1756,10 @@ foreach (preg_split('/;\s+/', $str) as $part) { list($key, $val) = explode('=', $part, 2); - if ($key == 'folder') { + if (strpos($val, 'B::') === 0) { + $val = base64_decode(substr($val, 3)); + } + else if ($key == 'folder') { $val = base64_decode($val); } @@ -2061,7 +2038,7 @@ $ctypes = array('application/', 'multipart/m', 'multipart/signed', 'multipart/report'); // Build search string of "with attachment" filter - $attachment = str_repeat(' OR', count($ctypes)-1); + $attachment = trim(str_repeat(' OR', count($ctypes)-1)); foreach ($ctypes as $type) { $attachment .= ' HEADER Content-Type ' . rcube_imap_generic::escape($type); } -- Gitblit v1.9.1