fix(safeio): retain private file parent handles

This commit is contained in:
2026-08-18 08:51:59 +02:00
parent 0b77d1e850
commit e7a7f4f066
11 changed files with 359 additions and 212 deletions
+7 -3
View File
@@ -49,14 +49,18 @@ func replaceCanonicalRegular(path string, contents []byte) error {
func removeCanonicalPrivateRegular(path string) error {
parents, target, err := openCanonicalWindowsParent(path)
if err != nil {
if err != nil || parents == nil || len(parents.handles) == 0 {
if parents != nil {
parents.Close()
}
return ErrUnsafeFile
}
defer parents.Close()
if err := ValidatePrivateRegular(path); err != nil {
value, err := openWindowsPrivateRegularAt(parents.handles[len(parents.handles)-1], target, windows.GENERIC_READ|windows.DELETE, 1)
if err != nil {
return ErrUnsafeFile
}
if err := windows.DeleteFile(windows.StringToUTF16Ptr(filepath.Join(parents.directory, target))); err != nil {
if err := closeAndDeleteWindowsPrivateRegular(value); err != nil {
return ErrUnsafeFile
}
return nil