brbzull0 opened a new pull request, #13627:
URL: https://github.com/apache/trafficserver/pull/13627

   `Http3SettingsFrame::_parse()` decodes each SETTINGS identifier with
   `QUICIntUtil::read_QUICVariableInt()`, which returns `uint64_t`, but stored 
the
   result in a `uint16_t` local (`src/proxy/http3/Http3Frame.cc:459`). RFC 9114
   defines SETTINGS identifiers as variable-length integers and requires
   unrecognized identifiers to be ignored; narrowing the decoded value before 
the
   comparison against the known-ID set means an identifier outside that set can
   alias a known one on its low 16 bits.
   
   This widens the local to `uint64_t`. Nothing else changes -- the surrounding
   parse loop and the known-ID comparison are untouched.
   
   ### Test
   
   Adds `Load SETTINGS Frame ignores wide unknown identifier` to
   `test_Http3Frame.cc`, tagged `[http3-settings-id-width]`. It feeds a SETTINGS
   frame whose identifier is the 4-byte varint encoding of `0x10001` -- sharing 
its
   low 16 bits with `HEADER_TABLE_SIZE` (`0x01`) -- and asserts the frame 
parses as
   valid while *not* containing `HEADER_TABLE_SIZE`.
   
   Confirmed this is a regression test and not a tautology: with the `uint16_t`
   restored it fails on `CHECK_FALSE(contains(HEADER_TABLE_SIZE))` (expansion
   `!true`); with the fix it passes, 4 assertions.
   
   Also run: full `test_http3` (138 assertions / 16 cases, up from 134/15 on
   master) and the `h3_proxy_verifier` autest.
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to