Skip to content

Commit 353aaf2

Browse files
navytuxgitster
authored andcommitted
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 <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 141201d commit 353aaf2

File tree

6 files changed

+114
-9
lines changed

6 files changed

+114
-9
lines changed

builtin-mailinfo.c

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -430,13 +430,6 @@ static struct strbuf *decode_b_segment(const struct strbuf *b_seg)
430430
c -= 'a' - 26;
431431
else if ('0' <= c && c <= '9')
432432
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-
}
440433
else
441434
continue; /* garbage */
442435
switch (pos++) {
@@ -514,7 +507,25 @@ static int decode_header_bq(struct strbuf *it)
514507
rfc2047 = 1;
515508

516509
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+
}
518529
in = ep;
519530
}
520531
/* E.g.

t/t5100-mailinfo.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ test_expect_success 'split sample box' \
1111
'git mailsplit -o. ../t5100/sample.mbox >last &&
1212
last=`cat last` &&
1313
echo total is $last &&
14-
test `cat last` = 11'
14+
test `cat last` = 12'
1515

1616
for mail in `echo 00*`
1717
do

t/t5100/info0012

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
Author: Dmitriy Blinov
2+
3+
Subject: Изменён список пакетов необходимых для сборки
4+
Date: Wed, 12 Nov 2008 17:54:41 +0300
5+

t/t5100/msg0012

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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 <[email protected]>

t/t5100/patch0012

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -501,3 +501,55 @@ index 3e5fe51..aabfe5c 100644
501501

502502
--=-=-=--
503503

504+
From [email protected] Wed Nov 12 17:54:41 2008
505+
From: Dmitriy Blinov <[email protected]>
506+
507+
Date: Wed, 12 Nov 2008 17:54:41 +0300
508+
Message-Id: <[email protected]>
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 <[email protected]>
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

0 commit comments

Comments
 (0)