alecpl
2010-11-10 ad3c273c91ecdae72e14e03a4bc4220d0ebdfa41
- Fix handling of message bodies (quoted-printable encoded) with NULL characters (#1486189)


1 files modified
43 ■■■■■ changed files
program/include/rcube_imap_generic.php 43 ●●●●● patch | view | raw | blame | history
program/include/rcube_imap_generic.php
@@ -2080,6 +2080,7 @@
                }
                $bytes -= $len;
                // BASE64
                if ($mode == 1) {
                    $line = rtrim($line, "\t\r\n\0\x0B");
                    // create chunks with proper length for base64 decoding
@@ -2092,40 +2093,30 @@
                    }
                    else
                        $prev = '';
                    if ($file)
                        fwrite($file, base64_decode($line));
                    else if ($print)
                        echo base64_decode($line);
                    else
                        $result .= base64_decode($line);
                    $line = base64_decode($line);
                // QUOTED-PRINTABLE
                } else if ($mode == 2) {
                    $line = rtrim($line, "\t\r\0\x0B");
                    if ($file)
                        fwrite($file, quoted_printable_decode($line));
                    else if ($print)
                        echo quoted_printable_decode($line);
                    else
                        $result .= quoted_printable_decode($line);
                    $line = quoted_printable_decode($line);
                    // Remove NULL characters (#1486189)
                    $line = str_replace("\x00", '', $line);
                // UUENCODE
                } else if ($mode == 3) {
                    $line = rtrim($line, "\t\r\n\0\x0B");
                    if ($line == 'end' || preg_match('/^begin\s+[0-7]+\s+.+$/', $line))
                        continue;
                    if ($file)
                        fwrite($file, convert_uudecode($line));
                    else if ($print)
                        echo convert_uudecode($line);
                    else
                        $result .= convert_uudecode($line);
                    $line = convert_uudecode($line);
                // default
                } else {
                    $line = rtrim($line, "\t\r\n\0\x0B");
                    if ($file)
                        fwrite($file, $line . "\n");
                    else if ($print)
                        echo $line . "\n";
                    else
                        $result .= $line . "\n";
                    $line = rtrim($line, "\t\r\n\0\x0B") . "\n";
                }
                if ($file)
                    fwrite($file, $line);
                   else if ($print)
                    echo $line;
                else
                    $result .= $line;
            }
        }