add an error when attempting to write empty stream frames

This commit is contained in:
Lucas Clemente
2016-07-13 13:29:25 +02:00
parent 903130da20
commit 546ba27013
2 changed files with 14 additions and 0 deletions

View File

@@ -87,6 +87,10 @@ func ParseStreamFrame(r *bytes.Reader) (*StreamFrame, error) {
// WriteStreamFrame writes a stream frame.
func (f *StreamFrame) Write(b *bytes.Buffer, version protocol.VersionNumber) error {
if len(f.Data) == 0 && !f.FinBit {
return errors.New("StreamFrame: attempting to write empty frame without FIN")
}
typeByte := uint8(0x80) // sets the leftmost bit to 1
if f.FinBit {

View File

@@ -78,12 +78,21 @@ var _ = Describe("StreamFrame", func() {
Expect(b.Bytes()[0] & 0x40).To(Equal(byte(0x40)))
})
It("errors when length is zero and FIN is not set", func() {
b := &bytes.Buffer{}
err := (&StreamFrame{
StreamID: 1,
}).Write(b, 0)
Expect(err).To(MatchError("StreamFrame: attempting to write empty frame without FIN"))
})
It("has proper min length for a short StreamID and a short offset", func() {
b := &bytes.Buffer{}
f := &StreamFrame{
StreamID: 1,
Data: []byte{},
Offset: 0,
FinBit: true,
}
err := f.Write(b, 0)
Expect(err).ToNot(HaveOccurred())
@@ -96,6 +105,7 @@ var _ = Describe("StreamFrame", func() {
StreamID: 0xDECAFBAD,
Data: []byte{},
Offset: 0xDEADBEEFCAFE,
FinBit: true,
}
err := f.Write(b, 0)
Expect(err).ToNot(HaveOccurred())