fix BER long-form lengths: parseBerLen read b length bytes instead of b & 0x7F

parseBerLen treated the first long-form length byte (0x81/0x82/...) as the
count of length bytes, so any TLV with a long-form length parsed as
garbage: the profiler FCI decoder returned ok:false (decoded preview
disappeared and never came back after editing an FCP with a '62 81 xx'
outer length or a long-form inner TLV), and the same bug hit parseTlvList
(C-APDU parser, INSTALL param walker), parseBerScript (expanded script
rows >= 128 bytes) and readLvField.

Per ISO 7816-4 5.2 / UICC_SPECS.md 1.7 the long form is 81-84 followed by
(b & 0x7F) length bytes. Fixed; short-form behavior unchanged.

New tests: parseBerLen short/81/82 forms, parseTlvList long-form outer and
inner TLVs, fcpDecode long-form regression (81/82, nested A5, >=128-byte
FCP) incl. the editor preview path. SW cache v73 -> v74.
This commit is contained in:
2026-09-11 21:32:23 +03:00
parent 6bfbb00994
commit 1e067dc883
4 changed files with 65 additions and 3 deletions
+1 -1
View File
@@ -1,4 +1,4 @@
const CACHE = 'otaman-v73';
const CACHE = 'otaman-v74';
const URLS = [
'index.html',
'help.html',