From ead03b9779346904b78a1866a44f3881cb780e41 Mon Sep 17 00:00:00 2001 From: Sean Whalen Date: Sat, 6 Oct 2018 15:29:02 -0400 Subject: [PATCH] 4.1.7 - Remove any invalid XML schema tags before parsing the XML (#18) --- CHANGELOG.md | 5 ++ parsedmarc/__init__.py | 5 +- ...xxxxxx.de!1538690400!1538776800.xml.sample | 47 +++++++++++++++++++ setup.py | 2 +- 4 files changed, 57 insertions(+), 2 deletions(-) create mode 100644 samples/ikea.com!xxxxxx.de!1538690400!1538776800.xml.sample diff --git a/CHANGELOG.md b/CHANGELOG.md index 17232a40..46056aa7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +4.1.7 +----- + +- Remove any invalid XML schema tags before parsing the XML (#18) + 4.1.6 ----- diff --git a/parsedmarc/__init__.py b/parsedmarc/__init__.py index e97202be..11906621 100644 --- a/parsedmarc/__init__.py +++ b/parsedmarc/__init__.py @@ -44,12 +44,13 @@ import imapclient.exceptions import dateparser import mailparser -__version__ = "4.1.6" +__version__ = "4.1.7" logger = logging.getLogger(__name__) logger.setLevel(logging.ERROR) feedback_report_regex = re.compile(r"^([\w\-]+): (.+)$", re.MULTILINE) +xml_schema_regex = re.compile(r"\s*", re.MULTILINE) MAGIC_ZIP = b"\x50\x4B\x03\x04" MAGIC_GZIP = b"\x1F\x8B" @@ -457,6 +458,8 @@ def parse_aggregate_report_xml(xml, nameservers=None, timeout=2.0): OrderedDict: The parsed aggregate DMARC report """ try: + # Remove invalid schema tags + xml = xml_schema_regex.sub("", xml) report = xmltodict.parse(xml)["feedback"] report_metadata = report["report_metadata"] schema = "draft" diff --git a/samples/ikea.com!xxxxxx.de!1538690400!1538776800.xml.sample b/samples/ikea.com!xxxxxx.de!1538690400!1538776800.xml.sample new file mode 100644 index 00000000..ac3f8b02 --- /dev/null +++ b/samples/ikea.com!xxxxxx.de!1538690400!1538776800.xml.sample @@ -0,0 +1,47 @@ + + + + ikea.com + double-bounce@ikea.com + aggr_report_2018_10_05_5bc7e9b4f3e8a + + 1538690400 + 1538776800 + + + + xxxxxx.de + r + r +

none

+ none + 100 + 0 +
+ + + 234.234.234.234 + 1 + + none + fail + fail + + + + xxxxxx.de + xxxxxx.de + + + + xxxxxx.de + pass + + + mailrelay.com + helo + none + + + +
\ No newline at end of file diff --git a/setup.py b/setup.py index 6fcdf9da..c2da17e9 100644 --- a/setup.py +++ b/setup.py @@ -14,7 +14,7 @@ from setuptools import setup from codecs import open from os import path -__version__ = "4.1.6" +__version__ = "4.1.7" description = "A Python package and CLI for parsing aggregate and " \ "forensic DMARC reports"