Skip to content

Commit c3ecca1

Browse files
authored
🐛 bug: Fix Static middleware browser support for subdirectories (#3673)
1 parent 40e1e76 commit c3ecca1

File tree

3 files changed

+24
-0
lines changed

3 files changed

+24
-0
lines changed
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
h1 {
2+
color: black;
3+
}

middleware/static/static.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ import (
2323
// It returns an error if the path attempts to traverse directories.
2424
func sanitizePath(p []byte, filesystem fs.FS) ([]byte, error) {
2525
var s string
26+
27+
hasTrailingSlash := len(p) > 0 && p[len(p)-1] == '/'
28+
2629
if bytes.IndexByte(p, '\\') >= 0 {
2730
b := make([]byte, len(p))
2831
copy(b, p)
@@ -66,6 +69,10 @@ func sanitizePath(p []byte, filesystem fs.FS) ([]byte, error) {
6669
s = "/" + s
6770
}
6871

72+
if hasTrailingSlash && len(s) > 1 && s[len(s)-1] != '/' {
73+
s += "/"
74+
}
75+
6976
return utils.UnsafeBytes(s), nil
7077
}
7178

middleware/static/static_test.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -651,6 +651,20 @@ func Test_Static_FS_Browse(t *testing.T) {
651651
require.NoError(t, err, "app.Test(req)")
652652
require.Contains(t, string(body), "color")
653653

654+
resp, err = app.Test(httptest.NewRequest(fiber.MethodGet, "/dirfs/test", nil))
655+
require.NoError(t, err, "app.Test(req)")
656+
require.Equal(t, 200, resp.StatusCode, "Status code")
657+
require.Equal(t, fiber.MIMETextHTMLCharsetUTF8, resp.Header.Get(fiber.HeaderContentType))
658+
659+
resp, err = app.Test(httptest.NewRequest(fiber.MethodGet, "/dirfs/test/style2.css", nil))
660+
require.NoError(t, err, "app.Test(req)")
661+
require.Equal(t, 200, resp.StatusCode, "Status code")
662+
require.Equal(t, fiber.MIMETextCSSCharsetUTF8, resp.Header.Get(fiber.HeaderContentType))
663+
664+
body, err = io.ReadAll(resp.Body)
665+
require.NoError(t, err, "app.Test(req)")
666+
require.Contains(t, string(body), "color")
667+
654668
resp, err = app.Test(httptest.NewRequest(fiber.MethodGet, "/embed", nil))
655669
require.NoError(t, err, "app.Test(req)")
656670
require.Equal(t, 200, resp.StatusCode, "Status code")

0 commit comments

Comments
 (0)