mirror of https://github.com/containers/podman.git
				
				
				
			fix(deps): update module golang.org/x/net to v0.32.0
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
This commit is contained in:
		
							parent
							
								
									7af3b7793d
								
							
						
					
					
						commit
						45c979d6b3
					
				
							
								
								
									
										2
									
								
								go.mod
								
								
								
								
							
							
						
						
									
										2
									
								
								go.mod
								
								
								
								
							|  | @ -73,7 +73,7 @@ require ( | |||
| 	go.etcd.io/bbolt v1.3.11 | ||||
| 	golang.org/x/crypto v0.30.0 | ||||
| 	golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f | ||||
| 	golang.org/x/net v0.31.0 | ||||
| 	golang.org/x/net v0.32.0 | ||||
| 	golang.org/x/sync v0.10.0 | ||||
| 	golang.org/x/sys v0.28.0 | ||||
| 	golang.org/x/term v0.27.0 | ||||
|  |  | |||
							
								
								
									
										4
									
								
								go.sum
								
								
								
								
							
							
						
						
									
										4
									
								
								go.sum
								
								
								
								
							|  | @ -605,8 +605,8 @@ golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96b | |||
| golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= | ||||
| golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= | ||||
| golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= | ||||
| golang.org/x/net v0.31.0 h1:68CPQngjLL0r2AlUKiSxtQFKvzRVbnzLwMUn5SzcLHo= | ||||
| golang.org/x/net v0.31.0/go.mod h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM= | ||||
| golang.org/x/net v0.32.0 h1:ZqPmj8Kzc+Y6e0+skZsuACbx+wzMgo5MQsJh9Qd6aYI= | ||||
| golang.org/x/net v0.32.0/go.mod h1:CwU0IoeOlnQQWJ6ioyFrfRuomB8GKF6KbYXZVyeXNfs= | ||||
| golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= | ||||
| golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs= | ||||
| golang.org/x/oauth2 v0.23.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= | ||||
|  |  | |||
|  | @ -1490,7 +1490,7 @@ func (mh *MetaHeadersFrame) checkPseudos() error { | |||
| 	pf := mh.PseudoFields() | ||||
| 	for i, hf := range pf { | ||||
| 		switch hf.Name { | ||||
| 		case ":method", ":path", ":scheme", ":authority": | ||||
| 		case ":method", ":path", ":scheme", ":authority", ":protocol": | ||||
| 			isRequest = true | ||||
| 		case ":status": | ||||
| 			isResponse = true | ||||
|  | @ -1498,7 +1498,7 @@ func (mh *MetaHeadersFrame) checkPseudos() error { | |||
| 			return pseudoHeaderError(hf.Name) | ||||
| 		} | ||||
| 		// Check for duplicates.
 | ||||
| 		// This would be a bad algorithm, but N is 4.
 | ||||
| 		// This would be a bad algorithm, but N is 5.
 | ||||
| 		// And this doesn't allocate.
 | ||||
| 		for _, hf2 := range pf[:i] { | ||||
| 			if hf.Name == hf2.Name { | ||||
|  |  | |||
|  | @ -38,6 +38,7 @@ var ( | |||
| 	logFrameWrites                 bool | ||||
| 	logFrameReads                  bool | ||||
| 	inTests                        bool | ||||
| 	disableExtendedConnectProtocol bool | ||||
| ) | ||||
| 
 | ||||
| func init() { | ||||
|  | @ -50,6 +51,9 @@ func init() { | |||
| 		logFrameWrites = true | ||||
| 		logFrameReads = true | ||||
| 	} | ||||
| 	if strings.Contains(e, "http2xconnect=0") { | ||||
| 		disableExtendedConnectProtocol = true | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| const ( | ||||
|  | @ -141,6 +145,10 @@ func (s Setting) Valid() error { | |||
| 		if s.Val < 16384 || s.Val > 1<<24-1 { | ||||
| 			return ConnectionError(ErrCodeProtocol) | ||||
| 		} | ||||
| 	case SettingEnableConnectProtocol: | ||||
| 		if s.Val != 1 && s.Val != 0 { | ||||
| 			return ConnectionError(ErrCodeProtocol) | ||||
| 		} | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | @ -156,6 +164,7 @@ const ( | |||
| 	SettingInitialWindowSize     SettingID = 0x4 | ||||
| 	SettingMaxFrameSize          SettingID = 0x5 | ||||
| 	SettingMaxHeaderListSize     SettingID = 0x6 | ||||
| 	SettingEnableConnectProtocol SettingID = 0x8 | ||||
| ) | ||||
| 
 | ||||
| var settingName = map[SettingID]string{ | ||||
|  | @ -165,6 +174,7 @@ var settingName = map[SettingID]string{ | |||
| 	SettingInitialWindowSize:     "INITIAL_WINDOW_SIZE", | ||||
| 	SettingMaxFrameSize:          "MAX_FRAME_SIZE", | ||||
| 	SettingMaxHeaderListSize:     "MAX_HEADER_LIST_SIZE", | ||||
| 	SettingEnableConnectProtocol: "ENABLE_CONNECT_PROTOCOL", | ||||
| } | ||||
| 
 | ||||
| func (s SettingID) String() string { | ||||
|  |  | |||
|  | @ -932,14 +932,18 @@ func (sc *serverConn) serve(conf http2Config) { | |||
| 		sc.vlogf("http2: server connection from %v on %p", sc.conn.RemoteAddr(), sc.hs) | ||||
| 	} | ||||
| 
 | ||||
| 	sc.writeFrame(FrameWriteRequest{ | ||||
| 		write: writeSettings{ | ||||
| 	settings := writeSettings{ | ||||
| 		{SettingMaxFrameSize, conf.MaxReadFrameSize}, | ||||
| 		{SettingMaxConcurrentStreams, sc.advMaxStreams}, | ||||
| 		{SettingMaxHeaderListSize, sc.maxHeaderListSize()}, | ||||
| 		{SettingHeaderTableSize, conf.MaxDecoderHeaderTableSize}, | ||||
| 		{SettingInitialWindowSize, uint32(sc.initialStreamRecvWindowSize)}, | ||||
| 		}, | ||||
| 	} | ||||
| 	if !disableExtendedConnectProtocol { | ||||
| 		settings = append(settings, Setting{SettingEnableConnectProtocol, 1}) | ||||
| 	} | ||||
| 	sc.writeFrame(FrameWriteRequest{ | ||||
| 		write: settings, | ||||
| 	}) | ||||
| 	sc.unackedSettings++ | ||||
| 
 | ||||
|  | @ -1801,6 +1805,9 @@ func (sc *serverConn) processSetting(s Setting) error { | |||
| 		sc.maxFrameSize = int32(s.Val) // the maximum valid s.Val is < 2^31
 | ||||
| 	case SettingMaxHeaderListSize: | ||||
| 		sc.peerMaxHeaderListSize = s.Val | ||||
| 	case SettingEnableConnectProtocol: | ||||
| 		// Receipt of this parameter by a server does not
 | ||||
| 		// have any impact
 | ||||
| 	default: | ||||
| 		// Unknown setting: "An endpoint that receives a SETTINGS
 | ||||
| 		// frame with any unknown or unsupported identifier MUST
 | ||||
|  | @ -2231,11 +2238,17 @@ func (sc *serverConn) newWriterAndRequest(st *stream, f *MetaHeadersFrame) (*res | |||
| 		scheme:    f.PseudoValue("scheme"), | ||||
| 		authority: f.PseudoValue("authority"), | ||||
| 		path:      f.PseudoValue("path"), | ||||
| 		protocol:  f.PseudoValue("protocol"), | ||||
| 	} | ||||
| 
 | ||||
| 	// extended connect is disabled, so we should not see :protocol
 | ||||
| 	if disableExtendedConnectProtocol && rp.protocol != "" { | ||||
| 		return nil, nil, sc.countError("bad_connect", streamError(f.StreamID, ErrCodeProtocol)) | ||||
| 	} | ||||
| 
 | ||||
| 	isConnect := rp.method == "CONNECT" | ||||
| 	if isConnect { | ||||
| 		if rp.path != "" || rp.scheme != "" || rp.authority == "" { | ||||
| 		if rp.protocol == "" && (rp.path != "" || rp.scheme != "" || rp.authority == "") { | ||||
| 			return nil, nil, sc.countError("bad_connect", streamError(f.StreamID, ErrCodeProtocol)) | ||||
| 		} | ||||
| 	} else if rp.method == "" || rp.path == "" || (rp.scheme != "https" && rp.scheme != "http") { | ||||
|  | @ -2259,6 +2272,9 @@ func (sc *serverConn) newWriterAndRequest(st *stream, f *MetaHeadersFrame) (*res | |||
| 	if rp.authority == "" { | ||||
| 		rp.authority = rp.header.Get("Host") | ||||
| 	} | ||||
| 	if rp.protocol != "" { | ||||
| 		rp.header.Set(":protocol", rp.protocol) | ||||
| 	} | ||||
| 
 | ||||
| 	rw, req, err := sc.newWriterAndRequestNoBody(st, rp) | ||||
| 	if err != nil { | ||||
|  | @ -2285,6 +2301,7 @@ func (sc *serverConn) newWriterAndRequest(st *stream, f *MetaHeadersFrame) (*res | |||
| type requestParam struct { | ||||
| 	method                  string | ||||
| 	scheme, authority, path string | ||||
| 	protocol                string | ||||
| 	header                  http.Header | ||||
| } | ||||
| 
 | ||||
|  | @ -2326,7 +2343,7 @@ func (sc *serverConn) newWriterAndRequestNoBody(st *stream, rp requestParam) (*r | |||
| 
 | ||||
| 	var url_ *url.URL | ||||
| 	var requestURI string | ||||
| 	if rp.method == "CONNECT" { | ||||
| 	if rp.method == "CONNECT" && rp.protocol == "" { | ||||
| 		url_ = &url.URL{Host: rp.authority} | ||||
| 		requestURI = rp.authority // mimic HTTP/1 server behavior
 | ||||
| 	} else { | ||||
|  |  | |||
|  | @ -376,6 +376,7 @@ type ClientConn struct { | |||
| 	closing          bool | ||||
| 	closed           bool | ||||
| 	seenSettings     bool                     // true if we've seen a settings frame, false otherwise
 | ||||
| 	seenSettingsChan chan struct{}            // closed when seenSettings is true or frame reading fails
 | ||||
| 	wantSettingsAck  bool                     // we sent a SETTINGS frame and haven't heard back
 | ||||
| 	goAway           *GoAwayFrame             // if non-nil, the GoAwayFrame we received
 | ||||
| 	goAwayDebug      string                   // goAway frame's debug data, retained as a string
 | ||||
|  | @ -396,6 +397,17 @@ type ClientConn struct { | |||
| 	initialStreamRecvWindowSize int32 | ||||
| 	readIdleTimeout             time.Duration | ||||
| 	pingTimeout                 time.Duration | ||||
| 	extendedConnectAllowed      bool | ||||
| 
 | ||||
| 	// rstStreamPingsBlocked works around an unfortunate gRPC behavior.
 | ||||
| 	// gRPC strictly limits the number of PING frames that it will receive.
 | ||||
| 	// The default is two pings per two hours, but the limit resets every time
 | ||||
| 	// the gRPC endpoint sends a HEADERS or DATA frame. See golang/go#70575.
 | ||||
| 	//
 | ||||
| 	// rstStreamPingsBlocked is set after receiving a response to a PING frame
 | ||||
| 	// bundled with an RST_STREAM (see pendingResets below), and cleared after
 | ||||
| 	// receiving a HEADERS or DATA frame.
 | ||||
| 	rstStreamPingsBlocked bool | ||||
| 
 | ||||
| 	// pendingResets is the number of RST_STREAM frames we have sent to the peer,
 | ||||
| 	// without confirming that the peer has received them. When we send a RST_STREAM,
 | ||||
|  | @ -819,6 +831,7 @@ func (t *Transport) newClientConn(c net.Conn, singleUse bool) (*ClientConn, erro | |||
| 		peerMaxHeaderListSize:       0xffffffffffffffff,          // "infinite", per spec. Use 2^64-1 instead.
 | ||||
| 		streams:                     make(map[uint32]*clientStream), | ||||
| 		singleUse:                   singleUse, | ||||
| 		seenSettingsChan:            make(chan struct{}), | ||||
| 		wantSettingsAck:             true, | ||||
| 		readIdleTimeout:             conf.SendPingTimeout, | ||||
| 		pingTimeout:                 conf.PingTimeout, | ||||
|  | @ -1466,6 +1479,8 @@ func (cs *clientStream) doRequest(req *http.Request, streamf func(*clientStream) | |||
| 	cs.cleanupWriteRequest(err) | ||||
| } | ||||
| 
 | ||||
| var errExtendedConnectNotSupported = errors.New("net/http: extended connect not supported by peer") | ||||
| 
 | ||||
| // writeRequest sends a request.
 | ||||
| //
 | ||||
| // It returns nil after the request is written, the response read,
 | ||||
|  | @ -1481,12 +1496,31 @@ func (cs *clientStream) writeRequest(req *http.Request, streamf func(*clientStre | |||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	// wait for setting frames to be received, a server can change this value later,
 | ||||
| 	// but we just wait for the first settings frame
 | ||||
| 	var isExtendedConnect bool | ||||
| 	if req.Method == "CONNECT" && req.Header.Get(":protocol") != "" { | ||||
| 		isExtendedConnect = true | ||||
| 	} | ||||
| 
 | ||||
| 	// Acquire the new-request lock by writing to reqHeaderMu.
 | ||||
| 	// This lock guards the critical section covering allocating a new stream ID
 | ||||
| 	// (requires mu) and creating the stream (requires wmu).
 | ||||
| 	if cc.reqHeaderMu == nil { | ||||
| 		panic("RoundTrip on uninitialized ClientConn") // for tests
 | ||||
| 	} | ||||
| 	if isExtendedConnect { | ||||
| 		select { | ||||
| 		case <-cs.reqCancel: | ||||
| 			return errRequestCanceled | ||||
| 		case <-ctx.Done(): | ||||
| 			return ctx.Err() | ||||
| 		case <-cc.seenSettingsChan: | ||||
| 			if !cc.extendedConnectAllowed { | ||||
| 				return errExtendedConnectNotSupported | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	select { | ||||
| 	case cc.reqHeaderMu <- struct{}{}: | ||||
| 	case <-cs.reqCancel: | ||||
|  | @ -1714,10 +1748,14 @@ func (cs *clientStream) cleanupWriteRequest(err error) { | |||
| 				ping := false | ||||
| 				if !closeOnIdle { | ||||
| 					cc.mu.Lock() | ||||
| 					// rstStreamPingsBlocked works around a gRPC behavior:
 | ||||
| 					// see comment on the field for details.
 | ||||
| 					if !cc.rstStreamPingsBlocked { | ||||
| 						if cc.pendingResets == 0 { | ||||
| 							ping = true | ||||
| 						} | ||||
| 						cc.pendingResets++ | ||||
| 					} | ||||
| 					cc.mu.Unlock() | ||||
| 				} | ||||
| 				cc.writeStreamReset(cs.ID, ErrCodeCancel, ping, err) | ||||
|  | @ -2030,7 +2068,7 @@ func (cs *clientStream) awaitFlowControl(maxBytes int) (taken int32, err error) | |||
| 
 | ||||
| func validateHeaders(hdrs http.Header) string { | ||||
| 	for k, vv := range hdrs { | ||||
| 		if !httpguts.ValidHeaderFieldName(k) { | ||||
| 		if !httpguts.ValidHeaderFieldName(k) && k != ":protocol" { | ||||
| 			return fmt.Sprintf("name %q", k) | ||||
| 		} | ||||
| 		for _, v := range vv { | ||||
|  | @ -2046,6 +2084,10 @@ func validateHeaders(hdrs http.Header) string { | |||
| 
 | ||||
| var errNilRequestURL = errors.New("http2: Request.URI is nil") | ||||
| 
 | ||||
| func isNormalConnect(req *http.Request) bool { | ||||
| 	return req.Method == "CONNECT" && req.Header.Get(":protocol") == "" | ||||
| } | ||||
| 
 | ||||
| // requires cc.wmu be held.
 | ||||
| func (cc *ClientConn) encodeHeaders(req *http.Request, addGzipHeader bool, trailers string, contentLength int64) ([]byte, error) { | ||||
| 	cc.hbuf.Reset() | ||||
|  | @ -2066,7 +2108,7 @@ func (cc *ClientConn) encodeHeaders(req *http.Request, addGzipHeader bool, trail | |||
| 	} | ||||
| 
 | ||||
| 	var path string | ||||
| 	if req.Method != "CONNECT" { | ||||
| 	if !isNormalConnect(req) { | ||||
| 		path = req.URL.RequestURI() | ||||
| 		if !validPseudoPath(path) { | ||||
| 			orig := path | ||||
|  | @ -2103,7 +2145,7 @@ func (cc *ClientConn) encodeHeaders(req *http.Request, addGzipHeader bool, trail | |||
| 			m = http.MethodGet | ||||
| 		} | ||||
| 		f(":method", m) | ||||
| 		if req.Method != "CONNECT" { | ||||
| 		if !isNormalConnect(req) { | ||||
| 			f(":path", path) | ||||
| 			f(":scheme", req.URL.Scheme) | ||||
| 		} | ||||
|  | @ -2461,7 +2503,7 @@ func (rl *clientConnReadLoop) run() error { | |||
| 			cc.vlogf("http2: Transport readFrame error on conn %p: (%T) %v", cc, err, err) | ||||
| 		} | ||||
| 		if se, ok := err.(StreamError); ok { | ||||
| 			if cs := rl.streamByID(se.StreamID); cs != nil { | ||||
| 			if cs := rl.streamByID(se.StreamID, notHeaderOrDataFrame); cs != nil { | ||||
| 				if se.Cause == nil { | ||||
| 					se.Cause = cc.fr.errDetail | ||||
| 				} | ||||
|  | @ -2507,13 +2549,16 @@ func (rl *clientConnReadLoop) run() error { | |||
| 			if VerboseLogs { | ||||
| 				cc.vlogf("http2: Transport conn %p received error from processing frame %v: %v", cc, summarizeFrame(f), err) | ||||
| 			} | ||||
| 			if !cc.seenSettings { | ||||
| 				close(cc.seenSettingsChan) | ||||
| 			} | ||||
| 			return err | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func (rl *clientConnReadLoop) processHeaders(f *MetaHeadersFrame) error { | ||||
| 	cs := rl.streamByID(f.StreamID) | ||||
| 	cs := rl.streamByID(f.StreamID, headerOrDataFrame) | ||||
| 	if cs == nil { | ||||
| 		// We'd get here if we canceled a request while the
 | ||||
| 		// server had its response still in flight. So if this
 | ||||
|  | @ -2842,7 +2887,7 @@ func (b transportResponseBody) Close() error { | |||
| 
 | ||||
| func (rl *clientConnReadLoop) processData(f *DataFrame) error { | ||||
| 	cc := rl.cc | ||||
| 	cs := rl.streamByID(f.StreamID) | ||||
| 	cs := rl.streamByID(f.StreamID, headerOrDataFrame) | ||||
| 	data := f.Data() | ||||
| 	if cs == nil { | ||||
| 		cc.mu.Lock() | ||||
|  | @ -2977,9 +3022,22 @@ func (rl *clientConnReadLoop) endStreamError(cs *clientStream, err error) { | |||
| 	cs.abortStream(err) | ||||
| } | ||||
| 
 | ||||
| func (rl *clientConnReadLoop) streamByID(id uint32) *clientStream { | ||||
| // Constants passed to streamByID for documentation purposes.
 | ||||
| const ( | ||||
| 	headerOrDataFrame    = true | ||||
| 	notHeaderOrDataFrame = false | ||||
| ) | ||||
| 
 | ||||
| // streamByID returns the stream with the given id, or nil if no stream has that id.
 | ||||
| // If headerOrData is true, it clears rst.StreamPingsBlocked.
 | ||||
| func (rl *clientConnReadLoop) streamByID(id uint32, headerOrData bool) *clientStream { | ||||
| 	rl.cc.mu.Lock() | ||||
| 	defer rl.cc.mu.Unlock() | ||||
| 	if headerOrData { | ||||
| 		// Work around an unfortunate gRPC behavior.
 | ||||
| 		// See comment on ClientConn.rstStreamPingsBlocked for details.
 | ||||
| 		rl.cc.rstStreamPingsBlocked = false | ||||
| 	} | ||||
| 	cs := rl.cc.streams[id] | ||||
| 	if cs != nil && !cs.readAborted { | ||||
| 		return cs | ||||
|  | @ -3073,6 +3131,21 @@ func (rl *clientConnReadLoop) processSettingsNoWrite(f *SettingsFrame) error { | |||
| 		case SettingHeaderTableSize: | ||||
| 			cc.henc.SetMaxDynamicTableSize(s.Val) | ||||
| 			cc.peerMaxHeaderTableSize = s.Val | ||||
| 		case SettingEnableConnectProtocol: | ||||
| 			if err := s.Valid(); err != nil { | ||||
| 				return err | ||||
| 			} | ||||
| 			// If the peer wants to send us SETTINGS_ENABLE_CONNECT_PROTOCOL,
 | ||||
| 			// we require that it do so in the first SETTINGS frame.
 | ||||
| 			//
 | ||||
| 			// When we attempt to use extended CONNECT, we wait for the first
 | ||||
| 			// SETTINGS frame to see if the server supports it. If we let the
 | ||||
| 			// server enable the feature with a later SETTINGS frame, then
 | ||||
| 			// users will see inconsistent results depending on whether we've
 | ||||
| 			// seen that frame or not.
 | ||||
| 			if !cc.seenSettings { | ||||
| 				cc.extendedConnectAllowed = s.Val == 1 | ||||
| 			} | ||||
| 		default: | ||||
| 			cc.vlogf("Unhandled Setting: %v", s) | ||||
| 		} | ||||
|  | @ -3090,6 +3163,7 @@ func (rl *clientConnReadLoop) processSettingsNoWrite(f *SettingsFrame) error { | |||
| 			// connection can establish to our default.
 | ||||
| 			cc.maxConcurrentStreams = defaultMaxConcurrentStreams | ||||
| 		} | ||||
| 		close(cc.seenSettingsChan) | ||||
| 		cc.seenSettings = true | ||||
| 	} | ||||
| 
 | ||||
|  | @ -3098,7 +3172,7 @@ func (rl *clientConnReadLoop) processSettingsNoWrite(f *SettingsFrame) error { | |||
| 
 | ||||
| func (rl *clientConnReadLoop) processWindowUpdate(f *WindowUpdateFrame) error { | ||||
| 	cc := rl.cc | ||||
| 	cs := rl.streamByID(f.StreamID) | ||||
| 	cs := rl.streamByID(f.StreamID, notHeaderOrDataFrame) | ||||
| 	if f.StreamID != 0 && cs == nil { | ||||
| 		return nil | ||||
| 	} | ||||
|  | @ -3127,7 +3201,7 @@ func (rl *clientConnReadLoop) processWindowUpdate(f *WindowUpdateFrame) error { | |||
| } | ||||
| 
 | ||||
| func (rl *clientConnReadLoop) processResetStream(f *RSTStreamFrame) error { | ||||
| 	cs := rl.streamByID(f.StreamID) | ||||
| 	cs := rl.streamByID(f.StreamID, notHeaderOrDataFrame) | ||||
| 	if cs == nil { | ||||
| 		// TODO: return error if server tries to RST_STREAM an idle stream
 | ||||
| 		return nil | ||||
|  | @ -3205,6 +3279,7 @@ func (rl *clientConnReadLoop) processPing(f *PingFrame) error { | |||
| 		if cc.pendingResets > 0 { | ||||
| 			// See clientStream.cleanupWriteRequest.
 | ||||
| 			cc.pendingResets = 0 | ||||
| 			cc.rstStreamPingsBlocked = true | ||||
| 			cc.cond.Broadcast() | ||||
| 		} | ||||
| 		return nil | ||||
|  |  | |||
|  | @ -1211,7 +1211,7 @@ golang.org/x/exp/slices | |||
| ## explicit; go 1.22.0 | ||||
| golang.org/x/mod/semver | ||||
| golang.org/x/mod/sumdb/note | ||||
| # golang.org/x/net v0.31.0 | ||||
| # golang.org/x/net v0.32.0 | ||||
| ## explicit; go 1.18 | ||||
| golang.org/x/net/bpf | ||||
| golang.org/x/net/context | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue