lutzroeder/netron · error · Error

Expected 'end'.

Error message

Expected 'end'.

What it means

Generated protobuf requirement check: after decoding a caffe2.TensorProto.Segment from binary, the required field 'end' (field 2) was absent. decode() enforces that both 'begin' and 'end' exist on the decoded message before returning it.

Source

Thrown at source/caffe2-proto.js:176

        while (reader.position < end) {
            const tag = reader.uint32();
            switch (tag >>> 3) {
                case 1:
                    message.begin = reader.int64();
                    break;
                case 2:
                    message.end = reader.int64();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
            }
        }
        if (!Object.prototype.hasOwnProperty.call(message, 'begin')) {
            throw new Error("Expected 'begin'.");
        }
        if (!Object.prototype.hasOwnProperty.call(message, 'end')) {
            throw new Error("Expected 'end'.");
        }
        return message;
    }

    static decodeText(reader) {
        const message = new caffe2.TensorProto.Segment();
        reader.start();
        while (!reader.end()) {
            const tag = reader.tag();
            switch (tag) {
                case "begin":
                    message.begin = reader.int64();
                    break;
                case "end":
                    message.end = reader.int64();
                    break;
                default:
                    reader.field(tag, message);

View on GitHub (pinned to d8a543f5f8)

Solutions

  1. Re-export/regenerate the caffe2 model file
  2. Verify file integrity (size/checksum) to rule out truncation
  3. Confirm the loader and producer use compatible caffe2 proto versions
  4. Test decoding with caffe2's own tooling to isolate schema mismatch
Defensive patterns

Strategy: validation

Type guard

function isSegment(m) {
  return m != null && typeof m === 'object' &&
    Object.prototype.hasOwnProperty.call(m, 'begin') &&
    Object.prototype.hasOwnProperty.call(m, 'end');
}

Try / catch

try {
  const seg = caffe2.TensorProto.Segment.decode(reader);
} catch (e) {
  if (e.message === "Expected 'end'.") { /* invalid input; abort model load */ }
  else throw e;
}

Prevention

When it happens

Trigger: Decoding a Segment message whose wire bytes stop after 'begin' (truncated) or lack field 2 entirely; typically when parsing a caffe2 model file with mismatched or corrupt data.

Common situations: Truncated model/init files, schema version drift between producer and this library's caffe2.proto, or binary data being interpreted as the wrong message type.

Related errors


AI-assisted analysis of lutzroeder/netron@d8a543f5f8 (2026-08-27). Data as JSON: /api/errors/a13a2ad9f5675661. Report an issue: GitHub.