1
0
mirror of https://github.com/golang/go synced 2024-11-11 21:20:21 -07:00

embed: treat uninitialized FS as empty

As described in the FS documentation.

This prevents http.FS and other clients from panicking when the
go:embed directive is missing.

For #43682
Related #43698

Change-Id: Iecf26d229a099e55d24670c3119cd6c6d17ecc6e
Reviewed-on: https://go-review.googlesource.com/c/go/+/283852
Run-TryBot: Jay Conrod <jayconrod@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Trust: Jay Conrod <jayconrod@google.com>
Reviewed-by: Bryan C. Mills <bcmills@google.com>
This commit is contained in:
Jay Conrod 2021-01-14 13:04:17 -05:00
parent d047c91a6c
commit ca5774a5a5
2 changed files with 23 additions and 0 deletions

View File

@ -244,6 +244,9 @@ func (f FS) lookup(name string) *file {
if name == "." {
return dotFile
}
if f.files == nil {
return nil
}
// Binary search to find where name would be in the list,
// and then check if name is at that position.
@ -261,6 +264,9 @@ func (f FS) lookup(name string) *file {
// readDir returns the list of files corresponding to the directory dir.
func (f FS) readDir(dir string) []file {
if f.files == nil {
return nil
}
// Binary search to find where dir starts and ends in the list
// and then return that slice of the list.
files := *f.files

View File

@ -112,3 +112,20 @@ func TestHidden(t *testing.T) {
testDir(t, star, "testdata/.hidden",
"fortune.txt", "more/") // but not .more or _more
}
func TestUninitialized(t *testing.T) {
var uninitialized embed.FS
testDir(t, uninitialized, ".")
f, err := uninitialized.Open(".")
if err != nil {
t.Fatal(err)
}
defer f.Close()
fi, err := f.Stat()
if err != nil {
t.Fatal(err)
}
if !fi.IsDir() {
t.Errorf("in uninitialized embed.FS, . is not a directory")
}
}