{"record":{"id":"3f70c97712f5a9a0","repo":"derailed/k9s","slug":"osc52-payload-exceeds-encoded-size-limit-d-d","errorCode":null,"errorMessage":"osc52 payload exceeds encoded size limit (%d > %d)","messagePattern":"osc52 payload exceeds encoded size limit \\((.+?) > (.+?)\\)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"internal/view/clipboard.go","lineNumber":97,"sourceCode":"\t\treturn false\n\t}\n\tfi, err := f.Stat()\n\tif err != nil {\n\t\treturn false\n\t}\n\n\treturn fi.Mode()&os.ModeCharDevice != 0\n}\n\nfunc writeOSC52(text string) error {\n\tif !canTryOSC52() {\n\t\treturn fmt.Errorf(\"osc52 clipboard unavailable: stdout is not a tty or TERM=dumb\")\n\t}\n\n\tencoded := base64.StdEncoding.EncodeToString([]byte(text))\n\tmaxLen := osc52MaxEncodedLen()\n\tif len(encoded) > maxLen {\n\t\treturn fmt.Errorf(\"osc52 payload exceeds encoded size limit (%d > %d)\", len(encoded), maxLen)\n\t}\n\n\tterm := termValue()\n\tseq := osc52Sequence(encoded, os.Getenv(tmuxEnv) != \"\", strings.HasPrefix(term, screenTermPrefix))\n\t_, err := os.Stdout.WriteString(seq)\n\n\treturn err\n}\n\nfunc osc52MaxEncodedLen() int {\n\tv := strings.TrimSpace(os.Getenv(osc52MaxEnv))\n\tif v == \"\" {\n\t\treturn defaultOSC52MaxEncodedLen\n\t}\n\tn, err := strconv.Atoi(v)\n\tif err != nil || n <= 0 {\n\t\treturn defaultOSC52MaxEncodedLen\n\t}","sourceCodeStart":79,"sourceCodeEnd":115,"githubUrl":"https://github.com/derailed/k9s/blob/2d3ccc6ba2ce98c3781bfc441bb3e884f072774f/internal/view/clipboard.go#L79-L115","documentation":"The base64-encoded OSC52 payload exceeds the configured maximum length (osc52MaxEncodedLen, default cap overridable via an env var). The limit exists because terminals freeze or truncate on very large escape sequences, so oversized copies are refused before writing.","triggerScenarios":"Copying a very large payload — a big ConfigMap, a long log block, a full resource dump — such that base64 encoding pushes the sequence past the cap. Lowering the env limit makes it trigger on progressively smaller payloads.","commonSituations":"Copy-all on huge ConfigMaps/Secrets or full YAML of CRDs; terminals with small input buffers (some tmux/screen builds); users who set a conservative limit env var for stability.","solutions":["Copy a smaller slice: narrow the selection or copy a single field instead of the whole object.","Raise/disable the cap via the documented env var (e.g. export K9S_OSC52_MAX=... style variable read in osc52MaxEnv) if your terminal handles large sequences.","Install a system clipboard helper (xclip/pbcopy/wl-copy) so large payloads bypass OSC52 entirely.","For big ConfigMaps/Secrets, dump to a file instead of the clipboard."],"exampleFix":"# before\nexport OSC52_MAX=100000\n\n# after: raise limit for large copies\nexport OSC52_MAX=8000000","handlingStrategy":"validation","validationCode":"encoded := base64.StdEncoding.EncodeToString([]byte(text))\nif max := osc52MaxEncodedLen(); len(encoded) > max {\n    return writeExternalClipboard(text) // or trim payload\n}","typeGuard":null,"tryCatchPattern":"if err := writeOSC52(text); err != nil {\n    if strings.Contains(err.Error(), \"exceeds encoded size limit\") {\n    writeExternalClipboard(text)\n    }\n}","preventionTips":["Clip oversized payloads before copy (single field, not whole ConfigMap).","Set the limit env var high only if the terminal is known to handle it; otherwise keep default.","Route large dumps to files instead of the clipboard."],"tags":["clipboard","osc52","limits","terminal"],"backgroundTag":null,"analyzedSha":"2d3ccc6ba2ce98c3781bfc441bb3e884f072774f","analyzedAt":"2026-08-15T16:09:14.432Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}