From e469a2efbe1e732c073bffffa59bd680676a5f13 Mon Sep 17 00:00:00 2001 From: lowgame <128625014+lowgame@users.noreply.github.com> Date: Sun, 27 Sep 2026 04:06:29 +0300 Subject: [PATCH] fix: return FileFS stat errors --- context.go | 5 ++++- context_test.go | 24 ++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/context.go b/context.go index a8ee4b51d..08d93374d 100644 --- a/context.go +++ b/context.go @@ -678,7 +678,10 @@ func fsFile(c *Context, file string, filesystem fs.FS) error { } defer f.Close() - fi, _ := f.Stat() + fi, err := f.Stat() + if err != nil { + return err + } if fi.IsDir() { file = filepath.ToSlash(filepath.Join(file, indexPage)) // ToSlash is necessary for Windows. fs.Open and os.Open are different in that aspect. f, err = filesystem.Open(file) diff --git a/context_test.go b/context_test.go index 83040dc76..4f3a060cc 100644 --- a/context_test.go +++ b/context_test.go @@ -1509,6 +1509,30 @@ func TestContext_FileFS(t *testing.T) { } } +var errFileStat = fmt.Errorf("stat failed") + +type statErrorFS struct{} + +func (statErrorFS) Open(string) (fs.File, error) { + return statErrorFile{}, nil +} + +type statErrorFile struct{} + +func (statErrorFile) Stat() (fs.FileInfo, error) { return nil, errFileStat } +func (statErrorFile) Read([]byte) (int, error) { return 0, io.EOF } +func (statErrorFile) Close() error { return nil } + +func TestContext_FileFSReturnsStatError(t *testing.T) { + e := New() + c := e.NewContext( + httptest.NewRequest(http.MethodGet, "/file", nil), + httptest.NewRecorder(), + ) + + assert.ErrorIs(t, c.FileFS("file", statErrorFS{}), errFileStat) +} + func TestLogger(t *testing.T) { e := New() c := e.NewContext(nil, nil)