]> Cypherpunks repositories - gostls13.git/commitdiff
net/http: return UnexpectedEOF instead of EOF on truncated resposne
authorBrad Fitzpatrick <bradfitz@golang.org>
Wed, 15 Jan 2014 03:08:40 +0000 (19:08 -0800)
committerBrad Fitzpatrick <bradfitz@golang.org>
Wed, 15 Jan 2014 03:08:40 +0000 (19:08 -0800)
Fixes #6564

R=golang-codereviews, r
CC=golang-codereviews
https://golang.org/cl/52420043

src/pkg/net/http/response.go
src/pkg/net/http/response_test.go

index 2ec1d408728c1a49f90bc59a2538b5aceff1c1a9..0b991c72ef0e462c781778051d7784cea40519fe 100644 (file)
@@ -141,6 +141,9 @@ func ReadResponse(r *bufio.Reader, req *Request) (*Response, error) {
        // Parse the response headers.
        mimeHeader, err := tp.ReadMIMEHeader()
        if err != nil {
+               if err == io.EOF {
+                       err = io.ErrUnexpectedEOF
+               }
                return nil, err
        }
        resp.Header = Header(mimeHeader)
index f73172189e94985fbd9c815be98024fb376ce506..d6e77b19c107d195a7dc0492550bd388bf804a46 100644 (file)
@@ -618,6 +618,15 @@ func TestResponseContentLengthShortBody(t *testing.T) {
        }
 }
 
+func TestReadResponseUnexpectedEOF(t *testing.T) {
+       br := bufio.NewReader(strings.NewReader("HTTP/1.1 301 Moved Permanently\r\n" +
+               "Location: http://example.com"))
+       _, err := ReadResponse(br, nil)
+       if err != io.ErrUnexpectedEOF {
+               t.Errorf("ReadResponse = %v; want io.ErrUnexpectedEOF", err)
+       }
+}
+
 func TestNeedsSniff(t *testing.T) {
        // needsSniff returns true with an empty response.
        r := &response{}