)]}'
{
  "commit": "1ff868169c83ab770f36ed932e30e3c902f771ef",
  "tree": "a8566b3f4d02cb28e8210a142f9c21bfecf0e9c8",
  "parents": [
    "62caa6c4f5a751d56e7321dea321d8cb742c5af0"
  ],
  "author": {
    "name": "bnc",
    "email": "bnc@google.com",
    "time": "Tue Sep 28 06:00:44 2021 -0700"
  },
  "committer": {
    "name": "Copybara-Service",
    "email": "copybara-worker@google.com",
    "time": "Tue Sep 28 06:02:14 2021 -0700"
  },
  "message": "Do not preallocate memory in HttpDecoder for frame payload.\n\nDATA, HEADERS, and unknown frame payload fragments are passed immediately to\nVisitor without buffering.  CANCEL_PUSH and PUSH_PROMISE frames are not\nprocessed.  GOAWAY and MAX_PUSH_ID frames have small payloads.  Only SETTINGS,\nPRIORITY_UPDATE, and ACCEPT_CH frames may be buffered by HttpDecoder and are\nallowed to have large payloads.  In most cases these frames are small and the\npayload is sent in a single fragment, in which case HttpDecoder parses it\ndirectly from the input without buffering.  Buffering only happens in the rest\nof the cases, which clearly is not a hot path.  This CL changes HttpDecoder not\nto preallocate memory for the payload buffer in these cases, and let std::string\ndeal with growing internally.\n\nAlso introduce kPayloadLengthLimit constant, and do not call MaxFrameLength()\nfor frames that are not buffered.\n\nPiperOrigin-RevId: 399421301\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "de86955739be28791ab35120851b236f9ef70fb5",
      "old_mode": 33188,
      "old_path": "quic/core/http/http_decoder.cc",
      "new_id": "2265b77d3483449e95985177333c85325398d126",
      "new_mode": 33188,
      "new_path": "quic/core/http/http_decoder.cc"
    }
  ]
}
