From ce2e891f217e72419a58f574779845bdfc877ea4 Mon Sep 17 00:00:00 2001 From: alec Date: Wed, 19 Nov 2008 14:33:35 +0000 Subject: - Fix handling of some malformed messages (#1484438) git-svn-id: https://svn.roundcube.net/trunk@2066 208e9e7b-5314-0410-a742-e7e81cd9613c --- roundcubemail/CHANGELOG | 4 ++++ roundcubemail/program/lib/imap.inc | 26 ++++---------------------- 2 files changed, 8 insertions(+), 22 deletions(-) diff --git a/roundcubemail/CHANGELOG b/roundcubemail/CHANGELOG index b7e236d16..8a6379253 100644 --- a/roundcubemail/CHANGELOG +++ b/roundcubemail/CHANGELOG @@ -1,6 +1,10 @@ CHANGELOG RoundCube Webmail --------------------------- +2008/11/19 (alec) +---------- +- Fix handling of some malformed messages (#1484438) + 2008/11/15 (alec) ---------- - Fix big memory consumption and speed up searching on servers without SORT capability diff --git a/roundcubemail/program/lib/imap.inc b/roundcubemail/program/lib/imap.inc index fb971db68..316980ca5 100644 --- a/roundcubemail/program/lib/imap.inc +++ b/roundcubemail/program/lib/imap.inc @@ -70,6 +70,7 @@ - fixed iil_C_Sort() to support very long and/or divided responses - added BYE response simple support for endless loop prevention - added 3rd argument in iil_StartsWith* functions + - fix iil_C_FetchPartHeader() in some cases by use of iil_C_HandlePartBody() ********************************************************/ @@ -2368,33 +2369,14 @@ function iil_C_UnSubscribe(&$conn, $folder) { } function iil_C_FetchPartHeader(&$conn, $mailbox, $id, $part) { - $fp = $conn->fp; - $result = false; - if (($part == 0) || (empty($part))) { + + if (empty($part)) { $part = 'HEADER'; } else { $part .= '.MIME'; } - if (iil_C_Select($conn, $mailbox)) { - $key = 'fh' . ($c++); - $request = $key . " FETCH $id (BODY.PEEK[$part])"; - if (!iil_PutLine($fp, $request)) return false; - do { - $line = chop(iil_ReadLine($fp, 200)); - $a = explode(' ', $line); - if (($line[0] == '*') && ($a[2] == 'FETCH') - && ($line[strlen($line)-1] != ')')) { - $line=iil_ReadLine($fp, 300); - while (trim($line) != ')') { - $result .= $line; - $line=iil_ReadLine($fp, 300); - } - } - } while (strcmp($a[0], $key) != 0 && ($a[0] != '*' || $a[1] != 'BYE')); - } - - return $result; + return iil_C_HandlePartBody(&$conn, $mailbox, $id, $part, 1); } function iil_C_HandlePartBody(&$conn, $mailbox, $id, $part, $mode, $file=NULL) { -- cgit v1.2.3