diff --git a/quinn-proto/src/connection/mod.rs b/quinn-proto/src/connection/mod.rs index 124294d06..a2be438a4 100644 --- a/quinn-proto/src/connection/mod.rs +++ b/quinn-proto/src/connection/mod.rs @@ -2259,6 +2259,12 @@ impl Connection { path: PathId, ack: frame::Ack, ) -> Result<(), TransportError> { + if self.abandoned_paths.contains(&path) { + // See also https://www.ietf.org/archive/id/draft-ietf-quic-multipath-17.html#section-3.4.3-3 + // > PATH_ACK frames received with an abandoned path ID are silently ignored, as specified in Section 4. + trace!("silently ignoring PATH_ACK on abandoned path"); + return Ok(()); + } if ack.largest >= self.spaces[space].for_path(path).next_packet_number { return Err(TransportError::PROTOCOL_VIOLATION("unsent packet acked")); }