gchq/CyberChef · error · OperationError

${error}

Error message

${error}

What it means

Protobuf Encode delegates to Protobuf.encode and wraps any thrown error in an OperationError surfaced as ${error}. Encode failures come from JSON that does not conform to the .proto schema: wrong field types, unknown field numbers, missing required fields, an invalid schema, or values that cannot be encoded (e.g. non-integer for an int64 field). The wrapper normalizes internal library errors into CyberChef's OperationError channel.

Solutions

  1. Ensure the .proto schema is valid (validate with protoc).
  2. Match JSON field names/numbers and types to the schema exactly.
  3. Read the wrapped ${error} message — it identifies the offending field/type.
  4. Start with 'Show Types' on a decode of a known-good message to learn the expected shape, then encode to match.

Example fix

// before: string where int64 expected
run({ id: "abc" }, [schema]);

// after: numeric value matching schema
run({ id: 123 }, [schema]);
Defensive patterns

Strategy: try-catch

Validate before calling

// Validate schema parses and JSON keys match declared field numbers/types before encoding.
import protobuf from "protobufjs";
async function schemaIsValid(protoText) {
  try { await protobuf.parse(protoText); return true; } catch { return false; }
}

Type guard

function isPlainObject(v) {
  return typeof v === "object" && v !== null && !Array.isArray(v);
}

Try / catch

try {
  return protobufEncode.run(inputObj, [schema]);
} catch (e) {
  // e.message is the wrapped Protobuf.encode error; fix the offending field
  throw e;
}

Prevention

When it happens

Trigger: Passing a JSON object whose keys/types do not match the .proto schema; an unparseable schema; a field value of the wrong type (string for an int field); missing required fields; enum values outside the declared set.

Common situations: Schema/data mismatch (encoding against a different schema than the producer used); hand-written JSON with typos in field names or numbers; an empty or invalid .proto; values like floats where integers are required.

Related errors


AI-assisted analysis of gchq/CyberChef@4290ea7539 (2026-08-13). Data as JSON: /api/errors/219eaa9259bf9f3f. Report an issue: GitHub.

Appendix: source

Thrown at src/core/operations/ProtobufEncode.mjs:48

                name: "Schema (.proto text)",
                type: "text",
                value: "",
                rows: 8,
                hint: "Drag and drop is enabled on this ingredient"
            }
        ];
    }

    /**
     * @param {Object} input
     * @param {Object[]} args
     * @returns {ArrayBuffer}
     */
    run(input, args) {
        try {
            return Protobuf.encode(input, args);
        } catch (error) {
            throw new OperationError(error);
        }
    }

}

export default ProtobufEncode;

View on GitHub (pinned to 4290ea7539)