From d19c02228e24c61ffe679756b58ad97d847303cc Mon Sep 17 00:00:00 2001 From: XANTRONIX Development Date: Fri, 8 Nov 2024 11:17:59 -0500 Subject: [PATCH] Implement better handling of corner cases --- lib/nntp/tiny/mbox.py | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/lib/nntp/tiny/mbox.py b/lib/nntp/tiny/mbox.py index 851512a..3dd66c0 100644 --- a/lib/nntp/tiny/mbox.py +++ b/lib/nntp/tiny/mbox.py @@ -1,5 +1,6 @@ import re import enum +import datetime from dateparser.search import search_dates from email.header import decode_header @@ -44,7 +45,7 @@ class MBoxReaderBuffer(): return self.lines[line][0:5] == 'From ' def is_header_line(self, line): - return re.match('^([^:]+): (.*)$', self.lines[line]) is not None + return re.match('^([A-Za-z0-9\\-]+): (.*)$', self.lines[line]) is not None def is_start(self): if self.lines[0] is None or self.lines[1] is None: @@ -67,9 +68,12 @@ def decode(text: str): decoded = decode_header(text)[0] if decoded[1] is None: - return decoded[0] + return str(decoded[0]) - return str(decoded[0], decoded[1]) + try: + return str(decoded[0], decoded[1]) + except: + return str(decoded[0]) class MBoxMessage(): __slots__ = 'state', 'headers', 'line', 'content', 'body', 'key', @@ -113,7 +117,16 @@ class MBoxMessage(): return self.headers.get(key.lower()) def date(self): - return search_dates(self.headers['date'])[0][1] + try: + return search_dates(self.headers['date'])[0][1] + except: + return datetime.datetime.fromtimestamp(0) + + def sender(self): + return self.headers.get('from', 'Unknown') + + def subject(self): + return self.headers.get('subject', '(no subject)') def is_first_line(self): return len(self.headers) == 1 and (self.body == '' or self.body is None)