fix(platform): support Windows storage and native filesystem boundaries

This commit is contained in:
eezd committed 2026-10-27 14:47:25 +08:00
1 parent 3726423338
commit e239fff253
24 files changed
+355 -51

No files matched your search

+5 -4
View File
@@ -13,6 +13,7 @@ import (
"os"
"path"
"path/filepath"
"rawmark/internal/fileutil"
"rawmark/internal/i18n"
"strings"
"syscall"
@@ -42,7 +43,7 @@ type Manifest struct {
type Source struct{ Name, Path string }
func validPath(name string) bool {
return name != "" && path.Clean(name) == name && name != "." && !strings.HasPrefix(name, "/") && name != ".." && !strings.HasPrefix(name, "../") && !strings.ContainsAny(name, "\\\x00")
return fileutil.IsLocalPath(name) && path.Clean(name) == name && name != "." && !strings.ContainsAny(name, "\\\x00")
}
func validEntry(kind, name string) bool {
if !validPath(name) {
@@ -237,11 +238,11 @@ func Extract(ctx context.Context, archive, dest string) (Manifest, error) {
}
expanded += e.Size
}
var disk syscall.Statfs_t
if err := syscall.Statfs(dest, &disk); err != nil {
available, err := fileutil.AvailableBytes(dest)
if err != nil {
return manifest, err
}
if uint64(expanded)+(32<<20) > disk.Bavail*uint64(disk.Bsize) {
if uint64(expanded)+(32<<20) > available {
return manifest, i18n.New("not_enough_disk_space_w_a39b20", syscall.ENOSPC)
}
seen := map[string]bool{}