laforge has uploaded this change for review. ( https://gerrit.osmocom.org/c/pysim/+/35487?usp=email )
Change subject: construct: avoid StreamError exceptions due to files containing all-ff ...................................................................... construct: avoid StreamError exceptions due to files containing all-ff In smart cards, files/records containing all-ff means they are simply not used/initialized. Let's avoid raising exceptions when interpreting 0xff as length value and reading less bytes as value. Change-Id: I09c3cb82063fc094eb047749996a6eceff757ea2 --- M pySim/construct.py 1 file changed, 23 insertions(+), 1 deletion(-) git pull ssh://gerrit.osmocom.org:29418/pysim refs/changes/87/35487/1 diff --git a/pySim/construct.py b/pySim/construct.py index 1ed3576..0c82c41 100644 --- a/pySim/construct.py +++ b/pySim/construct.py @@ -402,7 +402,16 @@ """Helper function to wrap around normalize_construct() and filter_dict().""" if not length: length = len(raw_bin_data) - parsed = c.parse(raw_bin_data, total_len=length, **context) + try: + parsed = c.parse(raw_bin_data, total_len=length, **context) + except StreamError as e: + # if the input is all-ff, this means the content is undefined. Let's avoid passing StreamError + # exceptions in those situations (which might occur if a length field 0xff is 255 but then there's + # actually less bytes in the remainder of the file. + if all([v == 0xff for v in raw_bin_data]): + return None + else: + raise e return normalize_construct(parsed) def build_construct(c, decoded_data, context: dict = {}): -- To view, visit https://gerrit.osmocom.org/c/pysim/+/35487?usp=email To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: pysim Gerrit-Branch: master Gerrit-Change-Id: I09c3cb82063fc094eb047749996a6eceff757ea2 Gerrit-Change-Number: 35487 Gerrit-PatchSet: 1 Gerrit-Owner: laforge <lafo...@osmocom.org> Gerrit-MessageType: newchange