diff --git a/program/lib/Roundcube/rcube_imap.php b/program/lib/Roundcube/rcube_imap.php index 1abbdb61c..d3c71eea3 100644 --- a/program/lib/Roundcube/rcube_imap.php +++ b/program/lib/Roundcube/rcube_imap.php @@ -2931,12 +2931,17 @@ class rcube_imap extends rcube_storage else { // unsubscribe non-existent folders, remove them from the list if (!empty($result) && $name == '*') { - $existing = $this->list_folders($root, $name); - $nonexisting = array_diff($result, $existing); - $result = array_diff($result, $nonexisting); + $existing = $this->list_folders($root, $name); - foreach ($nonexisting as $folder) { - $this->conn->unsubscribe($folder); + // Try to make sure the list of existing folders is not malformed, + // we don't want to unsubscribe existing folders on error + if (is_array($existing) && (!empty($root) || count($existing) > 1)) { + $nonexisting = array_diff($result, $existing); + $result = array_diff($result, $nonexisting); + + foreach ($nonexisting as $folder) { + $this->conn->unsubscribe($folder); + } } } }