forked from msgpack/msgpack-javascript
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdecode-max-length.test.ts
95 lines (79 loc) · 2.71 KB
/
decode-max-length.test.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
import assert from "assert";
import { encode, decode, decodeAsync } from "../src";
import type { DecoderOptions } from "../src";
describe("decode with max${Type}Length specified", () => {
async function* createStream<T>(input: T) {
yield input;
}
context("maxStrLength", () => {
const input = encode("foo");
const options = { maxStrLength: 1 } satisfies DecoderOptions;
it("throws errors (synchronous)", () => {
assert.throws(() => {
decode(input, options);
}, /max length exceeded/i);
});
it("throws errors (asynchronous)", async () => {
await assert.rejects(async () => {
await decodeAsync(createStream(input), options);
}, /max length exceeded/i);
});
});
context("maxBinLength", () => {
const input = encode(Uint8Array.from([1, 2, 3]));
const options = { maxBinLength: 1 } satisfies DecoderOptions;
it("throws errors (synchronous)", () => {
assert.throws(() => {
decode(input, options);
}, /max length exceeded/i);
});
it("throws errors (asynchronous)", async () => {
await assert.rejects(async () => {
await decodeAsync(createStream(input), options);
}, /max length exceeded/i);
});
});
context("maxArrayLength", () => {
const input = encode([1, 2, 3]);
const options = { maxArrayLength: 1 } satisfies DecoderOptions;
it("throws errors (synchronous)", () => {
assert.throws(() => {
decode(input, options);
}, /max length exceeded/i);
});
it("throws errors (asynchronous)", async () => {
await assert.rejects(async () => {
await decodeAsync(createStream(input), options);
}, /max length exceeded/i);
});
});
context("maxMapLength", () => {
const input = encode({ foo: 1, bar: 1, baz: 3 });
const options = { maxMapLength: 1 } satisfies DecoderOptions;
it("throws errors (synchronous)", () => {
assert.throws(() => {
decode(input, options);
}, /max length exceeded/i);
});
it("throws errors (asynchronous)", async () => {
await assert.rejects(async () => {
await decodeAsync(createStream(input), options);
}, /max length exceeded/i);
});
});
context("maxExtType", () => {
const input = encode(new Date());
// timextamp ext requires at least 4 bytes.
const options = { maxExtLength: 1 } satisfies DecoderOptions;
it("throws errors (synchronous)", () => {
assert.throws(() => {
decode(input, options);
}, /max length exceeded/i);
});
it("throws errors (asynchronous)", async () => {
await assert.rejects(async () => {
await decodeAsync(createStream(input), options);
}, /max length exceeded/i);
});
});
});