Commit 4e52b3fe authored by Dusty Doris's avatar Dusty Doris Committed by Matt Holt

staticfiles: fix handling of filenames that end with index file names (#1812)

* static files ending with an index were redirected improperly

* optimize requestPage
parent bd67ec99
...@@ -106,8 +106,9 @@ func (fs FileServer) serveFile(w http.ResponseWriter, r *http.Request) (int, err ...@@ -106,8 +106,9 @@ func (fs FileServer) serveFile(w http.ResponseWriter, r *http.Request) (int, err
// if an index file was explicitly requested, strip file name from the request // if an index file was explicitly requested, strip file name from the request
// ("/foo/index.html" -> "/foo/") // ("/foo/index.html" -> "/foo/")
var requestPage = path.Base(urlCopy.Path)
for _, indexPage := range IndexPages { for _, indexPage := range IndexPages {
if strings.HasSuffix(urlCopy.Path, indexPage) { if requestPage == indexPage {
urlCopy.Path = urlCopy.Path[:len(urlCopy.Path)-len(indexPage)] urlCopy.Path = urlCopy.Path[:len(urlCopy.Path)-len(indexPage)]
redir = true redir = true
break break
......
...@@ -219,6 +219,13 @@ func TestServeHTTP(t *testing.T) { ...@@ -219,6 +219,13 @@ func TestServeHTTP(t *testing.T) {
expectedLocation: "https://foo/bar/file1.html", expectedLocation: "https://foo/bar/file1.html",
expectedBodyContent: movedPermanently, expectedBodyContent: movedPermanently,
}, },
{
url: "https://foo/notindex.html",
expectedStatus: http.StatusOK,
expectedBodyContent: testFiles[webrootNotIndexHTML],
expectedEtag: `"2n9cm"`,
expectedContentLength: strconv.Itoa(len(testFiles[webrootNotIndexHTML])),
},
} }
for i, test := range tests { for i, test := range tests {
...@@ -493,6 +500,7 @@ func TestServeHTTPFailingStat(t *testing.T) { ...@@ -493,6 +500,7 @@ func TestServeHTTPFailingStat(t *testing.T) {
// Paths for the fake site used temporarily during testing. // Paths for the fake site used temporarily during testing.
var ( var (
webrootFile1HTML = filepath.Join(webrootName, "file1.html") webrootFile1HTML = filepath.Join(webrootName, "file1.html")
webrootNotIndexHTML = filepath.Join(webrootName, "notindex.html")
webrootDirFile2HTML = filepath.Join(webrootName, "dir", "file2.html") webrootDirFile2HTML = filepath.Join(webrootName, "dir", "file2.html")
webrootDirHiddenHTML = filepath.Join(webrootName, "dir", "hidden.html") webrootDirHiddenHTML = filepath.Join(webrootName, "dir", "hidden.html")
webrootDirwithindexIndeHTML = filepath.Join(webrootName, "dirwithindex", "index.html") webrootDirwithindexIndeHTML = filepath.Join(webrootName, "dirwithindex", "index.html")
...@@ -519,6 +527,7 @@ var ( ...@@ -519,6 +527,7 @@ var (
var testFiles = map[string]string{ var testFiles = map[string]string{
"unreachable.html": "<h1>must not leak</h1>", "unreachable.html": "<h1>must not leak</h1>",
webrootFile1HTML: "<h1>file1.html</h1>", webrootFile1HTML: "<h1>file1.html</h1>",
webrootNotIndexHTML: "<h1>notindex.html</h1>",
webrootDirFile2HTML: "<h1>dir/file2.html</h1>", webrootDirFile2HTML: "<h1>dir/file2.html</h1>",
webrootDirwithindexIndeHTML: "<h1>dirwithindex/index.html</h1>", webrootDirwithindexIndeHTML: "<h1>dirwithindex/index.html</h1>",
webrootDirHiddenHTML: "<h1>dir/hidden.html</h1>", webrootDirHiddenHTML: "<h1>dir/hidden.html</h1>",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment