)]}'
{
  "commit": "01b85b79a2bba7e895a18a32dbee840eae81eb31",
  "tree": "da12a78afa323dae7f15fd8f0890859f377cac5d",
  "parents": [
    "1e5dee361ee112e2b152ae7890a0fef567ccc4e9"
  ],
  "author": {
    "name": "Lei Zhang",
    "email": "thestig@chromium.org",
    "time": "Thu Mar 30 19:17:50 2023 +0000"
  },
  "committer": {
    "name": "Pdfium LUCI CQ",
    "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "time": "Thu Mar 30 19:17:50 2023 +0000"
  },
  "message": "Add object tree traversal utility functions\n\nAdd GetObjectsWithMultipleReferences() to figure out which objects have\nmultiple references. Then code that manipulates PDFs can use this\nfunction to determine if it is safe to edit an existing object. If it is\nunsafe, the code can clone before editing instead.\n\nAlso add GetObjectsWithReference() to figure out which objects are\nreferenced. This can be used to determine which objects have no\nreferences and can therefore be deleted.\n\nBug: chromium:1428724,pdfium:1409,pdfium:2012\nChange-Id: I28817068d50c79f36d12bd50c1910937241194a5\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/105611\nReviewed-by: Tom Sepez \u003ctsepez@chromium.org\u003e\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "bdc2e862eb8be35e566dbc781176877de56a825f",
      "old_mode": 33188,
      "old_path": "core/fpdfapi/parser/BUILD.gn",
      "new_id": "e3152d86a0366bd5366aa44f40fc9d4b42927a52",
      "new_mode": 33188,
      "new_path": "core/fpdfapi/parser/BUILD.gn"
    },
    {
      "type": "modify",
      "old_id": "df244588bcca8b6f60a5bce371bba7aa8f98aca9",
      "old_mode": 33188,
      "old_path": "core/fpdfapi/parser/cpdf_reference.h",
      "new_id": "241b398df4cfeaed6204062777bcb610e2a67993",
      "new_mode": 33188,
      "new_path": "core/fpdfapi/parser/cpdf_reference.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e1a0d52d0f5246e7778fed056e1aef3e49e9b917",
      "new_mode": 33188,
      "new_path": "core/fpdfapi/parser/object_tree_traversal_util.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e9db96dce94d32498af6451948c6f94cdc97e853",
      "new_mode": 33188,
      "new_path": "core/fpdfapi/parser/object_tree_traversal_util.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "c90c77e41b722abce3414f79dc791852fe8cb18e",
      "new_mode": 33188,
      "new_path": "core/fpdfapi/parser/object_tree_traversal_util_embeddertest.cpp"
    }
  ]
}
