fatedier/frp · error

%s contains non-printable character

Error message

%s contains non-printable character

What it means

Error "%s contains non-printable character" thrown in fatedier/frp.

Source

Thrown at pkg/config/v1/validation/name.go:40

const (
	// MaxRunIDLength is the maximum number of bytes accepted for a control run ID.
	MaxRunIDLength = 64
)

func validateIdentifier(value, kind string, maxLength int) error {
	if value == "" {
		return fmt.Errorf("%s cannot be empty", kind)
	}
	if len(value) > maxLength {
		return fmt.Errorf("%s is too long: length %d exceeds maximum %d", kind, len(value), maxLength)
	}
	if !utf8.ValidString(value) {
		return fmt.Errorf("%s must be valid UTF-8", kind)
	}
	for _, r := range value {
		if !unicode.IsPrint(r) {
			return fmt.Errorf("%s contains non-printable character", kind)
		}
	}
	return nil
}

func ValidateRunID(runID string) error {
	return validateIdentifier(runID, "run id", MaxRunIDLength)
}

View on GitHub (pinned to 6c8a8d0a97)

Solutions

  1. Remove control characters and other non-printable characters (spaces, tabs, newlines, zero-width characters) from the name.
  2. Copy the value again from the configuration source instead of typing it, so that no hidden characters are included.

When it happens

Trigger: 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.

Common situations: 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.


AI-assisted analysis of fatedier/frp@6c8a8d0a97 (2026-08-15). Data as JSON: /api/errors/3397ff1108e497c5. Report an issue: GitHub.