Skip to content

Commit 145e81d

Browse files
committed
v1.8.8 fix BufferReader readBytes bounds error on views
1 parent bf60e27 commit 145e81d

File tree

8 files changed

+120
-91
lines changed

8 files changed

+120
-91
lines changed

dist/index.cjs

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

dist/index.cjs.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/index.mjs

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

dist/index.mjs.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package-lock.json

Lines changed: 97 additions & 83 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "tinybuf",
3-
"version": "1.8.7",
3+
"version": "1.8.8",
44
"author": "Reece Como <reece.como@gmail.com>",
55
"authors": [
66
"Reece Como <reece.como@gmail.com>",

src/__tests__/BufferReader.test.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,21 @@
11
import { BufferReader } from "../core/lib/BufferReader";
22

33
describe("ReadState", () => {
4-
describe("readBuffer(...)", () => {
4+
describe("$readBytes(...)", () => {
55
it("should throw RangeError when attempting to read beyond the buffer", () => {
66
const buffer = new Uint8Array([1, 2, 3]).buffer;
77
const data = new BufferReader(buffer);
88
expect(() => data.$readBytes(4)).toThrow(RangeError);
99
});
10+
11+
test("regression case: BufferReader throw on a view", () => {
12+
const original = new Uint8Array([10, 11, 12, 13, 14, 15]);
13+
14+
const viewBytes = new Uint8Array(original.buffer, 2, 4);
15+
const bufferReader = new BufferReader(viewBytes);
16+
17+
expect(() => bufferReader.$readBytes(4)).not.toThrow(RangeError);
18+
expect(() => bufferReader.$readBytes(6)).toThrow(RangeError);
19+
});
1020
});
1121
});

src/core/lib/BufferReader.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,11 +73,16 @@ export class BufferReader {
7373

7474
/** @throws RangeError if exceeds length */
7575
public $readBytes(bytes: number): Uint8Array {
76-
if (this._$dataView.byteOffset + this.i + bytes > this._$dataView.byteLength) {
76+
if (this.i + bytes > this._$dataView.byteLength) {
7777
throw new RangeError("exceeded bytes");
7878
}
7979

80-
const view = new Uint8Array(this._$dataView.buffer, this._$dataView.byteOffset + this.i, bytes);
80+
const view = new Uint8Array(
81+
this._$dataView.buffer,
82+
this._$dataView.byteOffset + this.i,
83+
bytes
84+
);
85+
8186
this.i += bytes;
8287

8388
return view;

0 commit comments

Comments
 (0)