laforge has submitted this change. ( https://gerrit.osmocom.org/c/pysim/+/41686?usp=email )
Change subject: saip: rework file sizes for "half-defined" template files ......................................................................
saip: rework file sizes for "half-defined" template files
Define the file size early if possible. Some templates (e.g. for 5GS) define files which aren't completely defined. Fixes the parsing for 5GS SUCI_Calc_Info which doesn't have a file size defined.
The saip-tool will other crash when reading a 5G enabled profile: ``` Traceback (most recent call last): File "./contrib/saip-tool.py", line 458, in <module> pes = ProfileElementSequence.from_der(f.read()) File "pySim/esim/saip/__init__.py", line 1679, in from_der inst.parse_der(der) ~~~~~~~~~~~~~~^^^^^ File "pySim/esim/saip/__init__.py", line 1552, in parse_der self.pe_list.append(ProfileElement.from_der(first_tlv, pe_sequence=self)) ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "pySim/esim/saip/__init__.py", line 557, in from_der inst._post_decode() ~~~~~~~~~~~~~~~~~^^ File "pySim/esim/saip/__init__.py", line 668, in _post_decode self.pe2files() ~~~~~~~~~~~~~^^ File "pySim/esim/saip/__init__.py", line 655, in pe2files file = File(k, v, template.files_by_pename.get(k, None)) File "pySim/esim/saip/__init__.py", line 133, in __init__ self.from_tuples(l) ~~~~~~~~~~~~~~~~^^^ File "pySim/esim/saip/__init__.py", line 358, in from_tuples self._body = self.file_content_from_tuples(l) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^ File "pySim/esim/saip/__init__.py", line 393, in file_content_from_tuples stream.write(self.template.expand_default_value_pattern(self.file_size)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^ File "pySim/esim/saip/templates.py", line 123, in expand_default_value_pattern raise ValueError("%s does not have a default length" % self) ValueError: FileTemplate(EF.SUCI_Calc_Info) does not have a default length ```
Change-Id: I7c4a0914aef1049a416e6b091f23daab39a1dd9c --- M pySim/esim/saip/__init__.py 1 file changed, 4 insertions(+), 2 deletions(-)
Approvals: Jenkins Builder: Verified neels: Looks good to me, approved
diff --git a/pySim/esim/saip/__init__.py b/pySim/esim/saip/__init__.py index 7c6a557..f4ac305 100644 --- a/pySim/esim/saip/__init__.py +++ b/pySim/esim/saip/__init__.py @@ -291,6 +291,10 @@ dfName = fileDescriptor.get('dfName', None) if dfName: self.df_name = dfName + efFileSize = fileDescriptor.get('efFileSize', None) + if efFileSize: + self._file_size = self._decode_file_size(efFileSize) + pefi = fileDescriptor.get('proprietaryEFInfo', {}) securityAttributesReferenced = fileDescriptor.get('securityAttributesReferenced', None) if securityAttributesReferenced: @@ -300,13 +304,11 @@ fdb_dec = fd_dec['file_descriptor_byte'] self.shareable = fdb_dec['shareable'] if fdb_dec['file_type'] == 'working_ef': - efFileSize = fileDescriptor.get('efFileSize', None) if fd_dec['num_of_rec']: self.nb_rec = fd_dec['num_of_rec'] if fd_dec['record_len']: self.rec_len = fd_dec['record_len'] if efFileSize: - self._file_size = self._decode_file_size(efFileSize) if self.rec_len and self.nb_rec == None: # compute the number of records from file size and record length self.nb_rec = self._file_size // self.rec_len