• Brad Fitzpatrick's avatar
    net/http: revert change making NewRequest set ContentLength -1 · 4bc7b5ae
    Brad Fitzpatrick authored
    The introduction of NoBody and related body-peeking bug fixes also
    added a "cleanup" of sorts to make NewRequest set the returned
    Requests's ContentLength to -1 when it didn't know it.
    
    Using -1 to mean unknown is what the documentation says, but then
    people apparently(?) depended on it being zero so they could do this:
    
        req, _ := http.NewRequest("POST", url, someNonNilReaderWithUnkownSize)
        req.Body = nil
        res, err := http.DefaultClient.Do(req)
    
    ... and expect it to work.
    
    After https://golang.org/cl/31445 the contrived(?) code above stopped
    working, since Body was nil and ContentLength was -1, which has been
    disallowed since Go 1.0.
    
    So this restores the old behavior of NewRequest, not setting it to -1.
    That part of the fix isn't required as of https://golang.org/cl/31726
    (which added NoBody)
    
    I still don't know whether this bug is hypothetical or actually
    affected people in practice.
    
    Let's assume it's real for now.
    
    Fixes #18117
    
    Change-Id: I42400856ee92a1a4999b5b4668bef97d885fbb53
    Reviewed-on: https://go-review.googlesource.com/33801
    Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
    4bc7b5ae
request_test.go 28.1 KB