From fc49f7f56c16ab47b7b5cc32e29e58dac0e76d5b Mon Sep 17 00:00:00 2001 From: bendem Date: Tue, 20 Feb 2024 00:51:28 +0100 Subject: [PATCH] Ignore errors when parsing text-based forensic reports (#460) Starting 8.2.0, parsedmarc crashes instead of ignoring some invalid reports. The original change was introduced in abf969522809626bc1aeb886cf69ae0e2bb62895. --- parsedmarc/__init__.py | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/parsedmarc/__init__.py b/parsedmarc/__init__.py index 291c008..5e941ba 100644 --- a/parsedmarc/__init__.py +++ b/parsedmarc/__init__.py @@ -1056,16 +1056,23 @@ def parse_report_email(input_, offline=False, ip_db_path=None, elif content_type == "text/plain": if "A message claiming to be from you has failed" in payload: - parts = payload.split("detected.") - field_matches = text_report_regex.findall(parts[0]) - fields = dict() - for match in field_matches: - field_name = match[0].lower().replace(" ", "-") - fields[field_name] = match[1].strip() - feedback_report = "Arrival-Date: {}\n" \ - "Source-IP: {}" \ - "".format(fields["received-date"], - fields["sender-ip-address"]) + try: + parts = payload.split("detected.", 1) + field_matches = text_report_regex.findall(parts[0]) + fields = dict() + for match in field_matches: + field_name = match[0].lower().replace(" ", "-") + fields[field_name] = match[1].strip() + + feedback_report = "Arrival-Date: {}\n" \ + "Source-IP: {}" \ + "".format(fields["received-date"], + fields["sender-ip-address"]) + except Exception as e: + error = 'Unable to parse message with ' \ + 'subject "{0}": {1}'.format(subject, e) + raise InvalidDMARCReport(error) + sample = parts[1].lstrip() logger.debug(sample) else: