X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=functions%2Fimap_messages.php;h=00ca7ef83582f04704bf87e34ea0394fce9b5578;hb=cd2b718266525681ee78a3f4eaa77fc30b79180e;hp=076b86c6c3b87eeaa7680c0f02658288de52ce06;hpb=91f68e943315d185d3d6477b46ad824a8fbea769;p=squirrelmail.git diff --git a/functions/imap_messages.php b/functions/imap_messages.php index 076b86c6..00ca7ef8 100755 --- a/functions/imap_messages.php +++ b/functions/imap_messages.php @@ -63,13 +63,34 @@ $res = sqimap_get_small_header_list($imap_stream, array($id), $sent); return $res[0]; } + + // Sort the message list and crunch to be as small as possible + // (overflow could happen, so make it small if possible) + function sqimap_message_list_squisher($messages_array) { + sort($messages_array, SORT_NUMERIC); + $msgs_str = ''; + while ($messages_array) { + $start = array_shift($messages_array); + $end = $start; + while (isset($messages_array[0]) && $messages_array[0] == $end + 1) + $end = array_shift($messages_array); + if ($msgs_str != '') + $msgs_str .= ','; + $msgs_str .= $start; + if ($start != $end) + $msgs_str .= ':' . $end; + } + + return $msgs_str; + } function sqimap_get_small_header_list ($imap_stream, $msg_list, $issent) { + global $squirrelmail_language, $color; /* Get the small headers for each message in $msg_list */ $maxmsg = sizeof($msg_list); - $msgs_str = implode(",", $msg_list); + $msgs_str = sqimap_message_list_squisher($msg_list); $results = array(); $read_list = array(); $sizes_list = array(); @@ -82,10 +103,12 @@ $id2index[$msg_list[$i]] = $i; } + $query = "a001 FETCH $msgs_str BODY.PEEK[HEADER.FIELDS (Date To From Cc Subject Message-Id X-Priority Content-Type)]\r\n"; fputs ($imap_stream, $query); $readin_list = sqimap_read_data_list($imap_stream, "a001", true, $response, $message); + foreach ($readin_list as $r) { if (!eregi("^\\* ([0-9]+) FETCH", $r[0], $regs)) { set_up_language($squirrelmail_language); @@ -96,12 +119,12 @@ echo $r[0] . "
\n"; exit; } - if (!count($id2index[$regs[1]])) { + if (! isset($id2index[$regs[1]]) || !count($id2index[$regs[1]])) { set_up_language($squirrelmail_language); echo "
\n"; echo _("ERROR : Could not complete request."); echo "
\n"; - echo _("Unknown messagenumber in reply from server: "); + echo _("Unknown message number in reply from server: "); echo $regs[1] . "

\n"; exit; } @@ -222,8 +245,7 @@ } function sqimap_get_flags_list ($imap_stream, $msg_list) { - - $msgs_str = implode(",", $msg_list); + $msgs_str = sqimap_message_list_squisher($msg_list); for ($i = 0; $i < sizeof($msg_list); $i++) { $id2index[$msg_list[$i]] = $i; } @@ -233,7 +255,7 @@ for ($i = 0; $i < sizeof($result_list); $i++) { if (eregi("^\\* ([0-9]+).*FETCH.*FLAGS(.*)", $result_list[$i][0], $regs) - && count($id2index[$regs[1]])) { + && isset($id2index[$regs[1]]) && count($id2index[$regs[1]])) { $result_flags[$id2index[$regs[1]]] = explode(" ", trim(ereg_replace('[\\(\\)\\\\]', '', $regs[2]))); } else { set_up_language($squirrelmail_language);