aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrad Fitzpatrick <bradfitz@golang.org>2016-01-13 22:14:40 +0000
committerBrad Fitzpatrick <bradfitz@golang.org>2016-01-13 22:27:38 +0000
commit608ddc38bdaed0791979145947d7c08738b5f2a2 (patch)
tree62bdccbf10d4a02754e858df68141c3e8079a09b
parentaba6250250d0cdcd1b7a19ca9c6112639eccbb5e (diff)
downloadgo-608ddc38bdaed0791979145947d7c08738b5f2a2.tar.gz
go-608ddc38bdaed0791979145947d7c08738b5f2a2.zip
net/http: update bundled http2
Updates x/net/http2 to git rev 341cd08 for https://golang.org/cl/18576 Change-Id: If5dcb60ac449b798c34fe332ede5ec74e66eb9db Reviewed-on: https://go-review.googlesource.com/18579 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
-rw-r--r--src/net/http/h2_bundle.go35
1 files changed, 25 insertions, 10 deletions
diff --git a/src/net/http/h2_bundle.go b/src/net/http/h2_bundle.go
index 34b94798ab..7aae52eabc 100644
--- a/src/net/http/h2_bundle.go
+++ b/src/net/http/h2_bundle.go
@@ -5353,21 +5353,36 @@ func (rl *http2clientConnReadLoop) processData(f *http2DataFrame) error {
cc := rl.cc
cs := cc.streamByID(f.StreamID, f.StreamEnded())
if cs == nil {
+ cc.mu.Lock()
+ neverSent := cc.nextStreamID
+ cc.mu.Unlock()
+ if f.StreamID >= neverSent {
+
+ cc.logf("http2: Transport received unsolicited DATA frame; closing connection")
+ return http2ConnectionError(http2ErrCodeProtocol)
+ }
+
return nil
}
- data := f.Data()
+ if data := f.Data(); len(data) > 0 {
+ if cs.bufPipe.b == nil {
- cc.mu.Lock()
- if cs.inflow.available() >= int32(len(data)) {
- cs.inflow.take(int32(len(data)))
- } else {
+ cc.logf("http2: Transport received DATA frame for closed stream; closing connection")
+ return http2ConnectionError(http2ErrCodeProtocol)
+ }
+
+ cc.mu.Lock()
+ if cs.inflow.available() >= int32(len(data)) {
+ cs.inflow.take(int32(len(data)))
+ } else {
+ cc.mu.Unlock()
+ return http2ConnectionError(http2ErrCodeFlowControl)
+ }
cc.mu.Unlock()
- return http2ConnectionError(http2ErrCodeFlowControl)
- }
- cc.mu.Unlock()
- if _, err := cs.bufPipe.Write(data); err != nil {
- return err
+ if _, err := cs.bufPipe.Write(data); err != nil {
+ return err
+ }
}
if f.StreamEnded() {