Thomas Bruederli
2013-01-18 6d41d8fd4bbd3f8854669fbf2fc5a4910803125a
Fix format=flowed unfolding on quoted lines; added tests for rcube_mime::format_flowed() and rcube_mime::unfold_flowed()
2 files added
2 files modified
55 ■■■■■ changed files
program/lib/Roundcube/rcube_mime.php 3 ●●●● patch | view | raw | blame | history
tests/Framework/Mime.php 22 ●●●●● patch | view | raw | blame | history
tests/src/format-flowed-unfolded.txt 14 ●●●●● patch | view | raw | blame | history
tests/src/format-flowed.txt 16 ●●●●● patch | view | raw | blame | history
program/lib/Roundcube/rcube_mime.php
@@ -480,7 +480,8 @@
                $q = strlen(str_replace(' ', '', $regs[0]));
                $line = substr($line, strlen($regs[0]));
                if ($q == $q_level && $line
                if ($q == $q_level
                    && strlen($line[$last]) > 1  // don't hit if line only consist of one single white space
                    && isset($text[$last])
                    && $text[$last][strlen($text[$last])-1] == ' '
                ) {
tests/Framework/Mime.php
@@ -120,4 +120,26 @@
            $this->assertEquals($item['out'], $res, "Header decoding for: " . $idx);
        }
    }
    /**
     * Test format=flowed unfolding
     */
    function test_format_flowed()
    {
        $raw = file_get_contents(TESTS_DIR . 'src/format-flowed-unfolded.txt');
        $flowed = file_get_contents(TESTS_DIR . 'src/format-flowed.txt');
        $this->assertEquals($flowed, rcube_mime::format_flowed($raw, 80), "Test correct folding and space-stuffing");
    }
    /**
     * Test format=flowed unfolding
     */
    function test_unfold_flowed()
    {
        $flowed = file_get_contents(TESTS_DIR . 'src/format-flowed.txt');
        $unfolded = file_get_contents(TESTS_DIR . 'src/format-flowed-unfolded.txt');
        $this->assertEquals($unfolded, rcube_mime::unfold_flowed($flowed), "Test correct unfolding of quoted lines");
    }
}
tests/src/format-flowed-unfolded.txt
New file
@@ -0,0 +1,14 @@
I'm replying on this with a very long line which is then wrapped and space-stuffed because the draft is saved as format=flowed.
From what's specified in RFC 2646 some lines need to be space-stuffed to avoid muning during transport.
X
On XX.YY.YYYY Y:YY, Somebody wrote:
> This part is a reply wihtout any flowing lines. rcube_mime::unfold_flowed()
> has to be careful with empty quoted lines because they might end with a
> space but still shouldn't be considered as flowed!
>
> The above empty line should persist after unfolding.
> xxxxxxxxxx. xxxx xxxxx xxxxx xxxx xx xx.xx. xxxxxx xxxxxxxxxxxx, xxxx xx
>
> ... and this one as well.
tests/src/format-flowed.txt
New file
@@ -0,0 +1,16 @@
I'm replying on this with a very long line which is then wrapped and
space-stuffed because the draft is saved as format=flowed.
 From what's specified in RFC 2646 some lines need to be space-stuffed to
avoid muning during transport.
X
On XX.YY.YYYY Y:YY, Somebody wrote:
> This part is a reply wihtout any flowing lines. rcube_mime::unfold_flowed()
> has to be careful with empty quoted lines because they might end with a
> space but still shouldn't be considered as flowed!
>
> The above empty line should persist after unfolding.
> xxxxxxxxxx. xxxx xxxxx xxxxx xxxx xx xx.xx. xxxxxx xxxxxxxxxxxx, xxxx xx
>
> ... and this one as well.