gracefully handle invalid ACK delay values when parsing ACK frames

This commit is contained in:
Marten Seemann
2019-08-17 12:42:10 +07:00
parent 7df59b855f
commit f0bdf4f982
2 changed files with 23 additions and 1 deletions

View File

@@ -3,6 +3,7 @@ package wire
import (
"bytes"
"errors"
"math"
"sort"
"time"
@@ -37,7 +38,13 @@ func parseAckFrame(r *bytes.Reader, ackDelayExponent uint8, version protocol.Ver
if err != nil {
return nil, err
}
frame.DelayTime = time.Duration(delay*1<<ackDelayExponent) * time.Microsecond
delayTime := time.Duration(delay*1<<ackDelayExponent) * time.Microsecond
if delayTime < 0 {
// If the delay time overflows, set it to the maximum encodable value.
delayTime = time.Duration(math.MaxInt64)
}
frame.DelayTime = delayTime
numBlocks, err := utils.ReadVarInt(r)
if err != nil {