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
This commit is contained in:
Harald Welte
2023-12-06 23:56:28 +01:00
committed by laforge
parent c038cccdd8
commit 0f7d48ed69

View File

@@ -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)