]> Cypherpunks repositories - gostls13.git/commitdiff
net/http: don't panic serving dir in ServeFile with empty Request.URL.Path
authorBrad Fitzpatrick <bradfitz@golang.org>
Tue, 4 Jun 2019 22:26:09 +0000 (22:26 +0000)
committerBrad Fitzpatrick <bradfitz@golang.org>
Wed, 28 Aug 2019 18:38:52 +0000 (18:38 +0000)
Updates #30165
Updates #31622

Change-Id: I7a4b91aa7c5c3af8c0b1273cbb42046feddf7d78
Reviewed-on: https://go-review.googlesource.com/c/go/+/180499
Reviewed-by: Emmanuel Odeke <emm.odeke@gmail.com>
Run-TryBot: Emmanuel Odeke <emm.odeke@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/net/http/fs.go
src/net/http/fs_test.go

index 41d46dced2a96d803ed66b797bf44778ba613f3b..4c4f0e429e8b813e9a0318fe0d4ecfd3d30ea932 100644 (file)
@@ -585,7 +585,7 @@ func serveFile(w ResponseWriter, r *Request, fs FileSystem, name string, redirec
        // redirect if the directory name doesn't end in a slash
        if d.IsDir() {
                url := r.URL.Path
-               if url[len(url)-1] != '/' {
+               if url == "" || url[len(url)-1] != '/' {
                        localRedirect(w, r, path.Base(url)+"/")
                        return
                }
index 762e88b05ff30cf81b395a9b0a2bbc4a7dbf6bc0..047bb04ad8d947dd6c6e505f5eeaed3522e21ea8 100644 (file)
@@ -207,6 +207,18 @@ func TestServeFile_DotDot(t *testing.T) {
        }
 }
 
+// Tests that this doesn't panic. (Issue 30165)
+func TestServeFileDirPanicEmptyPath(t *testing.T) {
+       rec := httptest.NewRecorder()
+       req := httptest.NewRequest("GET", "/", nil)
+       req.URL.Path = ""
+       ServeFile(rec, req, "testdata")
+       res := rec.Result()
+       if res.StatusCode != 301 {
+               t.Errorf("code = %v; want 301", res.Status)
+       }
+}
+
 var fsRedirectTestData = []struct {
        original, redirect string
 }{