)]}'
{
  "commit": "9f24bb44e6dfa4fadbda1cd143a46d288ba89ae5",
  "tree": "c50a530892d9dc420317d2ef3807134ad94309bd",
  "parents": [
    "08dda57501ce6ef3fd63b9a912de135c050e8b0d"
  ],
  "author": {
    "name": "Damien Neil",
    "email": "dneil@google.com",
    "time": "Thu Mar 09 12:33:56 2023 -0800"
  },
  "committer": {
    "name": "Damien Neil",
    "email": "dneil@google.com",
    "time": "Thu Mar 09 22:21:42 2023 +0000"
  },
  "message": "http2: properly discard data received after request/response body is closed\n\nA server handler can close an inbound Request.Body to indicate that it\nis not interested in the remainder of the request body.\n\nEquivalently, a client can close a Response.Body indicate that it is\nnot interesed in the remainder of the response body.\n\nIn both cases, if we receive DATA frames from the peer for the stream,\nwe should return connection-level flow control credit for the discarded data.\nWe do not return stream-level flow control, since we don\u0027t want to unblock\nfurther sends of data that we\u0027re just going to discard.\n\nClosing either a Response.Body or an inbound Request.Body results in a\npipe.BreakWithError. Reads from a broken pipe fail immediately.\n\nPreviously, writes to a broken pipe would succeed, discarding the written\ndata and incrementing the pipe\u0027s unread count. Silently discarding\ndata written to a broken pipe results in both the Transport and Server\nfailing to detect the condition where data has been discarded.\n\nChange pipes to return an error when writing to a broken pipe.\n\nChange transportResponseBody.Close to break the response body before\nreturning flow control credit for unread data in the pipe, avoiding\na race condition where data is added to the pipe in between the\nreturn of flow control credit and the pipe breaking.\n\nChange the Server to treat an error writing to the inbound request\nbody as an expected condition (since this only happens when a\nhandler closes the request body), returning connection-level\nflow control credit for the discarded data.\n\nFixes golang/go#57578\n\nChange-Id: I1ed4ea9865818f9c7d7eb4500edfd7556e3cbcbf\nReviewed-on: https://go-review.googlesource.com/c/net/+/475135\nRun-TryBot: Damien Neil \u003cdneil@google.com\u003e\nTryBot-Result: Gopher Robot \u003cgobot@golang.org\u003e\nReviewed-by: Roland Shoemaker \u003croland@golang.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "c15b8a7719b5c51c545aac668fe97fee0b8bbb2b",
      "old_mode": 33188,
      "old_path": "http2/pipe.go",
      "new_id": "684d984fd96affc31c04a21493204e52c1b0f583",
      "new_mode": 33188,
      "new_path": "http2/pipe.go"
    },
    {
      "type": "modify",
      "old_id": "83d2dfd27ef131a35247b42a3f232ff0b0545150",
      "old_mode": 33188,
      "old_path": "http2/pipe_test.go",
      "new_id": "67562a92a1ed2b1bcc8923f45935c0e92e5e9b02",
      "new_mode": 33188,
      "new_path": "http2/pipe_test.go"
    },
    {
      "type": "modify",
      "old_id": "8cb14f3c97f53f7a08d28ab24a4aabab4fbcce0d",
      "old_mode": 33188,
      "old_path": "http2/server.go",
      "new_id": "cd057f39824801abd303ab96330ab5c0a30cab25",
      "new_mode": 33188,
      "new_path": "http2/server.go"
    },
    {
      "type": "modify",
      "old_id": "d32b2d85bd8261e97c78155a83034e9066405594",
      "old_mode": 33188,
      "old_path": "http2/server_test.go",
      "new_id": "40ab750fca526828d2fa792dc61f120ab35bd8ab",
      "new_mode": 33188,
      "new_path": "http2/server_test.go"
    },
    {
      "type": "modify",
      "old_id": "05ba23d3d98869ad554db592b23a14e0405519e6",
      "old_mode": 33188,
      "old_path": "http2/transport.go",
      "new_id": "c9e1115a5d6bfe7be994db5dab10ced887541e19",
      "new_mode": 33188,
      "new_path": "http2/transport.go"
    }
  ]
}
