{"record":{"id":"bf17e858b3c11e69","repo":"spectreconsole/spectre.console","slug":"invalid-figlet-font-header-signature","errorCode":null,"errorMessage":"Invalid Figlet font header signature","messagePattern":"Invalid Figlet font header signature","errorType":"exception","errorClass":"InvalidOperationException","httpStatus":null,"severity":"error","filePath":"src/Spectre.Console/Widgets/Figlet/FigletFontParser.cs","lineNumber":112,"sourceCode":"        return int.TryParse(index, style, CultureInfo.InvariantCulture, out result);\n    }\n\n    private static FigletHeader ParseHeader(string text)\n    {\n        if (string.IsNullOrWhiteSpace(text))\n        {\n            throw new InvalidOperationException(\"Invalid Figlet font\");\n        }\n\n        var parts = text.SplitWords(StringSplitOptions.RemoveEmptyEntries);\n        if (parts.Length < 6)\n        {\n            throw new InvalidOperationException(\"Invalid Figlet font header\");\n        }\n\n        if (!IsValidSignature(parts[0]))\n        {\n            throw new InvalidOperationException(\"Invalid Figlet font header signature\");\n        }\n\n        int? fullLayout = null;\n        if (parts.Length > 7 && int.TryParse(parts[7], NumberStyles.Integer, CultureInfo.InvariantCulture, out var fl))\n        {\n            fullLayout = fl;\n        }\n\n        return new FigletHeader\n        {\n            Hardblank = parts[0][5],\n            Height = int.Parse(parts[1], CultureInfo.InvariantCulture),\n            Baseline = int.Parse(parts[2], CultureInfo.InvariantCulture),\n            MaxLength = int.Parse(parts[3], CultureInfo.InvariantCulture),\n            OldLayout = int.Parse(parts[4], CultureInfo.InvariantCulture),\n            CommentLines = int.Parse(parts[5], CultureInfo.InvariantCulture),\n            FullLayout = fullLayout,\n        };","sourceCodeStart":94,"sourceCodeEnd":130,"githubUrl":"https://github.com/spectreconsole/spectre.console/blob/0acc92fada6c42f13984e79c2b5f3d993bdfb099/src/Spectre.Console/Widgets/Figlet/FigletFontParser.cs#L94-L130","documentation":"Thrown by ParseHeader when the first token of the header fails the IsValidSignature check. A valid FIGlet signature begins with 'flf2' followed by a single character and the hardblank (e.g. 'flf2a$'). Any deviation causes this error.","triggerScenarios":"Loading a file that is not a FIGlet font at all, or a FIGlet font with a corrupted/edited magic-number signature in its first token.","commonSituations":"Pointing the loader at a plain text file, a Terrafig or other format, or a font whose header was manually altered breaking the flf2 signature.","solutions":["Confirm the file is genuinely a FIGlet (flf) font by checking the first token starts with 'flf2'.","Re-download the font from the official FIGlet font archive.","Validate the signature programmatically before loading."],"exampleFix":"// before\nvar font = FigletFont.Load(File.ReadAllText(\"not-a-font.txt\"));\n\n// after\nvar content = File.ReadAllText(\"standard.flf\");\nif (!content.StartsWith(\"flf2\")) throw new InvalidOperationException(\"Not a FIGlet font\");\nvar font = FigletFont.Load(content);","handlingStrategy":"validation","validationCode":"var signature = source.SplitLines().FirstOrDefault()?.SplitWords(StringSplitOptions.RemoveEmptyEntries).FirstOrDefault();\nif (signature == null || !signature.StartsWith(\"flf2\")) throw new ArgumentException(\"Not a valid FIGlet font signature\");","typeGuard":"static bool HasValidFigletSignature(string source)\n{\n    var sig = source.SplitLines().FirstOrDefault()?.SplitWords(StringSplitOptions.RemoveEmptyEntries).FirstOrDefault();\n    return sig != null && sig.StartsWith(\"flf2\");\n}","tryCatchPattern":null,"preventionTips":["Confirm the file magic number (flf2) before loading.","Download fonts only from the official FIGlet font archive."],"tags":["figlet","font-parsing","signature-validation","spectre-console"],"backgroundTag":null,"analyzedSha":"0acc92fada6c42f13984e79c2b5f3d993bdfb099","analyzedAt":"2026-08-13T18:27:21.983Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}