From 9c08ae0b062db116493c2533877e34031cd4c875 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Henryk=20Pl=C3=B6tz?= Date: Sun, 26 Aug 2018 14:02:22 +0200 Subject: [PATCH] Fix a parser bug found in real data --- fints/parser.py | 2 ++ fints/types.py | 2 ++ tests/test_message_parser.py | 11 +++++++++++ 3 files changed, 15 insertions(+) diff --git a/fints/parser.py b/fints/parser.py index d3edbca..d313253 100644 --- a/fints/parser.py +++ b/fints/parser.py @@ -293,6 +293,8 @@ class FinTS3Parser: if data and deg: deg.append(data) + + if deg: data = deg segment.append(data) diff --git a/fints/types.py b/fints/types.py index 689276f..54bd0bf 100644 --- a/fints/types.py +++ b/fints/types.py @@ -232,6 +232,8 @@ class Container(metaclass=ContainerMeta): @classmethod def naive_parse(cls, data): + if data is None: + raise TypeError("No data provided") retval = cls() for ((name, field), value) in zip(retval._fields.items(), data): setattr(retval, name, value) diff --git a/tests/test_message_parser.py b/tests/test_message_parser.py index a98c697..ea0ea5f 100644 --- a/tests/test_message_parser.py +++ b/tests/test_message_parser.py @@ -80,6 +80,17 @@ def test_parse_HIRMG2(): assert seg.responses[1].code == '0100' assert len(seg.responses) == 2 +# Regression test, bug found in the wild +def test_extra_colon(): + message1 = rb"""HIRMG:2:2:+3060::Teilweise liegen Warnungen/Hinweise vor.'""" + + m1 = FinTS3Parser().parse_message(message1) + seg = m1.segments[0] + + assert seg.header.type == 'HIRMG' + assert seg.header.version == 2 + assert seg.header.reference is None + def test_invalid(): message1 = rb"""12""" -- 2.47.2