From 0f7d48ed692c834e3d40e16bec0403cf6f6a8755 Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Wed, 6 Dec 2023 23:56:28 +0100 Subject: [PATCH] tlv: Fix encoding of zero-valued TLVs If a TLV was elementary (no nested IEs), and it had only a single integer content whose value is 0, we erroneously encoded that as zero-length TLV (len=0, no value part): >>> rf = pySim.euicc.RefreshFlag(decoded=0); >>> rf.to_bytes() b'' >>> rf.to_tlv() b'\x81\x00' After this change it is correct: >>> rf = pySim.euicc.RefreshFlag(decoded=0); >>> rf.to_bytes() b'\x00' >>> rf.to_tlv() b'\x81\x01\x00' Change-Id: I5f4c0555cff7df9ccfc4a56da12766d1bf89122f --- pySim/tlv.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pySim/tlv.py b/pySim/tlv.py index 1ecc8066..c85d92b6 100644 --- a/pySim/tlv.py +++ b/pySim/tlv.py @@ -87,7 +87,7 @@ class Transcodable(abc.ABC): def to_bytes(self) -> bytes: """Convert from internal representation to binary bytes. Store the binary result in the internal state and return it.""" - if not self.decoded: + if self.decoded == None: do = b'' elif self._construct: do = self._construct.build(self.decoded, total_len=None)