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);