)]}'
{
  "commit": "f5ed68857457193ed41107ba0d0415dda3edef32",
  "tree": "92620031f8a2d9ae4bff161dff93f208b5865ab3",
  "parents": [
    "f17e47352571020af97b0fbf1bdf1e00a549d794"
  ],
  "author": {
    "name": "reubent",
    "email": "reubent@google.com",
    "time": "Tue Feb 24 15:14:48 2026 -0800"
  },
  "committer": {
    "name": "Copybara-Service",
    "email": "copybara-worker@google.com",
    "time": "Tue Feb 24 15:15:27 2026 -0800"
  },
  "message": "Add HttpValidationPolicy controlling semicolon delimitation of chunk-exts\n\nBalsa currently accepts requests where `chunk-size` contains illegal whitespace (SP or HTAB). For example, Balsa parses an `1 A` chunk-size as `1` and the chunk extension as ` A`. This is slightly incorrect.\n\nThere are two primary cases to consider:\n\n1. `chunk-size` followed by `chunk-ext` + `CRLF` framing\n2. `chunk-size` followed only by `CRLF` framing\n\nFor `chunk-size` without a `chunk-ext`, any trailing `SP/HTAB` is always illegal.\n\nFor `chunk-size` with a `chunk-ext`, there actually is a case where it’s valid to have whitespace after `chunk-size`. If that `chunk-ext` begins with `BWS`, it is perfectly legal to have `SP` or `HTAB` following the `chunk-size`. However, that is legal if and only if, the `BWS` is part of a `chunk-ext` and not superfluous before a `CRLF`.\n\nUnfortunately, Balsa does not have any enforcement that `chunk-ext` contain a `;` which makes it difficult to differentiate between the `SP` / `HTAB` being `BWS` in a chunk-ext or erroneous trailing whitespace so we add enforcement that the `chunk-ext` contains a `;` and, if it is present, it is only preceded by `SP` or `HTAB`.\n\nProtected by unused http validation policy.\n\nPiperOrigin-RevId: 874812254\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "65f63dce44d15618c99e6c20f77e774a5eb1e1bf",
      "old_mode": 33188,
      "old_path": "quiche/balsa/balsa_frame.cc",
      "new_id": "2d08b8d2bd029354701ad029d40e240bfacab953",
      "new_mode": 33188,
      "new_path": "quiche/balsa/balsa_frame.cc"
    },
    {
      "type": "modify",
      "old_id": "3bf7873696b7b5982f89cd3dd4a6bd7583d6d591",
      "old_mode": 33188,
      "old_path": "quiche/balsa/balsa_frame_test.cc",
      "new_id": "8967716968efbab2f4e31d640afe88b1190b4525",
      "new_mode": 33188,
      "new_path": "quiche/balsa/balsa_frame_test.cc"
    },
    {
      "type": "modify",
      "old_id": "fc4ed71e2b640769ee1cc4360287801101c581af",
      "old_mode": 33188,
      "old_path": "quiche/balsa/balsa_fuzz_util.cc",
      "new_id": "58b15fa4a61ad6af32346f2a048d234ebd19d7d1",
      "new_mode": 33188,
      "new_path": "quiche/balsa/balsa_fuzz_util.cc"
    },
    {
      "type": "modify",
      "old_id": "a1970719326a75cab4e7ff513ad9ed6c75250425",
      "old_mode": 33188,
      "old_path": "quiche/balsa/http_validation_policy.h",
      "new_id": "7df7b7dacf478e6b719dc8e100e26933874a1ce9",
      "new_mode": 33188,
      "new_path": "quiche/balsa/http_validation_policy.h"
    }
  ]
}
