changeset 37469:7edf68862fe3

py3: work around weird handling of bytes/unicode in decode_header() Basically decode_header() works as follows, and on Python 3, email headers ARE UNICODE. def decode_header(header): if not ecre.search(header): # ecre is unicode regexp return [(header, None)] # so header is unicode string ... decode header into [(bytes_data, unicode_charset_name)] return collapsed
author Yuya Nishihara <yuya@tcha.org>
date Sun, 08 Apr 2018 15:22:30 +0900
parents ef661ce45cdb
children d658cbef8041
files mercurial/mail.py
diffstat 1 files changed, 5 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/mail.py	Sun Apr 08 15:03:00 2018 +0900
+++ b/mercurial/mail.py	Sun Apr 08 15:22:30 2018 +0900
@@ -332,6 +332,11 @@
                 continue
             except UnicodeDecodeError:
                 pass
+        # On Python 3, decode_header() may return either bytes or unicode
+        # depending on whether the header has =?<charset>? or not
+        if isinstance(part, type(u'')):
+            uparts.append(part)
+            continue
         try:
             uparts.append(part.decode('UTF-8'))
             continue