Applied mime_decode patch by David Lublink

release-0.6
thomascube 16 years ago
parent a6d7a9f791
commit 2e6825b2e9

@ -5,6 +5,7 @@ CHANGELOG RoundCube Webmail
---------- ----------
- Enable export of address book contacts as vCard - Enable export of address book contacts as vCard
- Respect Content-Location headers in multipart/related messages according to RFC2110 (#1484946) - Respect Content-Location headers in multipart/related messages according to RFC2110 (#1484946)
- Applied mime_decode patch by David Lublink
2008/09/04 (alec) 2008/09/04 (alec)
---------- ----------

@ -2416,31 +2416,44 @@ class rcube_imap
*/ */
function decode_mime_string($input, $fallback=null) function decode_mime_string($input, $fallback=null)
{ {
// Initialize variable
$out = ''; $out = '';
$pos = strpos($input, '=?'); // Iterate instead of recursing, this way if there are too many values we don't have stack overflows
if ($pos !== false) // rfc: all line breaks or other characters not found
{ // in the Base64 Alphabet must be ignored by decoding software
// rfc: all line breaks or other characters not found // delete all blanks between MIME-lines, differently we can
// in the Base64 Alphabet must be ignored by decoding software // receive unnecessary blanks and broken utf-8 symbols
// delete all blanks between MIME-lines, differently we can $input = preg_replace("/\?=\s+=\?/", '?==?', $input);
// receive unnecessary blanks and broken utf-8 symbols
$input = preg_replace("/\?=\s+=\?/", '?==?', $input); // Check if there is stuff to decode
if (strpos($input, '=?') !== false) {
// Loop through the string to decode all occurences of =? ?= into the variable $out
while(($pos = strpos($input, '=?')) !== false) {
// Append everything that is before the text to be decoded
$out .= substr($input, 0, $pos);
$out = substr($input, 0, $pos); // Get the location of the text to decode
$end_cs_pos = strpos($input, "?", $pos+2);
$end_en_pos = strpos($input, "?", $end_cs_pos+1);
$end_pos = strpos($input, "?=", $end_en_pos+1);
$end_cs_pos = strpos($input, "?", $pos+2); // Extract the encoded string
$end_en_pos = strpos($input, "?", $end_cs_pos+1); $encstr = substr($input, $pos+2, ($end_pos-$pos-2));
$end_pos = strpos($input, "?=", $end_en_pos+1); // Extract the remaining string
$input = substr($input, $end_pos+2);
$encstr = substr($input, $pos+2, ($end_pos-$pos-2)); // Decode the string fragement
$rest = substr($input, $end_pos+2); $out .= rcube_imap::_decode_mime_string_part($encstr);
}
$out .= rcube_imap::_decode_mime_string_part($encstr); // Deocde the rest (if any)
$out .= rcube_imap::decode_mime_string($rest, $fallback); if (strlen($input) != 0)
$out .= rcube_imap::decode_mime_string($input, $fallback);
// return the results
return $out; return $out;
} }
// no encoding information, use fallback // no encoding information, use fallback
return rcube_charset_convert($input, return rcube_charset_convert($input,

Loading…
Cancel
Save