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: def to_bytes(self) -> bytes:
"""Convert from internal representation to binary bytes. Store the binary result """Convert from internal representation to binary bytes. Store the binary result
in the internal state and return it.""" in the internal state and return it."""
if not self.decoded: if self.decoded == None:
do = b'' do = b''
elif self._construct: elif self._construct:
do = self._construct.build(self.decoded, total_len=None) do = self._construct.build(self.decoded, total_len=None)