go.net/spdy: disallow stream id 0
Per 2.3.2 of draft-mbelshe-httpbis-spdy-00.
R=mikioh.mikioh, bradfitz
CC=adg, golang-dev
https://golang.org/cl/6781053
diff --git a/spdy/write.go b/spdy/write.go
index 3dd2ca1..3b0ce6a 100644
--- a/spdy/write.go
+++ b/spdy/write.go
@@ -20,6 +20,9 @@
}
func (frame *RstStreamFrame) write(f *Framer) (err error) {
+ if frame.StreamId == 0 {
+ return &Error{ZeroStreamId, 0}
+ }
frame.CFHeader.version = Version
frame.CFHeader.frameType = TypeRstStream
frame.CFHeader.length = 8
@@ -70,6 +73,9 @@
}
func (frame *PingFrame) write(f *Framer) (err error) {
+ if frame.Id == 0 {
+ return &Error{ZeroStreamId, 0}
+ }
frame.CFHeader.version = Version
frame.CFHeader.frameType = TypePing
frame.CFHeader.length = 4
@@ -100,10 +106,16 @@
}
func (frame *HeadersFrame) write(f *Framer) error {
+ if frame.StreamId == 0 {
+ return &Error{ZeroStreamId, 0}
+ }
return f.writeHeadersFrame(frame)
}
func (frame *DataFrame) write(f *Framer) error {
+ if frame.StreamId == 0 {
+ return &Error{ZeroStreamId, 0}
+ }
return f.writeDataFrame(frame)
}
@@ -156,6 +168,9 @@
}
func (f *Framer) writeSynStreamFrame(frame *SynStreamFrame) (err error) {
+ if frame.StreamId == 0 {
+ return &Error{ZeroStreamId, 0}
+ }
// Marshal the headers.
var writer io.Writer = f.headerBuf
if !f.headerCompressionDisabled {
@@ -194,6 +209,9 @@
}
func (f *Framer) writeSynReplyFrame(frame *SynReplyFrame) (err error) {
+ if frame.StreamId == 0 {
+ return &Error{ZeroStreamId, 0}
+ }
// Marshal the headers.
var writer io.Writer = f.headerBuf
if !f.headerCompressionDisabled {