Hoernchen has uploaded this change for review. ( https://gerrit.osmocom.org/c/pysim/+/43556?usp=email )
Change subject: sms: don't mutate digits in AddressField.to_bytes() ......................................................................
sms: don't mutate digits in AddressField.to_bytes()
to_bytes() appended the BCD filler nibble, so the next call saw one digit more and derived a wrong length. This affects any code that encodes an address twice, even for printing/logging.
Man, I really miss my beloved c++ const function decoration...
Fix: keep the filler in a local. Change-Id: I81691c5a1fc5072d6d20c52d22da1eb2e180d04a --- M pySim/sms.py 1 file changed, 3 insertions(+), 3 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/pysim refs/changes/56/43556/1
diff --git a/pySim/sms.py b/pySim/sms.py index 0c73a53..5d2bda9 100644 --- a/pySim/sms.py +++ b/pySim/sms.py @@ -239,8 +239,8 @@ def to_bytes(self) -> bytes: """Encode the AddressField into the binary representation as used in T-PDU.""" num_digits = len(self.digits) - if num_digits % 2: - self.digits += 'f' + # don't store the filler nibble or get_bytes() encodes it as digit and ends up too large + digits = self.digits + 'f' if num_digits % 2 else self.digits d = { 'addr_len': num_digits, 'type_of_addr': { @@ -248,7 +248,7 @@ 'type_of_number': self.ton, 'numbering_plan_id': self.npi, }, - 'digits': self.digits, + 'digits': digits, } return self._construct.build(d)