Hi Sami,

Thank you for your patches.
Some ideas will be used directly in commits.
For HTTP/2: this protocol is not yet completely implemented, and it needs larger finishing, not just local band-aids. However, I'll try to use some of your patches for HTTP/2 as well.

Best,
Evgeny

On 26/10/2026 19:42, Sami Jawhar wrote:
Patches 1 and 2 were found with UndefinedBehaviorSanitizer and the
OSS-Fuzz harnesses, the others by code reading:

1. Status codes above 511 were undefined behaviour in C++.
2. Three parameters that accept size zero were declared as VLAs.
3. HTTP/2 requests with empty or undefined pseudo-headers were served.
4. A first SETTINGS frame with one setting was ignored.
5. WINDOW_UPDATE added the stream id instead of the increment.
6. Dead code in process_inc_frame().
7. The client's SETTINGS acknowledgement stalled the connection.
8. The field iterator reported the value length as the name length.
9. The TLS session query returned an error on success.

Patches 3, 5 and 7-9 add or extend tests that fail without their fix.
The first window case of patch 5 also fails without patch 4. make check
shows no new failure at any patch.

Question: req_headers_preprocess() accepts an HTTP/2 request with no
:authority and an empty host header. Is that intended?

Sami Jawhar (9):
   microhttpd2.h: added sentinel to enum MHD_HTTP_StatusCode
   Removed array size from parameters that can be zero-sized
   HTTP/2: added checks for invalid pseudo-headers
   HTTP/2: fixed ignoring of a SETTINGS frame with one setting
   HTTP/2: fixed stream window increment
   HTTP/2: removed unreachable return and unused enum
   HTTP/2: added processing of the settings acknowledgement
   HTTP/2: fixed name length of request fields in iterator
   Fixed status code of the TLS session connection info

  doc/manual/responses.inc                      |    4 +-
  src/include/microhttpd2.h                     |   19 +-
  src/include/microhttpd2_main.h.in             |   16 +-
  src/include/microhttpd2_preamble.h.in         |    3 +-
  src/mhd2/conn_get_info.c                      |    2 +-
  src/mhd2/h2/h2_conn_streams.c                 |    4 +-
  src/mhd2/h2/h2_conn_streams.h                 |    2 +
  src/mhd2/h2/h2_proc_in.c                      |   13 +-
  src/mhd2/h2/h2_proc_settings.c                |   11 +-
  src/mhd2/h2/h2_proc_settings.h                |    8 +
  src/mhd2/h2/h2_req_fields.c                   |    6 +
  src/mhd2/h2/h2_req_get_items.c                |    2 +-
  src/mhd2/response_from.c                      |   11 +-
  src/mhd2/stream_process_request.c             |    2 +-
  src/mhd2/stream_process_request.h             |    2 +-
  src/tests/client_server/libtest.h             |   30 +-
  .../libtest_convenience_server_reply.c        |  104 ++
  src/tests/client_server/test_tls.c            |    9 +
  src/tests/raw/Makefile.am                     |    5 +
  src/tests/raw/test_h2_raw.c                   | 1082 +++++++++++++++++
  20 files changed, 1304 insertions(+), 31 deletions(-)
  create mode 100644 src/tests/raw/test_h2_raw.c


base-commit: 24a2913c4e1cb31a5cff52047beae146959d50b0


Reply via email to