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

Reply via email to