gchq/CyberChef · error · OperationError
Unknown Frame Identifier: ${id}
Error message
Unknown Frame Identifier: ${id} What it means
Thrown by the Extract ID3 operation when a frame identifier read from the ID3 tag is not found in the known FRAME_DESCRIPTIONS dictionary and is not the null-padding terminator. The parser walks frames sequentially; an unrecognized 3- or 4-byte ID indicates either tag corruption, an unsupported/proprietary frame type, or a parsing desync from a malformed earlier frame.
Source
Thrown at src/core/operations/ExtractID3.mjs:132
// Frame Identifier of frame
let id = String.fromCharCode(input[0]) + String.fromCharCode(input[1]) + String.fromCharCode(input[2]);
input = input.slice(3);
// If the next character is non-zero it is an identifier
if (input[0] !== 0) {
id += String.fromCharCode(input[0]);
}
input = input.slice(1);
if (id in FRAME_DESCRIPTIONS) {
const [frame, size] = readFrame(id);
tags[id] = frame;
pos += 10 + size;
} else if (id === "\x00\x00\x00") { // end of header
break;
} else {
throw new OperationError("Unknown Frame Identifier: " + id);
}
}
result.Tags = tags;
return result;
}
/**
* Displays the extracted data in a more accessible format for web apps.
* @param {JSON} data
* @returns {html}
*/
present(data) {
if (!data || !Object.prototype.hasOwnProperty.call(data, "Tags"))
return JSON.stringify(data, null, 4);
let output = `<table class="table table-hover table-sm table-bordered table-nonfluid">View on GitHub (pinned to 4290ea7539)
Solutions
- Verify the MP3 file has a well-formed, standard ID3v2 tag (v2.2–v2.4).
- Try re-tagging the file with a standard tag editor to remove custom/proprietary frames.
- Use the Extract Audio Metadata operation which has more robust ID3 parsing.
- Inspect the raw bytes around the reported frame offset to identify corruption.
Example fix
// before: MP3 with corrupted/custom frame ID 'XXYZ' -> error // after: re-save MP3 with standard ID3v2.3 frames using a tag editor
Defensive patterns
Strategy: try-catch
Try / catch
try {
const result = chef.extractID3(input);
} catch (e) {
if (e.message.startsWith('Unknown Frame Identifier')) {
// Tag may contain proprietary frames or be corrupt; use Extract Audio Metadata instead
} else throw e;
} Prevention
- Use well-formed, standard ID3v2 tags (v2.2–v2.4).
- Prefer Extract Audio Metadata for robustness against custom frames.
- Re-tag files with standard editors if frames are non-standard.
When it happens
Trigger: run(input, args) inside the while loop (line 113) processing frames. A frame ID assembled from input bytes does not match any key in FRAME_DESCRIPTIONS and is not '\x00\x00\x00' (end-of-header padding), reaching the else branch at line 131.
Common situations: Corrupted or truncated ID3 tags, custom/proprietary frame types not in the standard list, or a desync caused by incorrect size decoding of a preceding frame shifting the read position. Also with ID3v2.4 extended headers or unsynchronisation that the parser does not handle.
Related errors
- No valid ID3 header.
- Malformed LZNT1 stream: Block too small! Has the stream been
- Malformed LZNT1 stream: Invalid shift!
- Invalid ciphertext length: ${cipherText.length} bytes. Must
- No input data. Load an audio file (drag/drop or use the open
AI-assisted analysis of gchq/CyberChef@4290ea7539 (2026-08-13).
Data as JSON: /api/errors/37d7b3a61dbb2db2.
Report an issue: GitHub.