X-Git-Url: https://vcs.fsf.org/?p=squirrelmail.git;a=blobdiff_plain;f=functions%2Fmime.php;h=823f1b149888698131da2aa685fa4ec4ce6cebd4;hp=81cf581cb6c17f2ca557afba60d86a5d5b0865f1;hb=b75d343f93cf80a8e74ece472b69f0c38bff8d09;hpb=ef30bf506ea3b18f1f743f68984a40b3c9f1945f diff --git a/functions/mime.php b/functions/mime.php index 81cf581c..823f1b14 100644 --- a/functions/mime.php +++ b/functions/mime.php @@ -362,11 +362,31 @@ if (!$ent_id) $ent_id = 1; fputs ($imap_stream, "a001 FETCH $id BODY[$ent_id]\r\n"); - $topline = fgets ($imap_stream, 1024); - $size = substr ($topline, strpos($topline, "{")+1); - $size = substr ($size, 0, strpos($size, "}")); - $read = fread ($imap_stream, $size); - return $read; + $data = sqimap_read_data ($imap_stream, 'a001', true, $response, $message); + $topline = array_shift($data); + while (! ereg('\* [0-9]+ FETCH ', $topline) && data) + $topline = array_shift($data); + $wholemessage = implode('', $data); + + if (ereg('\{([^\}]*)\}', $topline, $regs)) { + return substr($wholemessage, 0, $regs[1]); + } + else if (ereg('"([^"]*)"', $topline, $regs)) { + return $regs[1]; + } + + $str = "Body retrival error. Please report this bug!\n"; + $str .= "Response: $response\n"; + $str .= "Message: $message\n"; + $str .= "FETCH line: $topline"; + $str .= "---------------\n$wholemessage"; + foreach ($data as $d) + { + $str .= htmlspecialchars($d) . "\n"; + } + return $str; + + return "Body retrival error, please report this bug!\n\nTop line is \"$topline\"\n"; } /* -[ END MIME DECODING ]----------------------------------------------------------- */ @@ -452,7 +472,7 @@ // If there are other types that shouldn't be formatted, add // them here - if ($message->header->type1 != "html") { + if ($body_message->header->type1 != "html") { translateText($body, $wrap_at, $body_message->header->charset); } @@ -596,7 +616,7 @@ $replace = ereg_replace("_", " ", $res[3]); // Convert lowercase Quoted Printable to uppercase for // quoted_printable_decode to understand it. - while (ereg("(=([0-9][a-f])|([a-f][0-9])|([a-f][0-9]))", $replace, $res)) { + while (ereg("(=([0-9][abcdef])|([abcdef][0-9])|([abcdef][abcdef]))", $replace, $res)) { $replace = str_replace($res[1], strtoupper($res[1]), $replace); } $replace = quoted_printable_decode($replace); @@ -620,7 +640,7 @@ global $default_charset; // Encode only if the string contains 8-bit characters or =? - if (ereg("([\200-\377])|=\\?", $string)) { + if (ereg("([\200-\377]|=\\?)", $string)) { $newstring = "=?$default_charset?Q?"; // First the special characters @@ -629,11 +649,11 @@ $string = str_replace("_", "=5F", $string); $string = str_replace(" ", "_", $string); - - while (ereg("([\200-\377])", $string, $regs)) { - $replace = $regs[1]; - $insert = "=" . strtoupper(bin2hex($replace)); + for ( $ch = 127 ; $ch <= 255 ; $ch++ ) { + $replace = chr($ch); + $insert = sprintf("=%02X", $ch); $string = str_replace($replace, $insert, $string); + $ch++; } $newstring = "=?$default_charset?Q?".$string."?=";