{"record":{"id":"3397ff1108e497c5","repo":"fatedier/frp","slug":"s-contains-non-printable-character","errorCode":null,"errorMessage":"%s contains non-printable character","messagePattern":"(.+?) contains non-printable character","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/config/v1/validation/name.go","lineNumber":40,"sourceCode":"\nconst (\n\t// MaxRunIDLength is the maximum number of bytes accepted for a control run ID.\n\tMaxRunIDLength = 64\n)\n\nfunc validateIdentifier(value, kind string, maxLength int) error {\n\tif value == \"\" {\n\t\treturn fmt.Errorf(\"%s cannot be empty\", kind)\n\t}\n\tif len(value) > maxLength {\n\t\treturn fmt.Errorf(\"%s is too long: length %d exceeds maximum %d\", kind, len(value), maxLength)\n\t}\n\tif !utf8.ValidString(value) {\n\t\treturn fmt.Errorf(\"%s must be valid UTF-8\", kind)\n\t}\n\tfor _, r := range value {\n\t\tif !unicode.IsPrint(r) {\n\t\t\treturn fmt.Errorf(\"%s contains non-printable character\", kind)\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc ValidateRunID(runID string) error {\n\treturn validateIdentifier(runID, \"run id\", MaxRunIDLength)\n}\n","sourceCodeStart":22,"sourceCodeEnd":49,"githubUrl":"https://github.com/fatedier/frp/blob/6c8a8d0a97d03b44e9528d30b30c70cb9d61b405/pkg/config/v1/validation/name.go#L22-L49","documentation":"Error \"%s contains non-printable character\" thrown in fatedier/frp.","triggerScenarios":"Raised by validateIdentifier in pkg/config/v1/validation/name.go when a name (proxy, visitor, user, or run ID) contains a non-printable rune such as a control character. Triggered at config validation time, before the config is applied.","commonSituations":"A name copied from another document carries invisible characters (zero-width space, tab, newline, escape codes), or a name is built from raw untrusted input without sanitization. Fix by removing non-printable characters from the identifier.","solutions":["Remove control characters and other non-printable characters (spaces, tabs, newlines, zero-width characters) from the name.","Copy the value again from the configuration source instead of typing it, so that no hidden characters are included."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"6c8a8d0a97d03b44e9528d30b30c70cb9d61b405","analyzedAt":"2026-08-15T06:53:27.215Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}