don't read timestamps in truncated acks

fixes #59
This commit is contained in:
Lucas Clemente
2016-05-08 14:24:35 +02:00
parent cacc972e56
commit 924bf4a999
2 changed files with 24 additions and 20 deletions

View File

@@ -156,34 +156,37 @@ func ParseAckFrame(r *bytes.Reader) (*AckFrame, error) {
}
frame.DelayTime = time.Duration(delay) * time.Microsecond
numTimestampByte, err := r.ReadByte()
if err != nil {
return nil, err
}
numTimestamp := uint8(numTimestampByte)
if !frame.Truncated {
var err error
numTimestampByte, err := r.ReadByte()
if err != nil {
return nil, err
}
numTimestamp := uint8(numTimestampByte)
// Delta Largest observed
_, err = r.ReadByte()
if err != nil {
return nil, err
}
// First Timestamp
_, err = utils.ReadUint32(r)
if err != nil {
return nil, err
}
for i := 0; i < int(numTimestamp)-1; i++ {
// Delta Largest observed
_, err = r.ReadByte()
if err != nil {
return nil, err
}
// Time Since Previous Timestamp
_, err = utils.ReadUint16(r)
// First Timestamp
_, err = utils.ReadUint32(r)
if err != nil {
return nil, err
}
for i := 0; i < int(numTimestamp)-1; i++ {
// Delta Largest observed
_, err = r.ReadByte()
if err != nil {
return nil, err
}
// Time Since Previous Timestamp
_, err = utils.ReadUint16(r)
if err != nil {
return nil, err
}
}
}
// Invalid NACK Handling:

View File

@@ -82,10 +82,11 @@ var _ = Describe("AckFrame", func() {
})
It("accepts truncated acks", func() {
b := bytes.NewReader([]byte{0x50, 0xA4, 0x03, 0x23, 0x45, 0x01, 0x02, 0xFF, 0xEE, 0xDD, 0xCC})
b := bytes.NewReader([]byte{0x50, 0xA4, 0x03, 0x23, 0x45})
frame, err := ParseAckFrame(b)
Expect(err).ToNot(HaveOccurred())
Expect(frame.Truncated).To(BeTrue())
Expect(b.Len()).To(BeZero())
})
Context("contiguous NACK ranges", func() {