{"record":{"id":"84a01832eaf488cc","repo":"alibaba/open-code-review","slug":"read-symlink-q-w","errorCode":null,"errorMessage":"read symlink %q: %w","messagePattern":"read symlink %q: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/diff/workspace_file.go","lineNumber":46,"sourceCode":"\tparent, err := filepath.EvalSymlinks(filepath.Dir(fullPath))\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"resolve parent path for %q: %w\", relPath, err)\n\t}\n\tif !pathutil.WithinBase(repoRoot, parent) {\n\t\treturn nil, fmt.Errorf(\"file path %q is outside repository\", relPath)\n\t}\n\n\tinfo, err := os.Lstat(fullPath)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"stat file %q: %w\", relPath, err)\n\t}\n\tif info.IsDir() {\n\t\treturn nil, fmt.Errorf(\"file path %q is a directory\", relPath)\n\t}\n\tif info.Mode()&os.ModeSymlink != 0 {\n\t\ttarget, err := os.Readlink(fullPath)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"read symlink %q: %w\", relPath, err)\n\t\t}\n\t\treturn []byte(target), nil\n\t}\n\n\tresolvedPath, err := filepath.EvalSymlinks(fullPath)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"resolve file %q: %w\", relPath, err)\n\t}\n\tif !pathutil.WithinBase(repoRoot, resolvedPath) {\n\t\treturn nil, fmt.Errorf(\"file path %q is outside repository\", relPath)\n\t}\n\tcontent, err := os.ReadFile(resolvedPath)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"read file %q: %w\", relPath, err)\n\t}\n\treturn content, nil\n}\n","sourceCodeStart":28,"sourceCodeEnd":64,"githubUrl":"https://github.com/alibaba/open-code-review/blob/5cf97d0d15cbd41b602513c4be3bfec3cee5bf7f/internal/diff/workspace_file.go#L28-L64","documentation":"os.Readlink failed on an entry that Lstat reports as a symlink — it disappeared between listing and reading, or readlink was denied. For symlinks, the link target string itself is returned as the 'content' so the diff shows the change of target; that read is what failed.","triggerScenarios":"Thrown at internal/diff/workspace_file.go:46 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Check the wrapped error — the symlink may be dangling or unreadable","Remove or repair the broken symlink; note that for valid symlinks the link target itself is returned as content, so no target read is attempted","Ensure filesystem permissions allow readlink"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"5cf97d0d15cbd41b602513c4be3bfec3cee5bf7f","analyzedAt":"2026-09-02T02:08:09.116Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}