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

  1. Clamp the offset: Math.min(Math.max(0, off), buffer.byteLength).
  2. Validate the offset against buffer.byteLength before constructing.
  3. Sanitize offsets parsed from file/network data before use.
  4. 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

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.