utils: Fix BER-TLV tag decode for multi-byte tags
We cannot simply skip anything that has 0xFF as first byte to detect
the padding after the end of a TLV object:
0xFF may very well be a valid first octet of a multi-octet TAG:
Tags of private class (11) with constructed (1) payload will have 0xFF
as first octet.
So let's expand the check to only detect padding in case of either only
a single byte FF being left, or two FF following each other [with
whatever suffix].
Change-Id: I5d64ce9ef1d973804daabae0b15c2e2349e6fab9
diff --git a/pySim/utils.py b/pySim/utils.py
index 777638c..def88f0 100644
--- a/pySim/utils.py
+++ b/pySim/utils.py
@@ -173,7 +173,8 @@
Returns:
Tuple of (tag:int, remainder:bytes)
"""
- if binary[0] == 0xff:
+ # check for FF padding at the end, as customary in SIM card files
+ if binary[0] == 0xff and len(binary) == 1 or binary[0] == 0xff and binary[1] == 0xff:
return None, binary
tag = binary[0] & 0x1f
if tag <= 30: