)]}'
{
  "commit": "ebd8b8965c74ab06bb91f7a00b23822e1f1f26ca",
  "tree": "4dbafcfc7ac55661d0aee508eaa07328e27844b6",
  "parents": [
    "b2d3c10cdc8fb642a842db2c6061743b4604b0b5"
  ],
  "author": {
    "name": "David Benjamin",
    "email": "davidben@google.com",
    "time": "Wed Jul 27 18:41:51 2022 -0700"
  },
  "committer": {
    "name": "Boringssl LUCI CQ",
    "email": "boringssl-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "time": "Thu Aug 25 17:35:50 2022 +0000"
  },
  "message": "Track SSL_ERROR_ZERO_RETURN explicitly.\n\nMost SSL_ERROR_* values are tracked directly with rwstate. SSL_get_error\nis just reading the extra return value out from the previous call.\nHowever, SSL_ERROR_ZERO_RETURN infers close_notify from the SSL\u0027s\nshutdown state and a zero return value (EOF).\n\nThis works, but if we implement SSL_read_ex and SSL_write_ex, a zero\nreturn value is no longer as carefully correlated with EOF. Moreover,\nit\u0027s already possible to get a non-EOF zero return post-close_notify if\nBIO_write returns an (arguably incorrect) return value. Instead, track\nSSL_ERROR_ZERO_RETURN in rwstate explicitly.\n\nSince rwstate is exposed as SSL_want and SSL_ERROR_ZERO_RETURN was\npreviously never returned there, I\u0027ve made it map SSL_ERROR_ZERO_RETURN\nback to SSL_ERROR_NONE. I\u0027ve also added a test for BIO_write returning\nzero, though the real purpose is for a subsequent SSL_write_ex\nimplementation to retain all the other tests we\u0027ve added in here.\n\nUpdate-Note: This is intended to be safe, but if anything breaks around\nEOFs, this change is a likely culprit.\n\nBug: 507\nChange-Id: Ide0807665f2e02ee695c4976dc5e99fb10502cf0\nReviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/53946\nAuto-Submit: David Benjamin \u003cdavidben@google.com\u003e\nReviewed-by: Adam Langley \u003cagl@google.com\u003e\nCommit-Queue: David Benjamin \u003cdavidben@google.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "d73055fbf39334925ef4b4804bbaca57c4a4d5d3",
      "old_mode": 33188,
      "old_path": "ssl/ssl_buffer.cc",
      "new_id": "2ca14efae5ea478f43794a81883b00dfdb1a37b0",
      "new_mode": 33188,
      "new_path": "ssl/ssl_buffer.cc"
    },
    {
      "type": "modify",
      "old_id": "56bc5c22e7d053ba38b925ec2a64ad8c10438da1",
      "old_mode": 33188,
      "old_path": "ssl/ssl_lib.cc",
      "new_id": "3b06bf0a8a0916f2b6f8b08f99fd6507a9bd5d27",
      "new_mode": 33188,
      "new_path": "ssl/ssl_lib.cc"
    },
    {
      "type": "modify",
      "old_id": "1db97a9f165c39aafacbdc9d42b16d9ac5873d6b",
      "old_mode": 33188,
      "old_path": "ssl/ssl_test.cc",
      "new_id": "9f488d566ded1edda21ebb349b6865c04ea8cbcb",
      "new_mode": 33188,
      "new_path": "ssl/ssl_test.cc"
    }
  ]
}
