)]}'
{
  "commit": "51d856c2ff016758a31dcac3c96c986e6bdebdf9",
  "tree": "33b8ba6def4f5a20ba3758b8a310eb4a58516cd2",
  "parents": [
    "fa08d3ba31f6cbad9515f6417e8f90b5f36358af"
  ],
  "author": {
    "name": "Lei Zhang",
    "email": "thestig@chromium.org",
    "time": "Wed Jun 12 22:32:59 2024 +0000"
  },
  "committer": {
    "name": "Pdfium LUCI CQ",
    "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "time": "Wed Jun 12 22:32:59 2024 +0000"
  },
  "message": "Avoid another call to free resources during CPDF_Document destruction\n\nAdd a pixel test that would trigger this issue. Here, the circular\ncallstack is: ~CPDF_Document() -\u003e ~CPDF_DocPageData() -\u003e\nCPDF_Type3Font::WillBeDestroyed() -\u003e ~CPDF_Form() -\u003e ~CPDF_ImageObject()\n-\u003e CPDF_ImageObject::MaybePurgeCache() -\u003e\nCPDF_Document::MaybePurgeImage().\n\nBreak this cycle by adding CPDF_Image::WillBeDestroyed() and calling it\nfrom ~CPDF_DocPageData(), similar to CPDF_Font::WillBeDestroyed(). When\nCPDF_ImageObject::MaybePurgeCache() sees its CPDF_Image is going to be\ndestroyed, CPDF_ImageObject::MaybePurgeCache() avoids calling into\nCPDF_Document. Remove an unnecessary check in ~CPDF_DocPageData() along\nthe way.\n\nChange-Id: Ie6a414749f2980a626ec4da150b16105f631f79e\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/120390\nReviewed-by: Tom Sepez \u003ctsepez@chromium.org\u003e\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\nReviewed-by: Thomas Sepez \u003ctsepez@google.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "b1f9635e3ffc486ab8d84f51d616a655acc36993",
      "old_mode": 33188,
      "old_path": "core/fpdfapi/page/cpdf_docpagedata.cpp",
      "new_id": "2996701e855dafdf6b6a038a95071f43fb3a9720",
      "new_mode": 33188,
      "new_path": "core/fpdfapi/page/cpdf_docpagedata.cpp"
    },
    {
      "type": "modify",
      "old_id": "84954d9f79a4d9b6462b118e1ef0ec970b6445c6",
      "old_mode": 33188,
      "old_path": "core/fpdfapi/page/cpdf_image.cpp",
      "new_id": "7f5e61ac400adbe8bbaf59a286234a1ff30e902a",
      "new_mode": 33188,
      "new_path": "core/fpdfapi/page/cpdf_image.cpp"
    },
    {
      "type": "modify",
      "old_id": "dfd9791c74f639a48b73f26790bcc44385cb0ff2",
      "old_mode": 33188,
      "old_path": "core/fpdfapi/page/cpdf_image.h",
      "new_id": "87cc9962262a8df663370e92abd11fc5ed3ab270",
      "new_mode": 33188,
      "new_path": "core/fpdfapi/page/cpdf_image.h"
    },
    {
      "type": "modify",
      "old_id": "0511a028e31a5b78f5df1f8c7d5a911739e5e940",
      "old_mode": 33188,
      "old_path": "core/fpdfapi/page/cpdf_imageobject.cpp",
      "new_id": "8078bd90e7f52d18701658baa817d19c23fe2ee1",
      "new_mode": 33188,
      "new_path": "core/fpdfapi/page/cpdf_imageobject.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "fb1a82a06cad55d78b23100836893bf29608527b",
      "new_mode": 33188,
      "new_path": "testing/resources/pixel/type3_xobject.in"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "f97e340a54099a4feed1b6a410002dca64a14bc0",
      "new_mode": 33188,
      "new_path": "testing/resources/pixel/type3_xobject_expected.pdf.0.png"
    }
  ]
}
