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