[audit][quality] H3 QPACK header decode failure is silently swallowed on the request path

Open
#48 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
58/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Active
Tech stack
cpp
Domain
networking

Research direction

Start at src/proxy/http3/Http3HeaderVIOAdaptor.cc:97 and trace event_handler() into Http3Transaction. Compare how the HTTP/2 path surfaces HPACK errors, then verify that QPACK decode failure results in the specified stream reset or connection close and error codes. Done means malformed header blocks no longer leave the stream in limbo.

Written by the indexing model from the issue text.

Description

area:quality audit severity:medium

Severity: medium · Category: logic-bug
Location: src/proxy/http3/Http3HeaderVIOAdaptor.cc:97

What's wrong

Http3HeaderVIOAdaptor::event_handler() handles QPACK_EVENT_DECODE_FAILED with a debug log and a bare break, then returns EVENT_DONE. No error is propagated to the transaction or connection, so a malformed/undecodable HTTP/3 header block leaves the stream in limbo instead of resetting it or closing the connection as RFC 9204 requires. The gap is acknowledged in-code with a FIXME. This is representative of a broader inconsistency: 2,162 assert sites elsewhere, but hard failures here are ignored.

Evidence
case QPACK_EVENT_DECODE_FAILED:
    Dbg(dbg_ctl_v_http3, "%s (%d)", "QPACK_EVENT_DECODE_FAILED", event);
    // FIXME: handle error
    break;
Suggested fix

Propagate the failure to Http3Transaction so the stream is reset with H3_INTERNAL_ERROR / the connection closed with QPACK_DECOMPRESSION_FAILED, mirroring how the HTTP/2 path surfaces HPACK errors.


Filed from an automated multi-lens codebase audit. Full report: CODEBASE_AUDIT.md / audit-report.html on branch claude/codebase-audit-review-9nw7vz.

Dominant language
C++
Stars
0
Forks
0
Avg merge
8h 2m
Merged PRs (30d)
21

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from JakeChampion/trafficserver

All issues in JakeChampion/trafficserver

Similar issues

More C++ issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.