diff --git a/pySim/construct.py b/pySim/construct.py index fcbadd8e..a43cd296 100644 --- a/pySim/construct.py +++ b/pySim/construct.py @@ -208,10 +208,11 @@ def GsmString(n): class GreedyInteger(Construct): """A variable-length integer implementation, think of combining GrredyBytes with BytesInteger.""" - def __init__(self, signed=False, swapped=False): + def __init__(self, signed=False, swapped=False, minlen=0): super().__init__() self.signed = signed self.swapped = swapped + self.minlen = minlen def _parse(self, stream, context, path): data = stream_read_entire(stream, path) @@ -239,6 +240,8 @@ class GreedyInteger(Construct): if not isinstance(obj, integertypes): raise IntegerError(f"value {obj} is not an integer", path=path) length = self.__bytes_required(obj) + if length < self.minlen: + length = length + (self.minlen - length) try: data = integer2bytes(obj, length, self.signed) except ValueError as e: diff --git a/pySim/ts_102_221.py b/pySim/ts_102_221.py index e7aff97c..08e836c0 100644 --- a/pySim/ts_102_221.py +++ b/pySim/ts_102_221.py @@ -80,11 +80,11 @@ ts_102_22x_cmdset = CardCommandSet('TS 102 22x', [ # ETSI TS 102 221 11.1.1.4.2 class FileSize(BER_TLV_IE, tag=0x80): - _construct = GreedyInteger() + _construct = GreedyInteger(minlen=2) # ETSI TS 102 221 11.1.1.4.2 class TotalFileSize(BER_TLV_IE, tag=0x81): - _construct = GreedyInteger() + _construct = GreedyInteger(minlen=2) # ETSI TS 102 221 11.1.1.4.3 class FileDescriptor(BER_TLV_IE, tag=0x82):