diff --git a/asn1.js b/asn1.js index 0ce75e5..58a18e4 100644 --- a/asn1.js +++ b/asn1.js @@ -459,6 +459,14 @@ export class ASN1 { let d1 = this.stream.parseOctetString(content, content + len, maxLength); return '(' + d1.size + ' byte)\n' + d1.str; } + if (len === 0) { + switch (this.tag.tagNumber) { + case 1: + case 2: + case 6: + return "invalid length 0"; + } + } switch (this.tag.tagNumber) { case 0x01: // BOOLEAN return (this.stream.get(content) === 0) ? 'false' : 'true'; -- 2.51.2 From 85ec3690f6394270c6c57a4b2d5d813ad265cbc1 Mon Sep 17 00:00:00 2001 From: Henri Manson Date: Mon, 25 Aug 2025 10:28:47 +0000 Subject: [PATCH 2/3] add comments --- asn1.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/asn1.js b/asn1.js index 58a18e4..f732b3b 100644 --- a/asn1.js +++ b/asn1.js @@ -461,9 +461,9 @@ export class ASN1 { } if (len === 0) { switch (this.tag.tagNumber) { - case 1: - case 2: - case 6: + case 0x01: // BOOLEAN + case 0x02: // INTEGER + case 0x06: // OBJECT_IDENTIFIER return "invalid length 0"; } } -- 2.51.2 From 0bd079b7759e701ab0f0cf06c5125643d4be6f3c Mon Sep 17 00:00:00 2001 From: Lapo Luchini Date: Thu, 23 Oct 2025 20:51:08 +0000 Subject: [PATCH 3/3] Use existing switch. --- asn1.js | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/asn1.js b/asn1.js index f732b3b..97a2eb3 100644 --- a/asn1.js +++ b/asn1.js @@ -459,24 +459,19 @@ export class ASN1 { let d1 = this.stream.parseOctetString(content, content + len, maxLength); return '(' + d1.size + ' byte)\n' + d1.str; } - if (len === 0) { - switch (this.tag.tagNumber) { - case 0x01: // BOOLEAN - case 0x02: // INTEGER - case 0x06: // OBJECT_IDENTIFIER - return "invalid length 0"; - } - } switch (this.tag.tagNumber) { case 0x01: // BOOLEAN + if (len === 0) return 'invalid length 0'; return (this.stream.get(content) === 0) ? 'false' : 'true'; case 0x02: // INTEGER + if (len === 0) return 'invalid length 0'; return this.stream.parseInteger(content, content + len); case 0x03: { // BIT_STRING let d = recurse(this, 'parseBitString', maxLength); return '(' + d.size + ' bit)\n' + d.str; } case 0x04: { // OCTET_STRING + if (len === 0) return 'invalid length 0'; let d = recurse(this, 'parseOctetString', maxLength); return '(' + d.size + ' byte)\n' + d.str; }