- Fixed a use-after-free in
quiche_connection_id_iter_next(), which is part of quiche's C FFI API. The iterator previously returned a pointer to a cloned connection ID whose backing storage was dropped before the caller could read it. It now returns pointers to connection IDs owned by the iterator. - Fixed a use-after-free in
quiche_conn_retired_scid_next(), which is also part of the C FFI API. The function previously returned a pointer to a retired source connection ID whose backing storage was dropped before the caller could read it. It has been replaced byquiche_conn_retired_scid_iter(), which drains retired source connection IDs into an iterator before exposing them to callers.
The C FFI API is disabled by default via the ffi feature. The normal Rust API is not affected by these issues.
Breaking changes:
- The C API function
quiche_conn_retired_scid_next()was removed and replaced withquiche_conn_retired_scid_iter()to avoid returning pointers to temporary memory. Applications usingquiche_conn_retired_scid_next()should callquiche_conn_retired_scid_iter(conn), iterate withquiche_connection_id_iter_next(), and release the iterator withquiche_connection_id_iter_free().
Highlights:
- Fixed stream send-buffer accounting so congestion controller app-limited detection and
Stats::tx_buffered_statetrack the actual bytes buffered in stream send buffers. This avoids buffered byte-count drift across retransmissions, ACKs, and stream shutdown/reset paths.
Full changelog at 0.29.1...0.29.2