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:
+2
-2
@@ -3127,8 +3127,8 @@ const PARSE_INS = {
|
||||
function parseBerLen(hex, i) {
|
||||
const b = parseInt(hex.substr(i, 2), 16);
|
||||
if (b < 128) return {len: b, consumed: 2};
|
||||
const n = parseInt(hex.substr(i + 2, b * 2), 16);
|
||||
return {len: n, consumed: 2 + b * 2};
|
||||
const n = b & 0x7F;
|
||||
return {len: parseInt(hex.substr(i + 2, n * 2), 16), consumed: 2 + n * 2};
|
||||
}
|
||||
|
||||
function parseTlvList(hex) {
|
||||
|
||||
Reference in New Issue
Block a user