{"record":{"id":"9f41376019f701c1","repo":"golang/go","slug":"archive-tar-sockets-not-supported","errorCode":null,"errorMessage":"archive/tar: sockets not supported","messagePattern":"archive/tar: sockets not supported","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/archive/tar/common.go","lineNumber":677,"sourceCode":"\tcase fm.IsRegular():\n\t\th.Typeflag = TypeReg\n\t\th.Size = fi.Size()\n\tcase fi.IsDir():\n\t\th.Typeflag = TypeDir\n\t\th.Name += \"/\"\n\tcase fm&fs.ModeSymlink != 0:\n\t\th.Typeflag = TypeSymlink\n\t\th.Linkname = link\n\tcase fm&fs.ModeDevice != 0:\n\t\tif fm&fs.ModeCharDevice != 0 {\n\t\t\th.Typeflag = TypeChar\n\t\t} else {\n\t\t\th.Typeflag = TypeBlock\n\t\t}\n\tcase fm&fs.ModeNamedPipe != 0:\n\t\th.Typeflag = TypeFifo\n\tcase fm&fs.ModeSocket != 0:\n\t\treturn nil, fmt.Errorf(\"archive/tar: sockets not supported\")\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"archive/tar: unknown file mode %v\", fm)\n\t}\n\tif fm&fs.ModeSetuid != 0 {\n\t\th.Mode |= c_ISUID\n\t}\n\tif fm&fs.ModeSetgid != 0 {\n\t\th.Mode |= c_ISGID\n\t}\n\tif fm&fs.ModeSticky != 0 {\n\t\th.Mode |= c_ISVTX\n\t}\n\t// If possible, populate additional fields from OS-specific\n\t// FileInfo fields.\n\tif sys, ok := fi.Sys().(*Header); ok {\n\t\t// This FileInfo came from a Header (not the OS). Use the\n\t\t// original Header to populate all remaining fields.\n\t\th.Uid = sys.Uid","sourceCodeStart":659,"sourceCodeEnd":695,"githubUrl":"https://github.com/golang/go/blob/b6b368adc57c96c3151d224d172029f233ead2c3/src/archive/tar/common.go#L659-L695","documentation":"Returned by tar.FileInfoHeader (common.go:677) when the os.FileInfo reports fs.ModeSocket in its mode bits. The USTAR/PAX format has no type flag for sockets, so the archive writer refuses to create a header for one rather than emitting a corrupt or misleading entry.","triggerScenarios":"Calling tar.FileInfoHeader (or Writer.WriteHeader with a header derived from FileInfo) on a unix domain socket file: os.Stat on a /path/to/socket.sock returns ModeSocket, and the tar header builder rejects it.","commonSituations":"Walking a filesystem tree that contains unix sockets (e.g., /var/run, container runtime dirs, /tmp) and archiving everything; backing up a directory holding database/runtime sockets; recursive tar of a Docker/containerd state dir.","solutions":["Skip sockets during traversal: check `info.Mode()&fs.ModeSocket != 0` in your WalkFunc and return nil.","Filter by file type before calling FileInfoHeader: only archive regular files, dirs, symlinks, fifos, devices.","If you must represent a socket, substitute a placeholder regular file or omit it and log."],"exampleFix":"// before\nerr := filepath.Walk(root, func(p string, info fs.FileInfo, err error) error {\n    h, err := tar.FileInfoHeader(info, \"\") // fails on sockets\n    ...\n})\n\n// after\nerr := filepath.Walk(root, func(p string, info fs.FileInfo, err error) error {\n    if info.Mode()&fs.ModeSocket != 0 {\n        return nil // skip sockets\n    }\n    h, err := tar.FileInfoHeader(info, \"\")\n    ...\n})","handlingStrategy":"type-guard","validationCode":null,"typeGuard":"func isSocket(info fs.FileInfo) bool {\n    return info.Mode()&fs.ModeSocket != 0\n}","tryCatchPattern":null,"preventionTips":["In WalkFunc, skip entries where mode&fs.ModeSocket != 0 before calling tar.FileInfoHeader.","Filter to known archivable types (regular, dir, symlink, fifo, device).","Watch for sockets in /var/run, /tmp, and container state dirs when archiving."],"tags":["archive","tar","filesystem","socket","file-mode"],"backgroundTag":null,"analyzedSha":"b6b368adc57c96c3151d224d172029f233ead2c3","analyzedAt":"2026-08-12T00:22:02.250Z","schemaVersion":2},"datasetVersion":"2026-08-12T13:17:24.610Z"}