@matheusbsbs / matheus-bagliano / commits / 353aaf2fa1
Fork 0

mailinfo: correctly handle multiline 'Subject:' header

When native language (RU) is in use, subject header usually contains several parts, e.g. Subject: [Navy-patches] [PATCH] =?utf-8?b?0JjQt9C80LXQvdGR0L0g0YHQv9C40YHQvtC6INC/0LA=?= =?utf-8?b?0LrQtdGC0L7QsiDQvdC10L7QsdGF0L7QtNC40LzRi9GFINC00LvRjyA=?= =?utf-8?b?0YHQsdC+0YDQutC4?= This exposes several bugs in builtin-mailinfo.c: 1. decode_b_segment: do not append explicit NUL -- explicit NUL was preventing correct header construction on parts concatenation via strbuf_addbuf in decode_header_bq. Fixes: -Subject: Изменён список пакетов необходимых для сборки +Subject: Изменён список па Then 2. Do not emit '\n' between "encoded-word" where RFC2046 says that linear white space between them are ignored when displaying. Fixes: -Subject: Изменён список пакетов необходимых для сборки +Subject: Изменён список па кетов необходимых для сборки Signed-off-by: Kirill Smelkov <kirr@mns.spb.ru> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Kirill Smelkov committed Jan 8, 2009 at 01:43 UTC 353aaf2fa136d34db64d1e4af12cc12431466a9e
6 files changed +114 -9
builtin-mailinfo.c
+19 -8
@@ -430,13 +430,6 @@ static struct strbuf *decode_b_segment(const struct strbuf *b_seg)
430 c -= 'a' - 26;
431 else if ('0' <= c && c <= '9')
432 c -= '0' - 52;
433 - else if (c == '=') {
434 - /* padding is almost like (c == 0), except we do
435 - * not output NUL resulting only from it;
436 - * for now we just trust the data.
437 - */
438 - c = 0;
439 - }
433 else
434 continue; /* garbage */
435 switch (pos++) {
@@ -514,7 +507,25 @@ static int decode_header_bq(struct strbuf *it)
507 rfc2047 = 1;
508
509 if (in != ep) {
517 - strbuf_add(&outbuf, in, ep - in);
510 + /*
511 + * We are about to process an encoded-word
512 + * that begins at ep, but there is something
513 + * before the encoded word.
514 + */
515 + char *scan;
516 + for (scan = in; scan < ep; scan++)
517 + if (!isspace(*scan))
518 + break;
519 +
520 + if (scan != ep || in == it->buf) {
521 + /*
522 + * We should not lose that "something",
523 + * unless we have just processed an
524 + * encoded-word, and there is only LWS
525 + * before the one we are about to process.
526 + */
527 + strbuf_add(&outbuf, in, ep - in);
528 + }
529 in = ep;
530 }
531 /* E.g.
t/t5100-mailinfo.sh
+1 -1
@@ -11,7 +11,7 @@ test_expect_success 'split sample box' \
11 'git mailsplit -o. ../t5100/sample.mbox >last &&
12 last=`cat last` &&
13 echo total is $last &&
14 - test `cat last` = 11'
14 + test `cat last` = 12'
15
16 for mail in `echo 00*`
17 do
t/t5100/info0012 new
+5
@@ -0,0 +1,5 @@
1 +Author: Dmitriy Blinov
2 +Email: bda@mnsspb.ru
3 +Subject: Изменён список пакетов необходимых для сборки
4 +Date: Wed, 12 Nov 2008 17:54:41 +0300
5 +
t/t5100/msg0012 new
+7
@@ -0,0 +1,7 @@
1 +textlive-* исправлены на texlive-*
2 +docutils заменён на python-docutils
3 +
4 +Действительно, оказалось, что rest2web вытягивает за собой
5 +python-docutils. В то время как сам rest2web не нужен.
6 +
7 +Signed-off-by: Dmitriy Blinov <bda@mnsspb.ru>
t/t5100/patch0012 new
+30
@@ -0,0 +1,30 @@
1 +---
2 + howto/build_navy.txt | 6 +++---
3 + 1 files changed, 3 insertions(+), 3 deletions(-)
4 +
5 +diff --git a/howto/build_navy.txt b/howto/build_navy.txt
6 +index 3fd3afb..0ee807e 100644
7 +--- a/howto/build_navy.txt
8 ++++ b/howto/build_navy.txt
9 +@@ -119,8 +119,8 @@
10 + - libxv-dev
11 + - libusplash-dev
12 + - latex-make
13 +- - textlive-lang-cyrillic
14 +- - textlive-latex-extra
15 ++ - texlive-lang-cyrillic
16 ++ - texlive-latex-extra
17 + - dia
18 + - python-pyrex
19 + - libtool
20 +@@ -128,7 +128,7 @@
21 + - sox
22 + - cython
23 + - imagemagick
24 +- - docutils
25 ++ - python-docutils
26 +
27 + #. на машине dinar: добавить свой открытый ssh-ключ в authorized_keys2 пользователя ddev
28 + #. на своей машине: отредактировать /etc/sudoers (команда ``visudo``) примерно следующим образом::
29 +--
30 +1.5.6.5
t/t5100/sample.mbox
+52
@@ -501,3 +501,55 @@ index 3e5fe51..aabfe5c 100644
501
502 --=-=-=--
503
504 +From bda@mnsspb.ru Wed Nov 12 17:54:41 2008
505 +From: Dmitriy Blinov <bda@mnsspb.ru>
506 +To: navy-patches@dinar.mns.mnsspb.ru
507 +Date: Wed, 12 Nov 2008 17:54:41 +0300
508 +Message-Id: <1226501681-24923-1-git-send-email-bda@mnsspb.ru>
509 +X-Mailer: git-send-email 1.5.6.5
510 +MIME-Version: 1.0
511 +Content-Type: text/plain;
512 + charset=utf-8
513 +Content-Transfer-Encoding: 8bit
514 +Subject: [Navy-patches] [PATCH]
515 + =?utf-8?b?0JjQt9C80LXQvdGR0L0g0YHQv9C40YHQvtC6INC/0LA=?=
516 + =?utf-8?b?0LrQtdGC0L7QsiDQvdC10L7QsdGF0L7QtNC40LzRi9GFINC00LvRjyA=?=
517 + =?utf-8?b?0YHQsdC+0YDQutC4?=
518 +
519 +textlive-* исправлены на texlive-*
520 +docutils заменён на python-docutils
521 +
522 +Действительно, оказалось, что rest2web вытягивает за собой
523 +python-docutils. В то время как сам rest2web не нужен.
524 +
525 +Signed-off-by: Dmitriy Blinov <bda@mnsspb.ru>
526 +---
527 + howto/build_navy.txt | 6 +++---
528 + 1 files changed, 3 insertions(+), 3 deletions(-)
529 +
530 +diff --git a/howto/build_navy.txt b/howto/build_navy.txt
531 +index 3fd3afb..0ee807e 100644
532 +--- a/howto/build_navy.txt
533 ++++ b/howto/build_navy.txt
534 +@@ -119,8 +119,8 @@
535 + - libxv-dev
536 + - libusplash-dev
537 + - latex-make
538 +- - textlive-lang-cyrillic
539 +- - textlive-latex-extra
540 ++ - texlive-lang-cyrillic
541 ++ - texlive-latex-extra
542 + - dia
543 + - python-pyrex
544 + - libtool
545 +@@ -128,7 +128,7 @@
546 + - sox
547 + - cython
548 + - imagemagick
549 +- - docutils
550 ++ - python-docutils
551 +
552 + #. на машине dinar: добавить свой открытый ssh-ключ в authorized_keys2 пользователя ddev
553 + #. на своей машине: отредактировать /etc/sudoers (команда ``visudo``) примерно следующим образом::
554 +--
555 +1.5.6.5