Because `send_reset` called `recv_err`, which calls `reclaim_all_capacity`, which eventually calls `transition(stream, ..)` -- all of which happens _before_ the RESET frame is enqueued -- it was possible for the stream to get unlinked from the store (if there was any connection-level capacity to reassign). This could then cause the stream to get "leaked" on drop/EOF since it would no longer be iterated. Fix this by delaying the call to `reclaim_all_capacity` _after_ enqueueing the RESET frame. A test demonstrating the issue is included.
h2 integration tests
This crate includes the h2 integration tests. These tests exist in a separate
crate because they transitively depend on the unstable feature flag via
h2-support. Due to a cargo limitation, if these tests existed as part of the
h2 crate, it would require that h2-support be published to crates.io and
force the unstable feature flag to always be on.
Setup
Install honggfuzz for cargo:
cargo install honggfuzz
Running
From within this directory, run the following command:
HFUZZ_RUN_ARGS="-t 1" cargo hfuzz run h2-fuzz