]> Cypherpunks repositories - gostls13.git/commitdiff
net/http: use the correct error variable in serveFile
authorBrad Fitzpatrick <bradfitz@golang.org>
Mon, 19 Oct 2015 14:45:50 +0000 (14:45 +0000)
committerBrad Fitzpatrick <bradfitz@golang.org>
Mon, 19 Oct 2015 15:26:35 +0000 (15:26 +0000)
It was generating the wrong error message, always defaulting to "500
Internal Server Error", since the err variable used was always nil.

Fixes #12991

Change-Id: I94b0e516409c131ff3b878bcb91e65f0259ff077
Reviewed-on: https://go-review.googlesource.com/16060
Reviewed-by: David Crawshaw <crawshaw@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

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

index 0457be50da6a20688c4b80bf14f175a5a7000760..68fbd438263c78c08d805e3c3b931a3bb156a820 100644 (file)
@@ -130,3 +130,5 @@ var ExportServerNewConn = (*Server).newConn
 var ExportCloseWriteAndWait = (*conn).closeWriteAndWait
 
 var ExportErrRequestCanceled = errRequestCanceled
+
+var ExportServeFile = serveFile
index 394c87d29a7853fce4050d2da1205072901da37e..ac7e1b5c49582111337e0bfe0174b6abe7528b71 100644 (file)
@@ -369,8 +369,8 @@ func serveFile(w ResponseWriter, r *Request, fs FileSystem, name string, redirec
        }
        defer f.Close()
 
-       d, err1 := f.Stat()
-       if err1 != nil {
+       d, err := f.Stat()
+       if err != nil {
                msg, code := toHTTPError(err)
                Error(w, msg, code)
                return
index 9b235d278a5bdc3c5ad588abb710abc4fd8e368f..a3d64f3a08827a3e9c85dd9aebc92e8d83c31e2f 100644 (file)
@@ -850,6 +850,28 @@ func TestServeContent(t *testing.T) {
        }
 }
 
+// Issue 12991
+func TestServerFileStatError(t *testing.T) {
+       rec := httptest.NewRecorder()
+       r, _ := NewRequest("GET", "http://foo/", nil)
+       redirect := false
+       name := "file.txt"
+       fs := issue12991FS{}
+       ExportServeFile(rec, r, fs, name, redirect)
+       if body := rec.Body.String(); !strings.Contains(body, "403") || !strings.Contains(body, "Forbidden") {
+               t.Errorf("wanted 403 forbidden message; got: %s", body)
+       }
+}
+
+type issue12991FS struct{}
+
+func (issue12991FS) Open(string) (File, error) { return issue12991File{}, nil }
+
+type issue12991File struct{ File }
+
+func (issue12991File) Stat() (os.FileInfo, error) { return nil, os.ErrPermission }
+func (issue12991File) Close() error               { return nil }
+
 func TestServeContentErrorMessages(t *testing.T) {
        defer afterTest(t)
        fs := fakeFS{