Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 19 additions & 1 deletion packages/preview2-shim/lib/browser/filesystem.js
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,22 @@ const timeZero = {
nanoseconds: 0,
};

/** Coerce the given object to a safe integer */
function coerceToSafeIntegerNumber(obj) {
let n;
if (typeof obj === "number") {
n = obj;
} else if (typeof obj == "bigint") {
n = Number(obj);
} else {
throw new TypeError(`unexpected non-numeric type: ${obj}`);
}
if (n > Number.MAX_SAFE_INTEGER) {
throw new TypeError(`excessively large number: ${n}`);
}
return n;
}

function getChildEntry(parentEntry, subpath, openFlags) {
if (subpath === "." && _rootPreopen && descriptorGetEntry(_rootPreopen[0]) === parentEntry) {
subpath = _getCwd();
Expand Down Expand Up @@ -188,7 +204,9 @@ class Descriptor {

read(length, offset) {
const source = getSource(this.#entry);
return [source.slice(offset, offset + length), offset + length >= source.byteLength];
const off = coerceToSafeIntegerNumber(offset);
const len = coerceToSafeIntegerNumber(length);
return [source.slice(off, off + len), off + len >= source.byteLength];
}

write(buffer, offset) {
Expand Down
Loading