{"record":{"id":"596001b0e18e7feb","repo":"caddyserver/caddy","slug":"errinvalidsplitpath","errorCode":"ErrInvalidSplitPath","errorMessage":"split path contains non-ASCII characters","messagePattern":"split path contains non-ASCII characters","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"modules/caddyhttp/reverseproxy/fastcgi/fastcgi.go","lineNumber":39,"sourceCode":"\t\"net\"\n\t\"net/http\"\n\t\"path/filepath\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\t\"unicode/utf8\"\n\n\t\"go.uber.org/zap\"\n\t\"go.uber.org/zap/zapcore\"\n\n\t\"github.com/caddyserver/caddy/v2\"\n\t\"github.com/caddyserver/caddy/v2/modules/caddyhttp\"\n\t\"github.com/caddyserver/caddy/v2/modules/caddyhttp/reverseproxy\"\n\t\"github.com/caddyserver/caddy/v2/modules/caddytls\"\n)\n\nvar (\n\tErrInvalidSplitPath = errors.New(\"split path contains non-ASCII characters\")\n\n\tnoopLogger = zap.NewNop()\n)\n\nfunc init() {\n\tcaddy.RegisterModule(Transport{})\n}\n\n// Transport facilitates FastCGI communication.\ntype Transport struct {\n\t// Use this directory as the fastcgi root directory. Defaults to the root\n\t// directory of the parent virtual host.\n\tRoot string `json:\"root,omitempty\"`\n\n\t// The path in the URL will be split into two, with the first piece ending\n\t// with the value of SplitPath. The first piece will be assumed as the\n\t// actual resource (CGI script) name, and the second piece will be set to\n\t// PATH_INFO for the CGI script to use.","sourceCodeStart":21,"sourceCodeEnd":57,"githubUrl":"https://github.com/caddyserver/caddy/blob/50e54ee279aa1e504fe218ca49ab6ae16c100410/modules/caddyhttp/reverseproxy/fastcgi/fastcgi.go#L21-L57","documentation":"The stored config.bin loaded successfully but failed binary unmarshaling (echConfig.UnmarshalBinary — cryptobyte parsing of the ECHConfig wire structure), and the cleanup folder delete also failed. The config bytes are corrupt/truncated or in an incompatible format, and storage cannot be cleaned to free the ID.","triggerScenarios":"cfg.UnmarshalBinary(echConfigBytes) errors (bad version, truncated HPKE public key, invalid length prefixes) AND storage.Delete of the folder errors (read-only/outage).","commonSituations":"Caddy version upgrades that changed the stored binary layout; storage corruption; interrupted writes leaving truncated config.bin; combined with a read-only or failing storage backend.","solutions":["Restore storage write access so cleanup can succeed.","Manually delete the affected ech/configs/<id> folder and restart to regenerate the config.","When upgrading Caddy versions with ECH enabled, plan to reset ech/configs if old-format configs cause parse failures.","Ensure the storage backend writes atomically (or at least completes) to avoid truncated files."],"exampleFix":null,"handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":"When binary unmarshal fails and cleanup succeeds, Caddy already self-heals (warns, frees the ID). Only when the delete also fails must you intervene: restore storage, remove the named folder, restart.","preventionTips":["Reset ech/configs across major Caddy upgrades to avoid stale binary formats.","Ensure storage atomicity to prevent truncated config.bin writes.","Keep cluster instances version-aligned."],"tags":["caddy","caddytls","ech","storage","corruption","cleanup"],"backgroundTag":null,"analyzedSha":"50e54ee279aa1e504fe218ca49ab6ae16c100410","analyzedAt":"2026-08-15T09:20:21.641Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}