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 {