]> Cypherpunks repositories - gostls13.git/commitdiff
[release-branch.go1.22] net/http: update bundled golang.org/x/net/http2
authorDamien Neil <dneil@google.com>
Thu, 28 Mar 2024 23:57:51 +0000 (16:57 -0700)
committerGopher Robot <gobot@golang.org>
Wed, 3 Apr 2024 15:10:25 +0000 (15:10 +0000)
Disable cmd/internal/moddeps test, since this update includes PRIVATE
track fixes.

Fixes CVE-2023-45288
For #65051
Fixes #66298

Change-Id: I5bbf774ebe7651e4bb7e55139d3794bd2b8e8fa8
Reviewed-on: https://team-review.git.corp.google.com/c/golang/go-private/+/2197227
Reviewed-by: Tatiana Bradley <tatianabradley@google.com>
Run-TryBot: Damien Neil <dneil@google.com>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
Reviewed-on: https://go-review.googlesource.com/c/go/+/576076
Auto-Submit: Dmitri Shuralyov <dmitshur@google.com>
TryBot-Bypass: Dmitri Shuralyov <dmitshur@google.com>
Reviewed-by: Than McIntosh <thanm@google.com>
src/cmd/internal/moddeps/moddeps_test.go
src/net/http/h2_bundle.go

index 3d4c99eecb46baee7c87a18601c7717f17318670..8adc653a2f4847d9a4750ce2bd018c4a41fe7e6a 100644 (file)
@@ -33,6 +33,8 @@ import (
 // See issues 36852, 41409, and 43687.
 // (Also see golang.org/issue/27348.)
 func TestAllDependencies(t *testing.T) {
+       t.Skip("TODO(#65051): 1.22.2 contains unreleased changes from vendored modules")
+
        goBin := testenv.GoToolPath(t)
 
        // Ensure that all packages imported within GOROOT
index 969c3ffd495836789b4ca8d3013eb68e804ce4cb..75454dba38e63759a5d293741153ce6879104081 100644 (file)
@@ -2969,6 +2969,7 @@ func (fr *http2Framer) readMetaFrame(hf *http2HeadersFrame) (*http2MetaHeadersFr
                if size > remainSize {
                        hdec.SetEmitEnabled(false)
                        mh.Truncated = true
+                       remainSize = 0
                        return
                }
                remainSize -= size
@@ -2981,6 +2982,36 @@ func (fr *http2Framer) readMetaFrame(hf *http2HeadersFrame) (*http2MetaHeadersFr
        var hc http2headersOrContinuation = hf
        for {
                frag := hc.HeaderBlockFragment()
+
+               // Avoid parsing large amounts of headers that we will then discard.
+               // If the sender exceeds the max header list size by too much,
+               // skip parsing the fragment and close the connection.
+               //
+               // "Too much" is either any CONTINUATION frame after we've already
+               // exceeded the max header list size (in which case remainSize is 0),
+               // or a frame whose encoded size is more than twice the remaining
+               // header list bytes we're willing to accept.
+               if int64(len(frag)) > int64(2*remainSize) {
+                       if http2VerboseLogs {
+                               log.Printf("http2: header list too large")
+                       }
+                       // It would be nice to send a RST_STREAM before sending the GOAWAY,
+                       // but the struture of the server's frame writer makes this difficult.
+                       return nil, http2ConnectionError(http2ErrCodeProtocol)
+               }
+
+               // Also close the connection after any CONTINUATION frame following an
+               // invalid header, since we stop tracking the size of the headers after
+               // an invalid one.
+               if invalid != nil {
+                       if http2VerboseLogs {
+                               log.Printf("http2: invalid header: %v", invalid)
+                       }
+                       // It would be nice to send a RST_STREAM before sending the GOAWAY,
+                       // but the struture of the server's frame writer makes this difficult.
+                       return nil, http2ConnectionError(http2ErrCodeProtocol)
+               }
+
                if _, err := hdec.Write(frag); err != nil {
                        return nil, http2ConnectionError(http2ErrCodeCompression)
                }