Skip to content

Commit 378003f

Browse files
committed
Check bindings out-of-bounds in strict mode
1 parent a145e34 commit 378003f

File tree

2 files changed

+29
-3
lines changed

2 files changed

+29
-3
lines changed

src/decode/decode.test.ts

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -349,4 +349,32 @@ describe("decode", () => {
349349
"index into the 'names' array",
350350
);
351351
});
352+
353+
it("throws if GENERATED_RANGE_BINDINGS is out-of-bounds in strict mode", () => {
354+
const encoder = new ItemEncoder();
355+
encoder.addUnsignedVLQs(Tag.GENERATED_RANGE_START, 0, 0).finishItem();
356+
encoder.addUnsignedVLQs(Tag.GENERATED_RANGE_BINDINGS).addSignedVLQs(2)
357+
.finishItem();
358+
encoder.addUnsignedVLQs(Tag.GENERATED_RANGE_END, 2).finishItem();
359+
const map = createMap(encoder.encode(), ["foo"]);
360+
361+
assertThrows(
362+
() => decode(map, { mode: DecodeMode.STRICT }),
363+
Error,
364+
"index into the 'names' array",
365+
);
366+
});
367+
368+
it("ignores if GENERATED_RANGE_BINDINGS is out-of-bounds in lax mode", () => {
369+
const encoder = new ItemEncoder();
370+
encoder.addUnsignedVLQs(Tag.GENERATED_RANGE_START, 0, 0).finishItem();
371+
encoder.addUnsignedVLQs(Tag.GENERATED_RANGE_BINDINGS).addSignedVLQs(2)
372+
.finishItem();
373+
encoder.addUnsignedVLQs(Tag.GENERATED_RANGE_END, 2).finishItem();
374+
const map = createMap(encoder.encode(), ["foo"]);
375+
376+
const info = decode(map, { mode: DecodeMode.LAX });
377+
378+
assertEquals(info.ranges[0]?.values, [""]);
379+
});
352380
});

src/decode/decode.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -320,10 +320,8 @@ class Decoder {
320320
if (valueIdx === -1) {
321321
range.values.push(null);
322322
} else {
323-
range.values.push(this.#names[valueIdx]);
323+
range.values.push(this.#resolveName(valueIdx));
324324
}
325-
326-
// TODO: Potentially throw if we decode an illegal index.
327325
}
328326
}
329327

0 commit comments

Comments
 (0)