package assetloader import ( "fmt" "os" "path/filepath" "git.warky.dev/wdevs/relspecgo/pkg/safefile" ) func openAssetRoot(path string) (*os.Root, error) { if err := safefile.CheckRoot(path); err != nil { return nil, err } return os.OpenRoot(path) } func readItemAsset(item Item) ([]byte, error) { if item.AssetRoot == "" { return nil, fmt.Errorf("asset root is required for manifest execution") } root, err := openAssetRoot(item.AssetRoot) if err != nil { return nil, err } defer root.Close() relative, err := filepath.Rel(item.AssetRoot, item.Entry.File) if err != nil { return nil, err } limit := item.MaxFileBytes if limit == 0 { limit = DefaultMaxAssetBytes } return safefile.Read(root, relative, limit) }