)]}'
{
  "commit": "7ccff5893596bbe81c17e66b40753c6325082f96",
  "tree": "a07935d91a97b27400b0e3b68e4f017217006be5",
  "parents": [
    "1783bc22e4aea98fc023ea9f142218f874066e38"
  ],
  "author": {
    "name": "dschinazi",
    "email": "dschinazi@google.com",
    "time": "Wed May 13 10:24:39 2020 -0700"
  },
  "committer": {
    "name": "Copybara-Service",
    "email": "copybara-worker@google.com",
    "time": "Wed May 13 10:25:16 2020 -0700"
  },
  "message": "Harden QuicStream::flow_controller_\n\nThis CL unblocks merge. Calling QuicheOptional::operator-\u003e when there is no value present is undefined behavior. Chrome\u0027s implementation of QuicheOptional is more strict than the C++ standard library used in google3, and in debug builds it asserts when operator-\u003e is used even though there is no value present. This is causing tests to fail and blocking merge.\n\nThis CL protects every single call to QuicStream::flow_controller_::operator-\u003e with a check that verifies that a value was present. In almost all cases, it adds a QUIC_BUG to prove that this never happens in practice. The only case that does not have a QUIC_BUG is inside OnClose because this seems to be leveraged by multiple of our tests (QuicSessionTestClient.InvalidStreamFlowControlWindowInHandshake, QuicSessionTestServer.DontCallOnWriteBlockedForDisconnectedConnection, QuicSpdySessionTestClient.BadStreamFramePendingStream). We\u0027ve confirmed that this CL fixes the merge issue.\n\nAvoid undefined behavior, not flag protected\n\nPiperOrigin-RevId: 311355214\nChange-Id: I0e7d8c0c97815e1ed6f19509f0e64dfda8a32e5c\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "7355aea7951f13fc2b1cf057574258a7ca49f187",
      "old_mode": 33188,
      "old_path": "quic/core/quic_stream.cc",
      "new_id": "40a67bba21c80ddbcd63739f86aa90dba80bc57b",
      "new_mode": 33188,
      "new_path": "quic/core/quic_stream.cc"
    }
  ]
}
