)]}'
{
  "commit": "01612991c0e548b0879eacef6a12a71522eacf09",
  "tree": "83f24189d52e428ca9a2a9b57cedd6dbf5622257",
  "parents": [
    "2bd145e7498c4ed6c62a0ed9811546345514910b"
  ],
  "author": {
    "name": "reubent",
    "email": "reubent@google.com",
    "time": "Thu Apr 09 14:25:00 2026 -0700"
  },
  "committer": {
    "name": "Copybara-Service",
    "email": "copybara-worker@google.com",
    "time": "Thu Apr 09 14:25:34 2026 -0700"
  },
  "message": "Enforce a limit on the amount of total, uncompressed header bytes\n\nEnforcing a limit on uncompressed bytes is aligned with the RFC and is governed by `SETTINGS_MAX_HEADER_LIST_SIZE`. The amount of total uncompressed bytes was already tracked in `hpack_decoder_adapter` but was not exposed or used. We expose it here and enforce that the limit has not been exceeded in the oghttp2 OnHeader callback. Note that this means the header will be fully uncompressed before it is checked so, for very large headers that could lead to an OOM, we rely on per-header size limits which are already enforced.\n\nSince the spec is ambiguous about whether this should fail the entire connection or simply reset the offending stream, integrators of oghttp2 now have the option to do either based on their return from `OnInvalidFrame`, true resets only one stream, false will tear down the entire connection.\n\nFrom https://datatracker.ietf.org/doc/html/rfc9113#name-limits-on-field-block-size:\n```\nThis advisory setting informs a peer of the maximum field section size that the sender is prepared to accept, in units of octets. The value is based on the uncompressed size of field lines, including the length of the name and value in units of octets plus an overhead of 32 octets for each field line.\n\nFor any given request, a lower limit than what is advertised MAY be enforced. The initial value of this setting is unlimited.\n```\n\nProtected by new, unused oghttp2 session option which will be set in Envoy.\n\nPiperOrigin-RevId: 897302011\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "90874d13ef21d7903f4521f7cdb65cdffe624bb6",
      "old_mode": 33188,
      "old_path": "quiche/http2/adapter/oghttp2_session.cc",
      "new_id": "41e74f35e187d46487e33f885458afe39549175f",
      "new_mode": 33188,
      "new_path": "quiche/http2/adapter/oghttp2_session.cc"
    },
    {
      "type": "modify",
      "old_id": "b788cb0a02d8bd5726a4ea837027284ae42bca3c",
      "old_mode": 33188,
      "old_path": "quiche/http2/adapter/oghttp2_session.h",
      "new_id": "be7ceb4d0c288b24d5b37bde2e5ae11da0d7a61d",
      "new_mode": 33188,
      "new_path": "quiche/http2/adapter/oghttp2_session.h"
    },
    {
      "type": "modify",
      "old_id": "c21014526b56b803ae630311e0c380afd3cd0c39",
      "old_mode": 33188,
      "old_path": "quiche/http2/adapter/oghttp2_session_test.cc",
      "new_id": "74425a5c6be8abaa8c74f1dc9522d98a3f788769",
      "new_mode": 33188,
      "new_path": "quiche/http2/adapter/oghttp2_session_test.cc"
    },
    {
      "type": "modify",
      "old_id": "d8112e2568c18187c5dbab8287a66136275e9584",
      "old_mode": 33188,
      "old_path": "quiche/http2/hpack/hpack_decoder_adapter.cc",
      "new_id": "9a6fb2eecac837617c39970708e893f2a72a581f",
      "new_mode": 33188,
      "new_path": "quiche/http2/hpack/hpack_decoder_adapter.cc"
    },
    {
      "type": "modify",
      "old_id": "46eb7000ce0dcc3d9c2bf6a1aae7653e1287f7ad",
      "old_mode": 33188,
      "old_path": "quiche/http2/hpack/hpack_decoder_adapter.h",
      "new_id": "c9d28de2e6c6622ec56d7e91397fc2c4910723fc",
      "new_mode": 33188,
      "new_path": "quiche/http2/hpack/hpack_decoder_adapter.h"
    },
    {
      "type": "modify",
      "old_id": "f4eb58040e54476e322e3f985d88aec36deff2a0",
      "old_mode": 33188,
      "old_path": "quiche/http2/hpack/hpack_decoder_adapter_test.cc",
      "new_id": "ca43a7c77e29c9816446a2ecf1b136b630b1e569",
      "new_mode": 33188,
      "new_path": "quiche/http2/hpack/hpack_decoder_adapter_test.cc"
    }
  ]
}
