reject QUIC 34 ACK frames that have an empty first ACK range

This commit is contained in:
Marten Seemann
2016-06-28 22:14:43 +07:00
parent d14f85d4ec
commit 1186af3f99
2 changed files with 28 additions and 4 deletions

View File

@@ -9,8 +9,12 @@ import (
"github.com/lucas-clemente/quic-go/utils"
)
// ErrInvalidAckRanges occurs when a client sends inconsistent ACK ranges
var ErrInvalidAckRanges = errors.New("AckFrame: ACK frame contains invalid ACK ranges")
var (
// ErrInvalidAckRanges occurs when a client sends inconsistent ACK ranges
ErrInvalidAckRanges = errors.New("AckFrame: ACK frame contains invalid ACK ranges")
// ErrInvalidFirstAckRange occurs when the first ACK range contains no packets
ErrInvalidFirstAckRange = errors.New("AckFrame: ACK frame has invalid first ACK range")
)
var (
errInconsistentAckLargestAcked = errors.New("internal inconsistency: LargestAcked does not match ACK ranges")
@@ -75,6 +79,9 @@ func ParseAckFrameNew(r *bytes.Reader, version protocol.VersionNumber) (*AckFram
if err != nil {
return nil, err
}
if ackBlockLength < 1 {
return nil, ErrInvalidFirstAckRange
}
if ackBlockLength > largestAcked {
return nil, ErrInvalidAckRanges