zloirock/core-js · error · RangeError
Wrong offset
Error message
Wrong offset
What it means
The non-native DataView polyfill constructor validates byteOffset: after converting with toIntegerOrInfinity, an offset below 0 or above buffer.byteLength throws RangeError 'Wrong offset'. This mirrors the spec's DataView(buffer, byteOffset [, length]) offset validation.
Source
Thrown at packages/core-js/internals/array-buffer.js:127
type: ARRAY_BUFFER,
bytes: fill(Array(byteLength), 0),
byteLength: byteLength
});
if (!DESCRIPTORS) {
this.byteLength = byteLength;
this.detached = false;
}
};
ArrayBufferPrototype = $ArrayBuffer[PROTOTYPE];
$DataView = function DataView(buffer, byteOffset, byteLength) {
anInstance(this, DataViewPrototype);
anInstance(buffer, ArrayBufferPrototype);
var bufferState = getInternalArrayBufferState(buffer);
var bufferLength = bufferState.byteLength;
var offset = toIntegerOrInfinity(byteOffset);
if (offset < 0 || offset > bufferLength) throw new RangeError('Wrong offset');
byteLength = byteLength === undefined ? bufferLength - offset : toIndex(byteLength);
if (offset + byteLength > bufferLength) throw new RangeError(WRONG_LENGTH);
setInternalState(this, {
type: DATA_VIEW,
buffer: buffer,
byteLength: byteLength,
byteOffset: offset,
bytes: bufferState.bytes
});
if (!DESCRIPTORS) {
this.buffer = buffer;
this.byteLength = byteLength;
this.byteOffset = offset;
}
};
DataViewPrototype = $DataView[PROTOTYPE];
View on GitHub (pinned to 84e45fba09)
Solutions
- Clamp the offset: Math.min(Math.max(0, off), buffer.byteLength).
- Validate the offset against buffer.byteLength before constructing.
- Sanitize offsets parsed from file/network data before use.
- Catch RangeError around DataView construction when offsets are data-derived.
Example fix
// before var dv = new DataView(buf, buf.byteLength + 8); // RangeError: Wrong offset // after var off = Math.min(buf.byteLength, headerOffset); var dv = new DataView(buf, off);
Defensive patterns
Strategy: validation
Validate before calling
function safeDataView(buf, off, len){ off = Math.min(Math.max(0, off | 0), buf.byteLength); return new DataView(buf, off, len === undefined ? undefined : Math.min(len, buf.byteLength - off)); } Try / catch
try { dv = new DataView(buf, off); } catch (e) { if (e instanceof RangeError && /Wrong offset/.test(e.message)) { off = 0; dv = new DataView(buf, off); } else throw e; } Prevention
- Clamp byteOffset into [0, buffer.byteLength] before construction.
- Sanitize offsets parsed from binary headers before trusting them.
- Check sign of computed offsets (pointer arithmetic errors).
- Remember offsets are relative to the buffer, not to a previously created view.
When it happens
Trigger: new DataView(buffer, negativeNumber), new DataView(buf, buf.byteLength + 1), or a non-numeric offset coerced to NaN/negative. Also triggered transitively by code constructing views with computed offsets from headers.
Common situations: Offset parsed from a binary header that is garbage/truncated data; sign errors in manual pointer arithmetic; reusing an offset computed against a larger buffer on a smaller one.
Related errors
AI-assisted analysis of zloirock/core-js@84e45fba09 (2026-08-30).
Data as JSON: /api/errors/b759de80093feace.
Report an issue: GitHub.