)]}'
{
  "commit": "fb4f4fcc08b645d9f8b8cfe9d3aca7e9437ef11f",
  "tree": "a361fb2e0c050974bfb66dde95b667ae13c88817",
  "parents": [
    "780013095e4ec34697ee4d77f9517bd0ab870638"
  ],
  "author": {
    "name": "bnc",
    "email": "bnc@google.com",
    "time": "Mon Nov 18 17:14:56 2019 -0800"
  },
  "committer": {
    "name": "Copybara-Service",
    "email": "copybara-worker@google.com",
    "time": "Mon Nov 18 17:15:39 2019 -0800"
  },
  "message": "Fix use-after-free in QpackProgressiveDecoder and QpackInstructionDecoder.\n\nI locally verified that this fixes both https://crbug.com/1025158 and\nhttps://crbug.com/1025209.\n\nQpackDecodedHeadersAccumulator and QuicSpdyStream had a secret conference at\ncl/280327626 where they agreed that QpackDecodedHeadersAccumulator will support\nbeing destroyed by the handler and QuicSpdyStream can get much cleaner by\nrelying on it.  However, they forgot to tell QpackProgressiveDecoder and\nQpackInstructionDecoder, who are now quite grumpy at https://crbug.com/1025209.\n\nIt is clear that these four do not talk, otherwise how could it happen that\nQuicSpdyStream is the Visitor of QpackDecodedHeadersAccumulator,\nQpackDecodedHeadersAccumulator is the Handler of QpackProgressiveDecoder,\nand QpackProgressiveDecoder is the Delegate of QpackInstructionDecoder,\nthree different design pattern names for almost identical relationships.\n\ngfe-relnote: n/a, change to QUIC v99-only code.  Protected by existing disabled gfe2_reloadable_flag_quic_enable_version_99.\nPiperOrigin-RevId: 281188599\nChange-Id: I63b5612c142e7f1fbe0bf05eb32ddf68457b4bc3\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "af529920059fd7e86a6070fdd7e23369953a16da",
      "old_mode": 33188,
      "old_path": "quic/core/http/quic_spdy_stream_test.cc",
      "new_id": "f6ae7f5c7dd9bd57b6eaea2327d92ee4d5490b5c",
      "new_mode": 33188,
      "new_path": "quic/core/http/quic_spdy_stream_test.cc"
    },
    {
      "type": "modify",
      "old_id": "323a8936ae29290ca9f4b0689040aba94ccbd21a",
      "old_mode": 33188,
      "old_path": "quic/core/qpack/qpack_decoder_test.cc",
      "new_id": "1fc5802d83c39aa3f6f8e052651996267e5b3a38",
      "new_mode": 33188,
      "new_path": "quic/core/qpack/qpack_decoder_test.cc"
    },
    {
      "type": "modify",
      "old_id": "187894d374e9cf31aab65873ca914a7f44868740",
      "old_mode": 33188,
      "old_path": "quic/core/qpack/qpack_instruction_decoder.cc",
      "new_id": "fede8e307df19e0e6f9972edd1b23fa65ebcce21",
      "new_mode": 33188,
      "new_path": "quic/core/qpack/qpack_instruction_decoder.cc"
    },
    {
      "type": "modify",
      "old_id": "f478c249b073283761f43ac3135115d7379f7dc8",
      "old_mode": 33188,
      "old_path": "quic/core/qpack/qpack_instruction_decoder.h",
      "new_id": "becb048f8fea12029e98bfbf3cd2735ba7c94f5a",
      "new_mode": 33188,
      "new_path": "quic/core/qpack/qpack_instruction_decoder.h"
    },
    {
      "type": "modify",
      "old_id": "bdd85cf1043812e541e4048912a9cf6f15e22f92",
      "old_mode": 33188,
      "old_path": "quic/core/qpack/qpack_instruction_decoder_test.cc",
      "new_id": "54fa416b6740498135397d3995c69cb7d42cb466",
      "new_mode": 33188,
      "new_path": "quic/core/qpack/qpack_instruction_decoder_test.cc"
    },
    {
      "type": "modify",
      "old_id": "63b2669c614db3a12ee2c36fca804379044db059",
      "old_mode": 33188,
      "old_path": "quic/core/qpack/qpack_progressive_decoder.cc",
      "new_id": "8c8a77ed5a3b3557297d4a01e4a3e8fe75e62510",
      "new_mode": 33188,
      "new_path": "quic/core/qpack/qpack_progressive_decoder.cc"
    },
    {
      "type": "modify",
      "old_id": "2f306c8e19c5bba85dbb8b72f3de33a3f4402431",
      "old_mode": 33188,
      "old_path": "quic/core/qpack/qpack_progressive_decoder.h",
      "new_id": "6599c1a3ff8af3e79dae8fc195fdca5802675788",
      "new_mode": 33188,
      "new_path": "quic/core/qpack/qpack_progressive_decoder.h"
    }
  ]
}
