[Patchew-devel] [PATCH] fix parsing of RFC2047 headers

Paolo Bonzini posted 1 patch 2 years, 8 months ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/patchew-ci tags/patchew/20210816181939.7142-1-pbonzini@redhat.com
mbox.py                              |   3 ++-
tests/data/0035-rfc2047-from.mbox.gz | Bin 0 -> 8188 bytes
tests/test_mbox.py                   |   6 ++++++
3 files changed, 8 insertions(+), 1 deletion(-)
create mode 100644 tests/data/0035-rfc2047-from.mbox.gz
[Patchew-devel] [PATCH] fix parsing of RFC2047 headers
Posted by Paolo Bonzini 2 years, 8 months ago
Quoting <https://tools.ietf.org/html/rfc2047#section-6.2>:

> NOTE: Decoding and display of encoded-words occurs *after* a
> structured field body is parsed into tokens.  It is therefore
> possible to hide special characters in encoded-words which, when
> displayed, will be indistinguishable from special characters in the
> surrounding text.  For this and other reasons, it is NOT generally
> possible to translate a message header containing encoded-words to
> an unencoded form which can be parsed by an RFC 822 mail reader.

So do not use decode_header() on the whole From header, instead
parse the header first, then decode the name which could be
RFC2047 encoded.

Reported-by: John Snow <jsnow@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 mbox.py                              |   3 ++-
 tests/data/0035-rfc2047-from.mbox.gz | Bin 0 -> 8188 bytes
 tests/test_mbox.py                   |   6 ++++++
 3 files changed, 8 insertions(+), 1 deletion(-)
 create mode 100644 tests/data/0035-rfc2047-from.mbox.gz

diff --git a/mbox.py b/mbox.py
index be10166..20abca1 100644
--- a/mbox.py
+++ b/mbox.py
@@ -28,7 +28,8 @@ def _parse_header(header):
 
 
 def parse_address(addr_str):
-    name, addr = email.utils.parseaddr(_parse_header(addr_str))
+    name, addr = email.utils.parseaddr(addr_str)
+    name = _parse_header(name)
     return name, addr
 
 
diff --git a/tests/data/0035-rfc2047-from.mbox.gz b/tests/data/0035-rfc2047-from.mbox.gz
new file mode 100644
index 0000000000000000000000000000000000000000..1e59ea710ee9cf10c199c8b45ada078a103052fd
GIT binary patch
literal 8188
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

literal 0
HcmV?d00001

diff --git a/tests/test_mbox.py b/tests/test_mbox.py
index 8a86d11..4312a2e 100755
--- a/tests/test_mbox.py
+++ b/tests/test_mbox.py
@@ -62,6 +62,12 @@ Virtualization:  qemu.org | libvirt.org
             msg = mbox.MboxMessage(f.read())
         self.assertTrue(msg.is_patch())
 
+    def test_rfc2047_from(self):
+        dp = self.get_data_path("0035-rfc2047-from.mbox.gz")
+        with open(dp, "r") as f:
+            msg = mbox.MboxMessage(f.read())
+        self.assertTrue(msg.get_from()[1] == 'AIERPATIJIANG1@kingsoft.com')
+
     def test_get_json(self):
         dp = self.get_data_path("0001-simple-patch.mbox.gz")
         with open(dp, "r") as f:
-- 
2.31.1

_______________________________________________
Patchew-devel mailing list
Patchew-devel@redhat.com
https://listman.redhat.com/mailman/listinfo/patchew-devel

Re: [Patchew-devel] [PATCH] fix parsing of RFC2047 headers
Posted by John Snow 2 years, 8 months ago
On Mon, Aug 16, 2021 at 2:19 PM Paolo Bonzini <pbonzini@redhat.com> wrote:

> Quoting <https://tools.ietf.org/html/rfc2047#section-6.2>:
>
> > NOTE: Decoding and display of encoded-words occurs *after* a
> > structured field body is parsed into tokens.  It is therefore
> > possible to hide special characters in encoded-words which, when
> > displayed, will be indistinguishable from special characters in the
> > surrounding text.  For this and other reasons, it is NOT generally
> > possible to translate a message header containing encoded-words to
> > an unencoded form which can be parsed by an RFC 822 mail reader.
>
> So do not use decode_header() on the whole From header, instead
> parse the header first, then decode the name which could be
> RFC2047 encoded.
>
> Reported-by: John Snow <jsnow@redhat.com>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
>

Thanks Paolo -- LGTM. Thanks for the quick diagnosis.

--js
_______________________________________________
Patchew-devel mailing list
Patchew-devel@redhat.com
https://listman.redhat.com/mailman/listinfo/patchew-devel