Skip to content

Commit 9981619

Browse files
committed
fix embed
1 parent 3574b87 commit 9981619

File tree

3 files changed

+24
-6
lines changed

3 files changed

+24
-6
lines changed

cmd/embedded.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -118,23 +118,23 @@ func initEmbeddedExtractor(c *cli.Command) error {
118118

119119
func runList(_ context.Context, c *cli.Command) error {
120120
if err := runListDo(c); err != nil {
121-
fmt.Fprintf(os.Stderr, "%v\n", err)
121+
_, _ = fmt.Fprintf(os.Stderr, "%v\n", err)
122122
return err
123123
}
124124
return nil
125125
}
126126

127127
func runView(_ context.Context, c *cli.Command) error {
128128
if err := runViewDo(c); err != nil {
129-
fmt.Fprintf(os.Stderr, "%v\n", err)
129+
_, _ = fmt.Fprintf(os.Stderr, "%v\n", err)
130130
return err
131131
}
132132
return nil
133133
}
134134

135135
func runExtract(_ context.Context, c *cli.Command) error {
136136
if err := runExtractDo(c); err != nil {
137-
fmt.Fprintf(os.Stderr, "%v\n", err)
137+
_, _ = fmt.Fprintf(os.Stderr, "%v\n", err)
138138
return err
139139
}
140140
return nil
@@ -217,7 +217,7 @@ func runExtractDo(c *cli.Command) error {
217217
for _, a := range matchedAssetFiles {
218218
if err := extractAsset(destdir, a, overwrite, rename); err != nil {
219219
// Non-fatal error
220-
fmt.Fprintf(os.Stderr, "%s: %v", a.path, err)
220+
_, _ = fmt.Fprintf(os.Stderr, "%s: %v\n", a.path, err)
221221
}
222222
}
223223

modules/assetfs/embed.go

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,12 +126,21 @@ func (e *embeddedFS) ReadDir(name string) (l []fs.DirEntry, err error) {
126126
}
127127
l = make([]fs.DirEntry, len(fi.Children))
128128
for i, child := range fi.Children {
129-
l[i] = child
129+
l[i], err = e.getFileInfo(name + "/" + child.BaseName)
130+
if err != nil {
131+
return nil, err
132+
}
130133
}
131134
return l, nil
132135
}
133136

134137
func (e *embeddedFS) getFileInfo(fullName string) (*embeddedFileInfo, error) {
138+
// no need to do heavy "path.Clean()" because we don't want to support "foo/../bar" or absolute paths
139+
fullName = strings.TrimPrefix(fullName, "./")
140+
if fullName == "" {
141+
fullName = "."
142+
}
143+
135144
e.filesMu.RLock()
136145
fi := e.files[fullName]
137146
e.filesMu.RUnlock()
@@ -247,7 +256,7 @@ func (fi *embeddedFileInfo) Size() int64 {
247256
}
248257

249258
func (fi *embeddedFileInfo) Mode() fs.FileMode {
250-
return util.Iif[fs.FileMode](fi.IsDir(), 0o555, 0o444)
259+
return util.Iif[fs.FileMode](fi.IsDir(), fs.ModeDir|0o555, 0o444)
251260
}
252261

253262
func (fi *embeddedFileInfo) ModTime() time.Time {

modules/assetfs/embed_test.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ func TestEmbed(t *testing.T) {
4646
assert.Equal(t, bytes.Repeat([]byte("a"), 1000), content)
4747
fi, err = fs.Stat(efs, "foo/bar/b.txt")
4848
require.NoError(t, err)
49+
assert.False(t, fi.Mode().IsDir())
50+
assert.True(t, fi.Mode().IsRegular())
4951
gzipContent, ok := fi.(EmbeddedFileInfo).GetGzipContent()
5052
assert.True(t, ok)
5153
assert.Greater(t, len(gzipContent), 1)
@@ -67,6 +69,13 @@ func TestEmbed(t *testing.T) {
6769
assert.Equal(t, "c.txt", entries[1].Name())
6870
assert.False(t, entries[1].IsDir())
6971

72+
// test directory mode
73+
fi, err = fs.Stat(efs, "foo")
74+
require.NoError(t, err)
75+
assert.True(t, fi.IsDir())
76+
assert.True(t, fi.Mode().IsDir())
77+
assert.False(t, fi.Mode().IsRegular())
78+
7079
// test httpfs
7180
hfs := http.FS(efs)
7281
hf, err := hfs.Open("foo/bar/b.txt")

0 commit comments

Comments
 (0)