]> Cypherpunks repositories - gostls13.git/commitdiff
all: update vendored golang.org/x/net
authorDamien Neil <dneil@google.com>
Tue, 20 Sep 2022 23:15:49 +0000 (16:15 -0700)
committerDamien Neil <dneil@google.com>
Wed, 21 Sep 2022 15:07:53 +0000 (15:07 +0000)
Pull in HTTP/2 fix needed for net/http test case.

f8f703f979 http2: accept HEAD requests with a body

For #53960

Change-Id: I59bbd83977daced5ed21ec5345af8cdb607e532e
Reviewed-on: https://go-review.googlesource.com/c/go/+/432197
Run-TryBot: Damien Neil <dneil@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Cherry Mui <cherryyz@google.com>
src/go.mod
src/go.sum
src/net/http/h2_bundle.go
src/vendor/golang.org/x/net/dns/dnsmessage/message.go
src/vendor/golang.org/x/net/http/httpproxy/proxy.go
src/vendor/modules.txt

index fedb1adc37b59da05f4a59a9894a5c4a1c17c5c6..4b025013f2b3d2dcb81ea9178f93cfaf660b74f8 100644 (file)
@@ -4,7 +4,7 @@ go 1.20
 
 require (
        golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa
-       golang.org/x/net v0.0.0-20220906165146-f3363e06e74c
+       golang.org/x/net v0.0.0-20220920203100-d0c6ba3f52d9
 )
 
 require (
index 99dddf20a3afcae2014f20268756835395bb4dd3..42ca8f2eb9311e9e9e57a5ab7a2e2164047e2ade 100644 (file)
@@ -2,6 +2,8 @@ golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa h1:zuSxTR4o9y82ebqCUJYNGJ
 golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
 golang.org/x/net v0.0.0-20220906165146-f3363e06e74c h1:yKufUcDwucU5urd+50/Opbt4AYpqthk7wHpHok8f1lo=
 golang.org/x/net v0.0.0-20220906165146-f3363e06e74c/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
+golang.org/x/net v0.0.0-20220920203100-d0c6ba3f52d9 h1:asZqf0wXastQr+DudYagQS8uBO8bHKeYD1vbAvGmFL8=
+golang.org/x/net v0.0.0-20220920203100-d0c6ba3f52d9/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
 golang.org/x/sys v0.0.0-20220804214406-8e32c043e418 h1:9vYwv7OjYaky/tlAeD7C4oC9EsPTlaFl1H2jS++V+ME=
 golang.org/x/sys v0.0.0-20220804214406-8e32c043e418/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/text v0.3.8-0.20220722155301-d03b41800055 h1:mr0sHTB/O2dJ0ivoAAz1Mqs776JzxylyunOKJws3B88=
index 4882fd0d8c5cc60748b6246842469bf8804d06cc..03b0f30b4b8a16dd7341ed32acab128f5cba2aab 100644 (file)
@@ -4592,9 +4592,7 @@ func (sc *http2serverConn) serve() {
 
        // Each connection starts with initialWindowSize inflow tokens.
        // If a higher value is configured, we add more tokens.
-       if diff := sc.srv.initialConnRecvWindowSize() - http2initialWindowSize; diff > 0 {
-               sc.sendWindowUpdate(nil, int(diff))
-       }
+       sc.sendWindowUpdate(nil)
 
        if err := sc.readPreface(); err != nil {
                sc.condlogf(err, "http2: server: error reading preface from client %v: %v", sc.conn.RemoteAddr(), err)
@@ -5313,7 +5311,7 @@ func (sc *http2serverConn) closeStream(st *http2stream, err error) {
        if p := st.body; p != nil {
                // Return any buffered unread bytes worth of conn-level flow control.
                // See golang.org/issue/16481
-               sc.sendWindowUpdate(nil, p.Len())
+               sc.sendWindowUpdate(nil)
 
                p.CloseWithError(err)
        }
@@ -5461,7 +5459,7 @@ func (sc *http2serverConn) processData(f *http2DataFrame) error {
                // sendWindowUpdate, which also schedules sending the
                // frames.
                sc.inflow.take(int32(f.Length))
-               sc.sendWindowUpdate(nil, int(f.Length)) // conn-level
+               sc.sendWindowUpdate(nil) // conn-level
 
                if st != nil && st.resetQueued {
                        // Already have a stream error in flight. Don't send another.
@@ -5479,7 +5477,7 @@ func (sc *http2serverConn) processData(f *http2DataFrame) error {
                        return sc.countError("data_flow", http2streamError(id, http2ErrCodeFlowControl))
                }
                sc.inflow.take(int32(f.Length))
-               sc.sendWindowUpdate(nil, int(f.Length)) // conn-level
+               sc.sendWindowUpdate(nil) // conn-level
 
                st.body.CloseWithError(fmt.Errorf("sender tried to send more than declared Content-Length of %d bytes", st.declBodyBytes))
                // RFC 7540, sec 8.1.2.6: A request or response is also malformed if the
@@ -5497,7 +5495,7 @@ func (sc *http2serverConn) processData(f *http2DataFrame) error {
                if len(data) > 0 {
                        wrote, err := st.body.Write(data)
                        if err != nil {
-                               sc.sendWindowUpdate(nil, int(f.Length)-wrote)
+                               sc.sendWindowUpdate32(nil, int32(f.Length)-int32(wrote))
                                return sc.countError("body_write_err", http2streamError(id, http2ErrCodeStreamClosed))
                        }
                        if wrote != len(data) {
@@ -5824,12 +5822,6 @@ func (sc *http2serverConn) newWriterAndRequest(st *http2stream, f *http2MetaHead
                return nil, nil, sc.countError("bad_path_method", http2streamError(f.StreamID, http2ErrCodeProtocol))
        }
 
-       bodyOpen := !f.StreamEnded()
-       if rp.method == "HEAD" && bodyOpen {
-               // HEAD requests can't have bodies
-               return nil, nil, sc.countError("head_body", http2streamError(f.StreamID, http2ErrCodeProtocol))
-       }
-
        rp.header = make(Header)
        for _, hf := range f.RegularFields() {
                rp.header.Add(sc.canonicalHeader(hf.Name), hf.Value)
@@ -5842,6 +5834,7 @@ func (sc *http2serverConn) newWriterAndRequest(st *http2stream, f *http2MetaHead
        if err != nil {
                return nil, nil, err
        }
+       bodyOpen := !f.StreamEnded()
        if bodyOpen {
                if vv, ok := rp.header["Content-Length"]; ok {
                        if cl, err := strconv.ParseUint(vv[0], 10, 63); err == nil {
@@ -6054,17 +6047,32 @@ func (sc *http2serverConn) noteBodyReadFromHandler(st *http2stream, n int, err e
 
 func (sc *http2serverConn) noteBodyRead(st *http2stream, n int) {
        sc.serveG.check()
-       sc.sendWindowUpdate(nil, n) // conn-level
+       sc.sendWindowUpdate(nil) // conn-level
        if st.state != http2stateHalfClosedRemote && st.state != http2stateClosed {
                // Don't send this WINDOW_UPDATE if the stream is closed
                // remotely.
-               sc.sendWindowUpdate(st, n)
+               sc.sendWindowUpdate(st)
        }
 }
 
 // st may be nil for conn-level
-func (sc *http2serverConn) sendWindowUpdate(st *http2stream, n int) {
+func (sc *http2serverConn) sendWindowUpdate(st *http2stream) {
        sc.serveG.check()
+
+       var n int32
+       if st == nil {
+               if avail, windowSize := sc.inflow.available(), sc.srv.initialConnRecvWindowSize(); avail > windowSize/2 {
+                       return
+               } else {
+                       n = windowSize - avail
+               }
+       } else {
+               if avail, windowSize := st.inflow.available(), sc.srv.initialStreamRecvWindowSize(); avail > windowSize/2 {
+                       return
+               } else {
+                       n = windowSize - avail
+               }
+       }
        // "The legal range for the increment to the flow control
        // window is 1 to 2^31-1 (2,147,483,647) octets."
        // A Go Read call on 64-bit machines could in theory read
@@ -6230,6 +6238,10 @@ func (rws *http2responseWriterState) writeChunk(p []byte) (n int, err error) {
                rws.writeHeader(200)
        }
 
+       if rws.handlerDone {
+               rws.promoteUndeclaredTrailers()
+       }
+
        isHeadResp := rws.req.Method == "HEAD"
        if !rws.sentHeader {
                rws.sentHeader = true
@@ -6301,10 +6313,6 @@ func (rws *http2responseWriterState) writeChunk(p []byte) (n int, err error) {
                return 0, nil
        }
 
-       if rws.handlerDone {
-               rws.promoteUndeclaredTrailers()
-       }
-
        // only send trailers if they have actually been defined by the
        // server handler.
        hasNonemptyTrailers := rws.hasNonemptyTrailers()
@@ -7077,7 +7085,8 @@ func (t *http2Transport) initConnPool() {
 // HTTP/2 server.
 type http2ClientConn struct {
        t             *http2Transport
-       tconn         net.Conn             // usually *tls.Conn, except specialized impls
+       tconn         net.Conn // usually *tls.Conn, except specialized impls
+       tconnClosed   bool
        tlsState      *tls.ConnectionState // nil only for specialized impls
        reused        uint32               // whether conn is being reused; atomic
        singleUse     bool                 // whether being used for a single http.Request
@@ -7741,10 +7750,10 @@ func (cc *http2ClientConn) onIdleTimeout() {
        cc.closeIfIdle()
 }
 
-func (cc *http2ClientConn) closeConn() error {
+func (cc *http2ClientConn) closeConn() {
        t := time.AfterFunc(250*time.Millisecond, cc.forceCloseConn)
        defer t.Stop()
-       return cc.tconn.Close()
+       cc.tconn.Close()
 }
 
 // A tls.Conn.Close can hang for a long time if the peer is unresponsive.
@@ -7810,7 +7819,8 @@ func (cc *http2ClientConn) Shutdown(ctx context.Context) error {
        http2shutdownEnterWaitStateHook()
        select {
        case <-done:
-               return cc.closeConn()
+               cc.closeConn()
+               return nil
        case <-ctx.Done():
                cc.mu.Lock()
                // Free the goroutine above
@@ -7847,7 +7857,7 @@ func (cc *http2ClientConn) sendGoAway() error {
 
 // closes the client connection immediately. In-flight requests are interrupted.
 // err is sent to streams.
-func (cc *http2ClientConn) closeForError(err error) error {
+func (cc *http2ClientConn) closeForError(err error) {
        cc.mu.Lock()
        cc.closed = true
        for _, cs := range cc.streams {
@@ -7855,7 +7865,7 @@ func (cc *http2ClientConn) closeForError(err error) error {
        }
        cc.cond.Broadcast()
        cc.mu.Unlock()
-       return cc.closeConn()
+       cc.closeConn()
 }
 
 // Close closes the client connection immediately.
@@ -7863,16 +7873,17 @@ func (cc *http2ClientConn) closeForError(err error) error {
 // In-flight requests are interrupted. For a graceful shutdown, use Shutdown instead.
 func (cc *http2ClientConn) Close() error {
        err := errors.New("http2: client connection force closed via ClientConn.Close")
-       return cc.closeForError(err)
+       cc.closeForError(err)
+       return nil
 }
 
 // closes the client connection immediately. In-flight requests are interrupted.
-func (cc *http2ClientConn) closeForLostPing() error {
+func (cc *http2ClientConn) closeForLostPing() {
        err := errors.New("http2: client connection lost")
        if f := cc.t.CountError; f != nil {
                f("conn_close_lost_ping")
        }
-       return cc.closeForError(err)
+       cc.closeForError(err)
 }
 
 // errRequestCanceled is a copy of net/http's errRequestCanceled because it's not
@@ -8825,7 +8836,7 @@ func (cc *http2ClientConn) forgetStreamID(id uint32) {
        // wake up RoundTrip if there is a pending request.
        cc.cond.Broadcast()
 
-       closeOnIdle := cc.singleUse || cc.doNotReuse || cc.t.disableKeepAlives()
+       closeOnIdle := cc.singleUse || cc.doNotReuse || cc.t.disableKeepAlives() || cc.goAway != nil
        if closeOnIdle && cc.streamsReserved == 0 && len(cc.streams) == 0 {
                if http2VerboseLogs {
                        cc.vlogf("http2: Transport closing idle conn %p (forSingleUse=%v, maxStream=%v)", cc, cc.singleUse, cc.nextStreamID-2)
@@ -9494,7 +9505,6 @@ func (rl *http2clientConnReadLoop) processGoAway(f *http2GoAwayFrame) error {
                if fn := cc.t.CountError; fn != nil {
                        fn("recv_goaway_" + f.ErrCode.stringToken())
                }
-
        }
        cc.setGoAway(f)
        return nil
index 0935878292f7c88ffcc810a51a2954928f0e3b4b..ffdf19d5d3e9f6960dc6db533d0b06ac18ae356e 100644 (file)
@@ -1899,11 +1899,11 @@ type Name struct {
 
 // NewName creates a new Name from a string.
 func NewName(name string) (Name, error) {
-       if len([]byte(name)) > nameLen {
+       if len(name) > nameLen {
                return Name{}, errCalcLen
        }
        n := Name{Length: uint8(len(name))}
-       copy(n.Data[:], []byte(name))
+       copy(n.Data[:], name)
        return n, nil
 }
 
index 16994ac1347b05c3587bbdaf0176e4023484c043..c3bd9a1eeb552cde5305ba3fec07887bf0cf1845 100644 (file)
@@ -81,8 +81,7 @@ type config struct {
 
 // FromEnvironment returns a Config instance populated from the
 // environment variables HTTP_PROXY, HTTPS_PROXY and NO_PROXY (or the
-// lowercase versions thereof). HTTPS_PROXY takes precedence over
-// HTTP_PROXY for https requests.
+// lowercase versions thereof).
 //
 // The environment values may be either a complete URL or a
 // "host[:port]", in which case the "http" scheme is assumed. An error
index a821f21f338bd85d1532e57ec2ee6fc4dca571cf..0d746403f3fa0867e54adfa397efc0545ac5c233 100644 (file)
@@ -7,7 +7,7 @@ golang.org/x/crypto/cryptobyte/asn1
 golang.org/x/crypto/hkdf
 golang.org/x/crypto/internal/poly1305
 golang.org/x/crypto/internal/subtle
-# golang.org/x/net v0.0.0-20220906165146-f3363e06e74c
+# golang.org/x/net v0.0.0-20220920203100-d0c6ba3f52d9
 ## explicit; go 1.17
 golang.org/x/net/dns/dnsmessage
 golang.org/x/net/http/httpguts