Skip to content

Latest commit

 

History

History
 
 

http3

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

HTTP/3 engine fuzz corpus

These authored binary .seed files replay against fresh HTTP/3 connections. The fuzz runner copies them into a writable build directory. Keep source seeds immutable; add minimized regressions as new named seeds.

The first byte selects a limit profile modulo 16. Remaining records contain three bytes (operation, stream slot, payload length), then that many raw payload bytes. A truncated payload uses the available suffix. Operations are reduced modulo 13 and slots modulo 16. At most 4096 bytes and 64 records run. Slots 0–7 map to request streams 4 * slot; slots 8–15 map to peer unidirectional streams 4 * (slot - 8) + 2.

Operation Behavior
0 Append and feed raw stream bytes
1 / 2 RESET / EOF terminal notification
3 Begin a scheduler turn
4 Advance local critical output by the first payload byte
5 Encode repeated response fields; odd first payload byte publishes
6 Cancel the latest outgoing section token
7 Decode and queue a local encoder instruction
8 Publish the latest outgoing section token
9 Cancel unpublished sections for the stream
10 Shut down the connection
11 Feed at an invalid stream offset
12 Release an observed event

For local output/instructions, slots select control, encoder, or decoder roles by slot % 3. Profile 7 holds observed events until operation 12; all other profiles copy the event and release it immediately.

Profile Difference from the default ceilings
1 Expanded field bytes 41 (one below static GET's 42)
2 Zero fields
3 Compressed HEADERS 2 bytes
4 Zero blocked streams
5 / 12 Retained HEADERS 3 / 2 bytes
6 QPACK output 10 bytes
7 Hold events
8 Child QPACK table budget 127 bytes
9 Encoder instruction 3 bytes
10 Zero outgoing sections
11 Zero table capacity
13 Expanded field bytes 42 (exact static GET boundary)
14 Zero SETTINGS payload bytes
15 One field

Default ceilings are compressed HEADERS 128 bytes, expanded fields 256 bytes, eight fields, QPACK tables 128 bytes per direction, two blocked streams, retained HEADERS 256 bytes, instructions and QPACK output 128 bytes, eight outgoing sections, SETTINGS 128 bytes/eight identifiers, DATA chunks 16 bytes, two frames/instructions per turn, and 16 stream records. Data and critical storage envelopes are 16 KiB and 64 KiB. Feed calls are capped at 9536: 2 * 4096 + 64 + (64 + 16) * 16 allows consuming calls, scheduler yields, explicit feeds, event pumps and final drain visits. Copied observations/output are capped at 16 KiB and 2048 observation entries.

Seeds cover varint widths, malformed/truncated frames, SETTINGS ordering and identifiers, critical stream duplication/closure, encoder/request ordering, blocked siblings, complete/partial cancellation, late insertion, decoded and retained limits, table eviction/wrapping, decoder feedback, held events, outgoing publication/cancellation, output refusal, and shutdown. Held DATA with one release and subsequent EOF/RESET, plus a 3800-byte DATA frame, preserve the regressions for fragmentation-sensitive backpressure and scheduler work.

http3_fuzz_replay runs sorted seeds, 32 fixed-seed mutations and 32 prefixes per seed. Every input compares two fresh whole-slice executions and runs a one-byte-fragment execution. Auto-release profiles compare normalized valid results or invalid wire errors across fragmentation. Profile 7 compares two fresh fragmented executions independently: a finite number of event releases advances different byte extents, so observations and EOF errors can differ between whole-slice and fragmented delivery. Both schedules retain all typed error, resource, consumption, work and teardown assertions. Explicit replay tests also require successful blocked admission, unblocking, cancellation and decoded-limit rejection. Printed coverage indices 16–20 respectively mean decoded HEADERS, blocked admission, cancellation, unblocking and limit rejection.