diff --git a/internal/cc/feedback_adapter.go b/internal/cc/feedback_adapter.go index 4d634e64..9760fba5 100644 --- a/internal/cc/feedback_adapter.go +++ b/internal/cc/feedback_adapter.go @@ -182,6 +182,11 @@ func (f *FeedbackAdapter) OnTransportCCFeedback( } } + // Discard padding slots from the last StatusVectorChunk. + if int(feedback.PacketStatusCount) < len(result) { + result = result[:feedback.PacketStatusCount] + } + return result, nil } diff --git a/internal/cc/feedback_adapter_test.go b/internal/cc/feedback_adapter_test.go index 89ffb5f4..adbcc1bb 100644 --- a/internal/cc/feedback_adapter_test.go +++ b/internal/cc/feedback_adapter_test.go @@ -671,7 +671,7 @@ func TestFeedbackAdapterTWCC(t *testing.T) { assert.NoError(t, err) assert.NotEmpty(t, results) - assert.Len(t, results, 7) + assert.Len(t, results, 2) assert.Contains(t, results, Acknowledgment{ SequenceNumber: 65535, Size: pkt65535.Header.MarshalSize() + 1200, @@ -739,7 +739,7 @@ func TestFeedbackAdapterTWCC(t *testing.T) { }, }) assert.NoError(t, err) - assert.Len(t, results, 7) + assert.Len(t, results, 3) for i := range uint16(3) { assert.Contains(t, results, Acknowledgment{ SequenceNumber: i, @@ -748,14 +748,6 @@ func TestFeedbackAdapterTWCC(t *testing.T) { Arrival: t0.Add(time.Duration((i + 1)) * 4 * time.Microsecond), }) } - for i := uint16(3); i < 7; i++ { - assert.Contains(t, results, Acknowledgment{ - SequenceNumber: i, - Size: headers[i].MarshalSize() + 1200, - Departure: t0, - Arrival: time.Time{}, - }) - } }) t.Run("runLengthChunk", func(t *testing.T) { @@ -858,7 +850,7 @@ func TestFeedbackAdapterTWCC(t *testing.T) { }) assert.NoError(t, err) - assert.Len(t, packets, 14) + assert.Len(t, packets, 3) }) t.Run("mixedRunLengthAndStatusVector", func(t *testing.T) {