{"record":{"id":"3eefd94afc850387","repo":"hashicorp/terraform","slug":"invalid-unix-socket-path-q-for-q-w","errorCode":null,"errorMessage":"Invalid unix socket path %q for %q: %w","messagePattern":"Invalid unix socket path %q for %q: %w","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/getproviders/reattach/reattach.go","lineNumber":66,"sourceCode":"\t\t\tPid  int\n\t\t\tTest bool\n\t\t}\n\t\tvar m map[string]reattachConfig\n\t\terr := json.Unmarshal([]byte(in), &m)\n\t\tif err != nil {\n\t\t\treturn unmanagedProviders, fmt.Errorf(\"Invalid format for %s: %w\", TF_REATTACH_PROVIDERS, err)\n\t\t}\n\t\tfor p, c := range m {\n\t\t\ta, diags := addrs.ParseProviderSourceString(p)\n\t\t\tif diags.HasErrors() {\n\t\t\t\treturn unmanagedProviders, fmt.Errorf(\"Error parsing %q as a provider address: %w\", a, diags.Err())\n\t\t\t}\n\t\t\tvar addr net.Addr\n\t\t\tswitch c.Addr.Network {\n\t\t\tcase \"unix\":\n\t\t\t\taddr, err = net.ResolveUnixAddr(\"unix\", c.Addr.String)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn unmanagedProviders, fmt.Errorf(\"Invalid unix socket path %q for %q: %w\", c.Addr.String, p, err)\n\t\t\t\t}\n\t\t\tcase \"tcp\":\n\t\t\t\taddr, err = net.ResolveTCPAddr(\"tcp\", c.Addr.String)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn unmanagedProviders, fmt.Errorf(\"Invalid TCP address %q for %q: %w\", c.Addr.String, p, err)\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\treturn unmanagedProviders, fmt.Errorf(\"Unknown address type %q for %q\", c.Addr.Network, p)\n\t\t\t}\n\t\t\tunmanagedProviders[a] = &plugin.ReattachConfig{\n\t\t\t\tProtocol:        plugin.Protocol(c.Protocol),\n\t\t\t\tProtocolVersion: c.ProtocolVersion,\n\t\t\t\tPid:             c.Pid,\n\t\t\t\tTest:            c.Test,\n\t\t\t\tAddr:            addr,\n\t\t\t}\n\t\t}\n\t}","sourceCodeStart":48,"sourceCodeEnd":84,"githubUrl":"https://github.com/hashicorp/terraform/blob/d32a084675427f5ac3f7d2868578ef8b2c1dc525/internal/getproviders/reattach/reattach.go#L48-L84","documentation":"Thrown while resolving a reattach address whose Network is 'unix'. net.ResolveUnixAddr failed to parse the configured String field as a unix socket path.","triggerScenarios":"c.Addr.Network == \"unix\" and net.ResolveUnixAddr(\"unix\", c.Addr.String) returned a non-nil error.","commonSituations":"Path containing a NUL byte or otherwise invalid for the filesystem; empty String field; control characters from a corrupted env var; non-UTF-8 bytes on platforms that reject them.","solutions":["Set addr.String to an absolute, printable filesystem path","Ensure the path contains no NUL bytes or stray control characters","Verify the unix socket file actually exists for the test process"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// Pre-validate a unix socket path string.\nfunc validUnixPath(s string) bool {\n    return s != \"\" && !strings.ContainsRune(s, 0) // no NUL bytes\n}\nif c.Addr.Network == \"unix\" && !validUnixPath(c.Addr.String) {\n    return fmt.Errorf(\"invalid unix socket path %q\", c.Addr.String)\n}","typeGuard":"func IsValidUnixPath(s string) bool {\n    return s != \"\" && !strings.ContainsRune(s, 0)\n}","tryCatchPattern":"providers, err := reattach.DecodeProviders(raw)\nif err != nil && strings.Contains(err.Error(), \"unix socket\") {\n    return fmt.Errorf(\"reattach unix path rejected by the OS: %w\", err)\n}","preventionTips":["Use absolute printable paths for unix sockets","Avoid NUL or control characters in socket paths","Confirm the socket file exists for the running provider process"],"tags":["reattach","unix-socket","network","config","validation"],"backgroundTag":null,"analyzedSha":"d32a084675427f5ac3f7d2868578ef8b2c1dc525","analyzedAt":"2026-08-11T18:43:52.779Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}