From bab4be1a89514cf5360b446de9420bcda92aac54 Mon Sep 17 00:00:00 2001 From: Clayton Craft Date: Mon, 4 Aug 2025 17:26:30 -0700 Subject: [PATCH] misc/getfiles: fix zst fallback The previous symlink recursion fix broke the fallback for zst by returning early. Fixes 7a07a16ecb4d9598f383e29b9c98748babe7be8e Part-of: https://gitlab.postmarketos.org/postmarketOS/postmarketos-mkinitfs/-/merge_requests/67 [ci:skip-build]: already built successfully in CI --- internal/misc/getfiles.go | 16 ++++++++-------- internal/misc/getfiles_test.go | 18 ++++++++++++++++++ 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/internal/misc/getfiles.go b/internal/misc/getfiles.go index 552ff97..d5910c8 100644 --- a/internal/misc/getfiles.go +++ b/internal/misc/getfiles.go @@ -47,14 +47,14 @@ func getFile(file string, required bool) (files []string, err error) { // 2) set file to dereferenced target // 4) continue this function to either walk it if the target is a dir or add the // target to the list of files - if s, err := os.Lstat(file); err != nil { - return files, err - } else if s.Mode()&fs.ModeSymlink != 0 { - files = append(files, file) - if target, err := filepath.EvalSymlinks(file); err != nil { - return files, err - } else { - file = target + if s, err := os.Lstat(file); err == nil { + if s.Mode()&fs.ModeSymlink != 0 { + files = append(files, file) + if target, err := filepath.EvalSymlinks(file); err != nil { + return files, err + } else { + file = target + } } } diff --git a/internal/misc/getfiles_test.go b/internal/misc/getfiles_test.go index 860c430..449c4c4 100644 --- a/internal/misc/getfiles_test.go +++ b/internal/misc/getfiles_test.go @@ -107,6 +107,24 @@ func TestGetFile(t *testing.T) { }, required: true, }, + { + name: "zst compressed file fallback", + setup: func(tmpDir string) (string, []string, error) { + // Create a .zst file but NOT the original file + zstFile := filepath.Join(tmpDir, "firmware.bin.zst") + if err := os.WriteFile(zstFile, []byte("compressed content"), 0644); err != nil { + return "", nil, err + } + + // Request the original file (without .zst extension) + originalFile := filepath.Join(tmpDir, "firmware.bin") + + // Expected: should find and return the .zst version + expected := []string{zstFile} + return originalFile, expected, nil + }, + required: true, + }, } for _, st := range subtests {