From c975251a486f272f0b214f0b8c7240ba0476e17b Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Fri, 11 Feb 2022 16:31:15 +0100 Subject: [PATCH] filesystem: Don't pass empty string to parse_select_response() This happens e.g. when selecting the ARA-M applet on sysmoISIM-SJA2: pySIM-shell (MF)> select ADF.ARA-M -> 00a4040409 a00000015141434c00 <- 9000: Traceback (most recent call last): File "/space/home/laforge/.local/lib/python3.9/site-packages/cmd2/cmd2.py", line 2064, in onecmd_plus_hooks stop = self.onecmd(statement, add_to_history=add_to_history) File "/space/home/laforge/.local/lib/python3.9/site-packages/cmd2/cmd2.py", line 2494, in onecmd stop = func(statement) File "/space/home/laforge/projects/git/pysim/./pySim-shell.py", line 750, in do_select fcp_dec = self._cmd.rs.select(path, self._cmd) File "/space/home/laforge/projects/git/pysim/pySim/filesystem.py", line 1314, in select select_resp = f.decode_select_response(data) File "/space/home/laforge/projects/git/pysim/pySim/filesystem.py", line 193, in decode_select_response return self.parent.decode_select_response(data_hex) File "/space/home/laforge/projects/git/pysim/pySim/filesystem.py", line 378, in decode_select_response return profile.decode_select_response(data_hex) File "/space/home/laforge/projects/git/pysim/pySim/ts_102_221.py", line 796, in decode_select_response t.from_tlv(h2b(resp_hex)) File "/space/home/laforge/projects/git/pysim/pySim/tlv.py", line 231, in from_tlv (rawtag, remainder) = self.__class__._parse_tag_raw(do) File "/space/home/laforge/projects/git/pysim/pySim/tlv.py", line 258, in _parse_tag_raw return bertlv_parse_tag_raw(do) File "/space/home/laforge/projects/git/pysim/pySim/utils.py", line 208, in bertlv_parse_tag_raw if binary[0] == 0xff and len(binary) == 1 or binary[0] == 0xff and binary[1] == 0xff: IndexError: bytearray index out of range EXCEPTION of type 'IndexError' occurred with message: 'bytearray index out of range' Change-Id: I910e6deba27d1483dff1e986c89f1a1b2165f49b --- pySim/filesystem.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pySim/filesystem.py b/pySim/filesystem.py index a323c5b3..b8b6152e 100644 --- a/pySim/filesystem.py +++ b/pySim/filesystem.py @@ -363,7 +363,7 @@ class CardMF(CardDF): {x.name: x for x in self.applications.values() if x.name}) return sels - def decode_select_response(self, data_hex: str) -> object: + def decode_select_response(self, data_hex: Optional[str]) -> object: """Decode the response to a SELECT command. This is the fall-back method which automatically defers to the standard decoding @@ -372,6 +372,9 @@ class CardMF(CardDF): install specific decoding. """ + if not data_hex: + return data_hex + profile = self.get_profile() if profile: