Skip to content

Commit 3d2c5b0

Browse files
authored
Merge commit from fork
1 parent f2c235f commit 3d2c5b0

7 files changed

Lines changed: 45 additions & 10 deletions

File tree

src/test/v1.test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -204,8 +204,8 @@ describe('v1', () => {
204204
test('throws RangeError for out-of-range indexes', () => {
205205
const buf15 = new Uint8Array(15);
206206
const buf30 = new Uint8Array(30);
207-
assert.throws(() => v1({}, buf15));
208-
assert.throws(() => v1({}, buf30, -1));
209-
assert.throws(() => v1({}, buf30, 15));
207+
assert.throws(() => v1({}, buf15), RangeError);
208+
assert.throws(() => v1({}, buf30, -1), RangeError);
209+
assert.throws(() => v1({}, buf30, 15), RangeError);
210210
});
211211
});

src/test/v35.test.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,14 @@ describe('v35', () => {
161161
assert.throws(() => v3('hello.example.com', null, new Uint8Array(16)));
162162
});
163163

164+
test('v3 throws RangeError for out-of-range indexes', () => {
165+
const buf15 = new Uint8Array(15);
166+
const buf30 = new Uint8Array(30);
167+
assert.throws(() => v3('hello.example.com', v3.DNS, buf15), RangeError);
168+
assert.throws(() => v3('hello.example.com', v3.DNS, buf30, -1), RangeError);
169+
assert.throws(() => v3('hello.example.com', v3.DNS, buf30, 15), RangeError);
170+
});
171+
164172
test('v5', () => {
165173
// Expect to get the same results as http://tools.adjet.org/uuid-v5
166174
assert.strictEqual(
@@ -269,6 +277,14 @@ describe('v35', () => {
269277
assert.throws(() => v5('hello.example.com', null, new Uint8Array(16)));
270278
});
271279

280+
test('v5 throws RangeError for out-of-range indexes', () => {
281+
const buf15 = new Uint8Array(15);
282+
const buf30 = new Uint8Array(30);
283+
assert.throws(() => v5('hello.example.com', v5.DNS, buf15), RangeError);
284+
assert.throws(() => v5('hello.example.com', v5.DNS, buf30, -1), RangeError);
285+
assert.throws(() => v5('hello.example.com', v5.DNS, buf30, 15), RangeError);
286+
});
287+
272288
test('v3/v5 constants', () => {
273289
assert.strictEqual(v3.DNS, '6ba7b810-9dad-11d1-80b4-00c04fd430c8');
274290
assert.strictEqual(v3.URL, '6ba7b811-9dad-11d1-80b4-00c04fd430c8');

src/test/v4.test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -117,8 +117,8 @@ describe('v4', () => {
117117
test('throws RangeError for out-of-range indexes', () => {
118118
const buf15 = new Uint8Array(15);
119119
const buf30 = new Uint8Array(30);
120-
assert.throws(() => v4({}, buf15));
121-
assert.throws(() => v4({}, buf30, -1));
122-
assert.throws(() => v4({}, buf30, 15));
120+
assert.throws(() => v4({}, buf15), RangeError);
121+
assert.throws(() => v4({}, buf30, -1), RangeError);
122+
assert.throws(() => v4({}, buf30, 15), RangeError);
123123
});
124124
});

src/test/v6.test.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,14 @@ describe('v6', () => {
8080
assert.deepEqual(buffer, expectedBuf);
8181
});
8282

83+
test('throws RangeError for out-of-range indexes', () => {
84+
const buf15 = new Uint8Array(15);
85+
const buf30 = new Uint8Array(30);
86+
assert.throws(() => v6({}, buf15), RangeError);
87+
assert.throws(() => v6({}, buf30, -1), RangeError);
88+
assert.throws(() => v6({}, buf30, 15), RangeError);
89+
});
90+
8391
test('v1 -> v6 conversion', () => {
8492
const id = v1ToV6(V1_ID);
8593
assert.equal(id, V6_ID);

src/test/v7.test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -293,8 +293,8 @@ describe('v7', () => {
293293
test('throws RangeError for out-of-range indexes', () => {
294294
const buf15 = new Uint8Array(15);
295295
const buf30 = new Uint8Array(30);
296-
assert.throws(() => v7({}, buf15));
297-
assert.throws(() => v7({}, buf30, -1));
298-
assert.throws(() => v7({}, buf30, 15));
296+
assert.throws(() => v7({}, buf15), RangeError);
297+
assert.throws(() => v7({}, buf30, -1), RangeError);
298+
assert.throws(() => v7({}, buf30, 15), RangeError);
299299
});
300300
});

src/v35.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,12 @@ export default function v35<TBuf extends Uint8Array = Uint8Array>(
5555
bytes[8] = (bytes[8] & 0x3f) | 0x80;
5656

5757
if (buf) {
58-
offset = offset || 0;
58+
offset ??= 0;
59+
if (offset < 0 || offset + 16 > buf.length) {
60+
throw new RangeError(
61+
`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`,
62+
);
63+
}
5964

6065
for (let i = 0; i < 16; ++i) {
6166
buf[offset + i] = bytes[i];

src/v6.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,12 @@ function v6<TBuf extends Uint8Array = Uint8Array>(
3131

3232
// Return as a byte array if requested
3333
if (buf) {
34+
if (offset < 0 || offset + 16 > buf.length) {
35+
throw new RangeError(
36+
`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`,
37+
);
38+
}
39+
3440
for (let i = 0; i < 16; i++) {
3541
buf[offset + i] = bytes[i];
3642
}

0 commit comments

Comments
 (0)