)]}'
{
  "commit": "20830d3ba19f263e5fa772ed6cda56d278a0ee21",
  "tree": "ab02c21e919c024a39a511a40f0ec41be0cd3c12",
  "parents": [
    "ca62d3ceae773e6e317c3d717d9183a0cd19a29a"
  ],
  "author": {
    "name": "Lei Zhang",
    "email": "thestig@chromium.org",
    "time": "Thu Jul 11 20:57:09 2019 +0000"
  },
  "committer": {
    "name": "Chromium commit bot",
    "email": "commit-bot@chromium.org",
    "time": "Thu Jul 11 20:57:09 2019 +0000"
  },
  "message": "Add ASSERTs to prevent re-entrancy inside CPWL_EditImpl_Undo.\n\nIn CPWL_EditImpl_Undo, |m_bWorking| is suppose to protect Redo() and\nUndo() so nothing gets added in the middle of a redo/undo action. This\nonly works if Redo() and Undo() are not re-entrant. In the case of\nre-entrancy, what can happen is:\n\n1. First Undo() call starts, sets |m_bWorking| to true.\n2. Second Undo() call starts, sets |m_bWorking| to true again.\n3. Second Undo() call finishes, sets |m_bWorking| to false.\n4. First Undo() call finishes, sets |m_bWorking| to false again.\n\nBetween events 3 and 4, there is a gap where the first Undo() call has\nnot finished, and |m_bWorking| is suppose to be true, but has already\nbeen set to false.\n\nChange-Id: I402714f480cb061a5fef83b0c81d10e0a31df83f\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/57170\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\nReviewed-by: Tom Sepez \u003ctsepez@chromium.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "0988c1f1f744248100e6e28981a3f10448ad5be7",
      "old_mode": 33188,
      "old_path": "fpdfsdk/pwl/cpwl_edit_impl.cpp",
      "new_id": "494bc1be20c3de8fa0b82e9887fc75743a350cae",
      "new_mode": 33188,
      "new_path": "fpdfsdk/pwl/cpwl_edit_impl.cpp"
    }
  ]
}
