aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosh Boyer <jwboyer@redhat.com>2023-11-17 16:54:55 +0000
committerJosh Boyer <jwboyer@redhat.com>2023-11-17 16:54:55 +0000
commit7124ce30ba82266e3972e99aacebeda712131d6f (patch)
treea1f3b2a716b4851a724d19e3af5fa961310a892a
parentf81145a07a9959486f56e68260a4265ed2a4c666 (diff)
parentbfd5f0b9d5998a5c15e68579265a83753fc71634 (diff)
downloadlinux-firmware-7124ce30ba82266e3972e99aacebeda712131d6f.tar.gz
Merge branch 'mlimonci/encoding' into 'main'
Try both utf-8 and windows-1252 for decoding email See merge request kernel-firmware/linux-firmware!61
-rwxr-xr-xcontrib/process_linux_firmware.py59
1 files changed, 44 insertions, 15 deletions
diff --git a/contrib/process_linux_firmware.py b/contrib/process_linux_firmware.py
index 668e35c0..8e2eb350 100755
--- a/contrib/process_linux_firmware.py
+++ b/contrib/process_linux_firmware.py
@@ -34,6 +34,8 @@ content_types = {
def classify_content(content):
# load content into the email library
msg = email.message_from_string(content)
+ decoded = None
+ body = None
# check the subject
subject = msg["Subject"]
@@ -42,17 +44,28 @@ def classify_content(content):
if "PATCH" in subject:
return ContentType.PATCH
- for part in msg.walk():
- if part.get_content_type() == "text/plain":
+ if msg.is_multipart():
+ for part in msg.walk():
+ if part.get_content_type() == "text/plain":
+ body = part.get_payload(decode=True)
+ else:
+ body = msg.get_payload(decode=True)
+
+ if body:
+ for encoding in ["utf-8", "windows-1252"]:
try:
- body = part.get_payload(decode=True).decode("utf-8")
- for key in content_types.keys():
- if key in body:
- return content_types[key]
- break
- except UnicodeDecodeError as e:
- logging.warning("Failed to decode email: %s, treating as SPAM" % e)
+ decoded = body.decode(encoding)
break
+ except UnicodeDecodeError:
+ pass
+
+ if decoded:
+ for key in content_types.keys():
+ if key in decoded:
+ return content_types[key]
+ else:
+ logging.warning("Failed to decode email: %s, treating as SPAM", body)
+
return ContentType.SPAM
@@ -68,6 +81,11 @@ def quiet_cmd(cmd):
def reply_email(content, branch):
+ user = None
+ password = None
+ server = None
+ port = None
+
if "SMTP_USER" in os.environ:
user = os.environ["SMTP_USER"]
if "SMTP_PASS" in os.environ:
@@ -83,15 +101,26 @@ def reply_email(content, branch):
reply = email.message.EmailMessage()
orig = email.message_from_string(content)
- reply["To"] = ", ".join(
- email.utils.formataddr(t)
- for t in email.utils.getaddresses(
- orig.get_all("from", []) + orig.get_all("to", []) + orig.get_all("cc", [])
+ try:
+ reply["To"] = ", ".join(
+ email.utils.formataddr(t)
+ for t in email.utils.getaddresses(
+ orig.get_all("from", [])
+ + orig.get_all("to", [])
+ + orig.get_all("cc", [])
+ )
)
- )
+ except ValueError:
+ logging.warning("Failed to parse email addresses, not sending email")
+ return
reply["From"] = "linux-firmware@kernel.org"
- reply["Subject"] = "Re: {}".format(orig["Subject"])
+ try:
+ reply["Subject"] = "Re: {}".format(orig["Subject"])
+ except ValueError:
+ logging.warning("Failed to parse subject, not sending email")
+ return
+
reply["In-Reply-To"] = orig["Message-Id"]
reply["References"] = orig["Message-Id"]
reply["Thread-Topic"] = orig["Thread-Topic"]