From 626353a02d33055909f39c91278e96d0ad05cc01 Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Mercier Date: Thu, 26 Oct 2017 00:22:50 +0200 Subject: [PATCH] Don't fail on non-utf-8 chars --- archive.py | 8 +++++--- envelope.py | 2 +- gpg_status_parser.py | 2 +- signature.py | 4 ++-- 4 files changed, 9 insertions(+), 7 deletions(-) diff --git a/archive.py b/archive.py index 3ec8637..5906def 100644 --- a/archive.py +++ b/archive.py @@ -66,7 +66,7 @@ def _guess_mime(data): p.stdin.close() p.wait() if p.returncode == 0: - return p.stdout.read().decode().strip() + return p.stdout.read().decode('utf-8', 'replace').strip() def guess_mime(cnt): @@ -107,8 +107,8 @@ def extract(cnt, dest=None): p.stdin.write(data.encode() if isinstance(data, str) else data) p.stdin.close() p.wait() - err = p.stdout.read().decode() - err += p.stderr.read().decode() + err = p.stdout.read().decode('utf-8', 'replace') + err += p.stderr.read().decode('utf-8', 'replace') if p.returncode == 0: if dest is not None: nsub = len([x for x in os.listdir(odest) if x.find(os.path.basename(ldest) + ".") == 0]) + 1 @@ -124,6 +124,8 @@ def extract(cnt, dest=None): shutil.move(os.path.join(temp, os.listdir(temp)[0]), dest) else: shutil.move(temp, dest) + # Update modification time to reflect submission timestamp + os.utime(dest) yield MailTest("Archive successfully extracted.", details=err) yield dest else: diff --git a/envelope.py b/envelope.py index e4330a3..769b189 100644 --- a/envelope.py +++ b/envelope.py @@ -13,7 +13,7 @@ def import_pubkey(key, GNUPG_DIRECTORY): p.stdin.write(key) p.stdin.close() p.wait() - gpg_output = p.stderr.read().decode() + gpg_output = p.stderr.read().decode("utf-8", "replace") if p.returncode == 0: yield MailTest("New PGP key successfully imported:", details=gpg_output) yield False diff --git a/gpg_status_parser.py b/gpg_status_parser.py index 9e67f7d..1cdb4c1 100644 --- a/gpg_status_parser.py +++ b/gpg_status_parser.py @@ -138,7 +138,7 @@ def parse(fd): line = fd.readline() context = {} while line: - res = re.match(r"^\[GNUPG:\] (?P\S+)(?: (?P.*))?$", line.decode()) + res = re.match(r"^\[GNUPG:\] (?P\S+)(?: (?P.*))?$", line.decode('utf-8', 'replace')) if res is not None: keyword = res.group("keyword") args = res.group("args").split(" ") if res.group("args") is not None else [] diff --git a/signature.py b/signature.py index ddac8f1..6d62ac4 100644 --- a/signature.py +++ b/signature.py @@ -85,7 +85,7 @@ def check_sep(data, sign, GNUPG_DIRECTORY): finally: os.unlink(f.name) - yield from verify_sign(data, gpg_rcode, gpg_status, gpg_output.decode('utf-8')) + yield from verify_sign(data, gpg_rcode, gpg_status, gpg_output.decode('utf-8', 'replace')) def check_merged(bdata, GNUPG_DIRECTORY): @@ -128,4 +128,4 @@ def check_merged(bdata, GNUPG_DIRECTORY): else: bdata = None - yield from verify_sign(bdata, gpg_rcode, gpg_status, gpg_output.decode('utf-8')) + yield from verify_sign(bdata, gpg_rcode, gpg_status, gpg_output.decode('utf-8', 'replace'))