forked from quic-go/quic-go
@@ -200,7 +200,7 @@ func (s *stream) Write(p []byte) (int, error) {
|
|||||||
return 0, s.err
|
return 0, s.err
|
||||||
}
|
}
|
||||||
|
|
||||||
dataLen := utils.Min(len(p), int(remainingBytesInWindow))
|
dataLen := utils.MinByteCount(protocol.ByteCount(len(p)), remainingBytesInWindow)
|
||||||
data := make([]byte, dataLen)
|
data := make([]byte, dataLen)
|
||||||
copy(data, p)
|
copy(data, p)
|
||||||
err := s.session.queueStreamFrame(&frames.StreamFrame{
|
err := s.session.queueStreamFrame(&frames.StreamFrame{
|
||||||
@@ -213,7 +213,7 @@ func (s *stream) Write(p []byte) (int, error) {
|
|||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
|
|
||||||
dataWritten += dataLen
|
dataWritten += int(dataLen) // We cannot have written more than the int range
|
||||||
s.flowController.AddBytesSent(protocol.ByteCount(dataLen))
|
s.flowController.AddBytesSent(protocol.ByteCount(dataLen))
|
||||||
if s.contributesToConnectionFlowControl {
|
if s.contributesToConnectionFlowControl {
|
||||||
s.connectionFlowController.AddBytesSent(protocol.ByteCount(dataLen))
|
s.connectionFlowController.AddBytesSent(protocol.ByteCount(dataLen))
|
||||||
|
|||||||
@@ -464,6 +464,16 @@ var _ = Describe("Stream", func() {
|
|||||||
Expect(b).To(BeTrue())
|
Expect(b).To(BeTrue())
|
||||||
Expect(err).To(MatchError(testErr))
|
Expect(err).To(MatchError(testErr))
|
||||||
})
|
})
|
||||||
|
|
||||||
|
It("works with large flow control windows", func() {
|
||||||
|
// This paniced before due to a wrong cast,
|
||||||
|
// see https://github.com/lucas-clemente/quic-go/issues/143
|
||||||
|
str.contributesToConnectionFlowControl = false
|
||||||
|
updated := str.UpdateSendFlowControlWindow(protocol.ByteCount(1) << 63)
|
||||||
|
Expect(updated).To(BeTrue())
|
||||||
|
_, err := str.Write([]byte("foobar"))
|
||||||
|
Expect(err).NotTo(HaveOccurred())
|
||||||
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user