thomascube
2008-09-05 2e6825b2e941e2031f9417676359380a77bba764
Applied mime_decode patch by David Lublink

2 files modified
26 ■■■■ changed files
CHANGELOG 1 ●●●● patch | view | raw | blame | history
program/include/rcube_imap.php 25 ●●●● patch | view | raw | blame | history
CHANGELOG
@@ -5,6 +5,7 @@
----------
- Enable export of address book contacts as vCard
- Respect Content-Location headers in multipart/related messages according to RFC2110 (#1484946)
- Applied mime_decode patch by David Lublink
2008/09/04 (alec)
----------
program/include/rcube_imap.php
@@ -2416,29 +2416,42 @@
   */
  function decode_mime_string($input, $fallback=null)
    {
    // Initialize variable
    $out = '';
    $pos = strpos($input, '=?');
    if ($pos !== false)
      {
    // Iterate instead of recursing, this way if there are too many values we don't have stack overflows
      // rfc: all line breaks or other characters not found 
      // in the Base64 Alphabet must be ignored by decoding software
      // delete all blanks between MIME-lines, differently we can 
      // receive unnecessary blanks and broken utf-8 symbols
      $input = preg_replace("/\?=\s+=\?/", '?==?', $input);
      $out = substr($input, 0, $pos);
    // 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);
  
        // 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);
  
        // Extract the encoded string
      $encstr = substr($input, $pos+2, ($end_pos-$pos-2));
      $rest = substr($input, $end_pos+2);
        // Extract the remaining string
        $input = substr($input, $end_pos+2);
        // Decode the string fragement
      $out .= rcube_imap::_decode_mime_string_part($encstr);
      $out .= rcube_imap::decode_mime_string($rest, $fallback);
      }
      // Deocde the rest (if any)
      if (strlen($input) != 0)
         $out .= rcube_imap::decode_mime_string($input, $fallback);
       // return the results
      return $out;
      }