{"record":{"id":"7646417d58d47409","repo":"golang/go","slug":"invalid-s-v","errorCode":null,"errorMessage":"invalid %s: %v","messagePattern":"invalid (.+?): (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/cmd/go/internal/envcmd/env.go","lineNumber":683,"sourceCode":"\t\t}\n\tcase \"GOPATH\":\n\t\tif strings.HasPrefix(val, \"~\") {\n\t\t\treturn fmt.Errorf(\"GOPATH entry cannot start with shell metacharacter '~': %q\", val)\n\t\t}\n\t\tif !filepath.IsAbs(val) && val != \"\" {\n\t\t\treturn fmt.Errorf(\"GOPATH entry is relative; must be absolute path: %q\", val)\n\t\t}\n\tcase \"GOMODCACHE\":\n\t\tif !filepath.IsAbs(val) && val != \"\" {\n\t\t\treturn fmt.Errorf(\"GOMODCACHE entry is relative; must be absolute path: %q\", val)\n\t\t}\n\tcase \"CC\", \"CXX\":\n\t\tif val == \"\" {\n\t\t\tbreak\n\t\t}\n\t\targs, err := quoted.Split(val)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"invalid %s: %v\", key, err)\n\t\t}\n\t\tif len(args) == 0 {\n\t\t\treturn fmt.Errorf(\"%s entry cannot contain only space\", key)\n\t\t}\n\t\tif !filepath.IsAbs(args[0]) && args[0] != filepath.Base(args[0]) {\n\t\t\treturn fmt.Errorf(\"%s entry is relative; must be absolute path: %q\", key, args[0])\n\t\t}\n\t}\n\n\tif !utf8.ValidString(val) {\n\t\treturn fmt.Errorf(\"invalid UTF-8 in %s=... value\", key)\n\t}\n\tif strings.Contains(val, \"\\x00\") {\n\t\treturn fmt.Errorf(\"invalid NUL in %s=... value\", key)\n\t}\n\tif strings.ContainsAny(val, \"\\v\\r\\n\") {\n\t\treturn fmt.Errorf(\"invalid newline in %s=... value\", key)\n\t}","sourceCodeStart":665,"sourceCodeEnd":701,"githubUrl":"https://github.com/golang/go/blob/b6b368adc57c96c3151d224d172029f233ead2c3/src/cmd/go/internal/envcmd/env.go#L665-L701","documentation":"Returned by checkEnvWrite for CC/CXX when the value (treated as a Go-quoted command string) fails quoted.Split. CC/CXX are stored as a quoted command plus arguments (e.g. \"gcc -m64\"), so they must obey Go shell-quoting rules.","triggerScenarios":"`go env -w CC='gcc \"unterminated'`, `go env -w CXX='clang % bad'`, or any CC/CXX value with unbalanced quotes or invalid Go-quoted syntax.","commonSituations":"Users pasting shell-style values with single quotes that are not valid in Go's quoted grammar; missing closing quotes; stray backslashes that break the tokenizer.","solutions":["Wrap the whole command in double quotes if it contains spaces: `go env -w CC=\"gcc -m64\"`.","Avoid mixing single and double quotes; use only Go-style double-quoted strings.","Test-parse the value with strconv.Quoted/quoted.Split before invoking `go env -w`.","Simplify to just the compiler name (no args) if you do not need flags."],"exampleFix":"# before\n$ go env -w CC='clang -v unbalanced\"'\nerror: invalid CC: ...\n# after\n$ go env -w CC=\"clang -v\"","handlingStrategy":"validation","validationCode":"import \"golang.org/x/tools/go/quoted\"\n\nfunc validateCC(v string) error {\n    if v == \"\" { return nil }\n    if _, err := quoted.Split(v); err != nil {\n        return fmt.Errorf(\"CC/CXX is not valid Go-quoted syntax: %w\", err)\n    }\n    return nil\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Wrap multi-word CC values in double quotes only.","Avoid single quotes; Go quoted grammar differs from POSIX shell.","Prefer base-name-only CC values when no flags are needed."],"tags":["config","env","cc","cxx","cgo","validation"],"analyzedSha":"b6b368adc57c96c3151d224d172029f233ead2c3","analyzedAt":"2026-08-12T00:22:02.250Z","schemaVersion":2},"datasetVersion":"2026-08-12T06:17:24.410Z"}