{"record":{"id":"22a08b34acdf79ec","repo":"ipfs/kubo","slug":"internal-error-listing-s","errorCode":null,"errorMessage":"internal error listing %s","messagePattern":"internal error listing (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"core/commands/ls.go","lineNumber":212,"sourceCode":"\t\tdefer cancel()\n\n\t\tfor i, fpath := range paths {\n\t\t\tpth, err := cmdutils.PathOrCidPath(fpath)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tresults := make(chan iface.DirEntry)\n\t\t\tlsErr := make(chan error, 1)\n\t\t\tgo func() {\n\t\t\t\t// Listing decodes blocks with whatever codec their CID names.\n\t\t\t\t// This goroutine is detached from the request, and a panic on it\n\t\t\t\t// would end the daemon rather than the command. Ls closes\n\t\t\t\t// results on its way out, so the reader below still terminates.\n\t\t\t\tdefer func() {\n\t\t\t\t\tif rec := recover(); rec != nil {\n\t\t\t\t\t\tlog.Errorf(\"recovered from panic listing %s: %v\\n%s\", pth, rec, debug.Stack())\n\t\t\t\t\t\tlsErr <- fmt.Errorf(\"internal error listing %s\", pth)\n\t\t\t\t\t}\n\t\t\t\t}()\n\t\t\t\tlsErr <- api.Unixfs().Ls(lsCtx, pth, results,\n\t\t\t\t\toptions.Unixfs.ResolveChildren(resolveSize || resolveType))\n\t\t\t}()\n\n\t\t\tprocessLink, dirDone = processDir()\n\t\t\tfor link := range results {\n\t\t\t\tvar ftype unixfs_pb.Data_DataType\n\t\t\t\tswitch link.Type {\n\t\t\t\tcase iface.TFile:\n\t\t\t\t\tftype = unixfs.TFile\n\t\t\t\tcase iface.TDirectory:\n\t\t\t\t\tftype = unixfs.TDirectory\n\t\t\t\tcase iface.TSymlink:\n\t\t\t\t\tftype = unixfs.TSymlink\n\t\t\t\t}\n\t\t\t\tlsLink := LsLink{","sourceCodeStart":194,"sourceCodeEnd":230,"githubUrl":"https://github.com/ipfs/kubo/blob/329838acdfafae224582930457efe80aa217afc0/core/commands/ls.go#L194-L230","documentation":"Internal-error wrapper in `ipfs ls`: an unexpected (non-ErrNotFound-style) failure occurred while listing the given path — typically the background listing goroutine failed to resolve or decode the UnixFS/IPLD node. The generic message deliberately hides the cause from the user; the real error is logged with log.Errorf, so daemon logs are the place to diagnose.","triggerScenarios":"Thrown at core/commands/ls.go:212 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Check daemon logs (ipfs log tail) for the 'recovered from panic listing' or the underlying error line","Retry if a block provider was temporarily unreachable","Use ipfs dag get or ipfs cat on the path to isolate whether the block resolves"],"exampleFix":null,"handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"329838acdfafae224582930457efe80aa217afc0","analyzedAt":"2026-09-03T18:30:52.135Z","contentChangedAt":"2026-09-03T18:30:52.135Z","schemaVersion":2},"datasetVersion":"2026-09-11T00:17:11.886Z"}