From e273a32ec727700d592723c4e5905510c71ed632 Mon Sep 17 00:00:00 2001 From: mathieui Date: Mon, 8 Dec 2014 17:01:44 +0100 Subject: [PATCH] Improve the xhtml_to_poezio_colors sanitization add some tests, and remove the test_datetime_tuple because of python time module misbehavior with timezones set manually. (potentially due to http://bugs.python.org/issue6478) --- src/xhtml.py | 6 ++++-- test/test_common.py | 13 ------------- test/test_xhtml.py | 8 ++++++++ 3 files changed, 12 insertions(+), 15 deletions(-) diff --git a/src/xhtml.py b/src/xhtml.py index 5b71823c..b84ce943 100644 --- a/src/xhtml.py +++ b/src/xhtml.py @@ -183,7 +183,8 @@ whitespace_re = re.compile(r'\s+') xhtml_attr_re = re.compile(r'\x19-?\d[^}]*}|\x19[buaio]') xhtml_data_re = re.compile(r'data:image/([a-z]+);base64,(.+)') -poezio_colors_trim = re.compile(r'\x19o(\x19\d+}|\x19\d|\x19[buaio])*\x19o') +poezio_color_double = re.compile(r'(?:\x19\d+}|\x19\d)+(\x19\d|\x19\d+})') +poezio_format_trim = re.compile(r'(\x19\d+}|\x19\d|\x19[buaio]|\x19o)+\x19o') xhtml_simple_attr_re = re.compile(r'\x19\d') @@ -304,7 +305,8 @@ class XHTMLHandler(sax.ContentHandler): @property def result(self): - return re.sub(poezio_colors_trim, '\x19o', ''.join(self.builder).strip()) + sanitized = re.sub(poezio_color_double, r'\1', ''.join(self.builder).strip()) + return re.sub(poezio_format_trim, '\x19o', sanitized) def append_formatting(self, formatting): self.formatting.append(formatting) diff --git a/test/test_common.py b/test/test_common.py index 50643733..0b2bd279 100644 --- a/test/test_common.py +++ b/test/test_common.py @@ -14,19 +14,6 @@ from common import (datetime_tuple, get_utc_time, get_local_time, shell_split, find_argument_quoted, find_argument_unquoted, parse_str_to_secs, parse_secs_to_str, safeJID) -def test_datetime_tuple(): - time.timezone = 0 - time.altzone = 0 - - assert datetime_tuple('20130226T06:23:12') == datetime.datetime(2013, 2, 26, 6, 23, 12) - assert datetime_tuple('2013-02-26T06:23:12+02:00') == datetime.datetime(2013, 2, 26, 4, 23, 12) - - time.timezone = -3600 - time.altzone = -3600 - - assert datetime_tuple('20130226T07:23:12') == datetime.datetime(2013, 2, 26, 8, 23, 12) - assert datetime_tuple('2013-02-26T07:23:12+02:00') == datetime.datetime(2013, 2, 26, 6, 23, 12) - def test_utc_time(): delta = timedelta(seconds=-3600) d = datetime.datetime.now() diff --git a/test/test_xhtml.py b/test/test_xhtml.py index 58857d67..5afd08ff 100644 --- a/test/test_xhtml.py +++ b/test/test_xhtml.py @@ -38,6 +38,14 @@ def test_xhtml_to_poezio_colors(): xhtml = start + b'http://perdu.com' + end assert xhtml_to_poezio_colors(xhtml) == '\x19uhttp://perdu.com\x19o' + xhtml = b'
Allo
test
test2
' + assert xhtml_to_poezio_colors(xhtml, force=True) == '\x19bAllo \x19196}test \x1921}test2\x19o' + + xhtml = (b'
' + b'
Allo
' + b'test
test2
') + assert xhtml_to_poezio_colors(xhtml, force=True) == '\x1921}Allo \x19196}test \x1921}test2\x19o' + with pytest.raises(xml.sax._exceptions.SAXParseException): xhtml_to_poezio_colors(b'

Invalid xml')