)]}'
{
  "commit": "626e40fc986f72b464ecb2063e02e7923bf3025d",
  "tree": "aec4de2e130558ee3a43335ee2911cd5c56894cc",
  "parents": [
    "31914c699bfcc4906a7f6a178e910388518ed6a3"
  ],
  "author": {
    "name": "Nicola Murino",
    "email": "nicola.murino@gmail.com",
    "time": "Sun Jul 19 20:08:16 2026 +0200"
  },
  "committer": {
    "name": "Nicola Murino",
    "email": "nicola.murino@gmail.com",
    "time": "Wed Jul 22 10:34:36 2026 -0700"
  },
  "message": "ssh: drain stderr on forwarded TCP and Unix channels\n\ntcpListener.Accept, unixListener.Accept, Client.dial and\nClient.dialStreamLocal only read the main stream of the channels they\nreturn. Data sent by the peer on the extended (stderr) stream\naccumulates in the extPending buffer and its window credit is only\nreturned by ReadExtended, which is never called. Since the window is\nshared between the two streams, a misbehaving peer can pin up to 2 MiB\nper channel and eventually stall it; well-behaved peers never send\nstderr on these channel types.\n\nDrain the stderr stream into io.Discard, mirroring CL 783720 which\nfixed the same issue in the agent forwarders.\n\nThe drain takes precedence over reading Stderr through a type assertion\non the returned net.Conn, which was never a supported use. For\ncomparison, OpenSSH refuses extended data on these channel types and\ndrops the payload without buffering it.\n\nUpdates golang/go#80333\n\nChange-Id: I4f1445eee9ce1b56ca62cec342812d63cfdd3e13\nReviewed-on: https://go-review.googlesource.com/c/crypto/+/802900\nReviewed-by: Filippo Valsorda \u003cfilippo@golang.org\u003e\nReviewed-by: Carlos Amedee \u003ccarlos@golang.org\u003e\nReviewed-by: Cherry Mui \u003ccherryyz@google.com\u003e\nLUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com \u003cgolang-scoped@luci-project-accounts.iam.gserviceaccount.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "152470fcb796f4c319ae0e79ac4db46c1f840967",
      "old_mode": 33188,
      "old_path": "ssh/streamlocal.go",
      "new_id": "8e997da3db667a5d327f110df9b0ffa39f026fc9",
      "new_mode": 33188,
      "new_path": "ssh/streamlocal.go"
    },
    {
      "type": "modify",
      "old_id": "78c41fe5a1264a704b505070302a9b89241b998a",
      "old_mode": 33188,
      "old_path": "ssh/tcpip.go",
      "new_id": "213d8a614a9751033e40b21f67c425497a8cd483",
      "new_mode": 33188,
      "new_path": "ssh/tcpip.go"
    },
    {
      "type": "modify",
      "old_id": "4d8511472782d96266d712642d7384bbeb9bc822",
      "old_mode": 33188,
      "old_path": "ssh/tcpip_test.go",
      "new_id": "5ec7ed9c2789a6f1f009e1753dd5ebd27f079aa9",
      "new_mode": 33188,
      "new_path": "ssh/tcpip_test.go"
    }
  ]
}
