]> Cypherpunks repositories - gostls13.git/commitdiff
net/http: update bundled http2
authorBrad Fitzpatrick <bradfitz@golang.org>
Wed, 13 Jan 2016 22:14:40 +0000 (22:14 +0000)
committerBrad Fitzpatrick <bradfitz@golang.org>
Wed, 13 Jan 2016 22:27:38 +0000 (22:27 +0000)
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>

src/net/http/h2_bundle.go

index 34b94798abd12265574a5c845a41c84ac700fed7..7aae52eabcb6dfbdc33c64b705021a5d5c5961b3 100644 (file)
@@ -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() {