返回 DeepSeek-Reasonix
secure_path_fallback.go
根目录 / internal / checkpoint / secure_path_fallback.go
1 //go:build windows || plan9
2
3 package checkpoint
4
5 import (
6 "os"
7 )
8
9 func secureOpenWorkspaceFile(root, abs string) (*os.File, error) {
10 if err := validateWorkspacePath(root, abs); err != nil {
11 return nil, err
12 }
13 return os.Open(abs)
14 }
15
16 func secureWriteNew(root, abs string, data []byte, mode os.FileMode) error {
17 if err := validateWorkspacePath(root, abs); err != nil {
18 return err
19 }
20 return writeNewFile(abs, data, mode)
21 }
22
23 func secureRename(root, oldAbs, newAbs string) error {
24 if err := validateWorkspacePath(root, oldAbs); err != nil {
25 return err
26 }
27 if err := validateWorkspacePath(root, newAbs); err != nil {
28 return err
29 }
30 return os.Rename(oldAbs, newAbs)
31 }
32
33 func secureRemove(root, abs string) error {
34 if err := validateWorkspacePath(root, abs); err != nil {
35 return err
36 }
37 return os.Remove(abs)
38 }
39
40 func secureChmod(root, abs string, mode os.FileMode) error {
41 if err := validateWorkspacePath(root, abs); err != nil {
42 return err
43 }
44 return os.Chmod(abs, mode)
45 }
46
47 func securePathExists(root, abs string) (bool, error) {
48 if err := validateWorkspacePath(root, abs); err != nil {
49 return false, err
50 }
51 _, err := os.Lstat(abs)
52 if os.IsNotExist(err) {
53 return false, nil
54 }
55 return err == nil, err
56 }
57
58 func secureReadFile(root, abs string) ([]byte, error) {
59 if err := validateWorkspacePath(root, abs); err != nil {
60 return nil, err
61 }
62 return os.ReadFile(abs)
63 }
64
64 lines GO