)]}'
{
  "commit": "9dde36ebf937da0ab92837932b253cc3d42c8dc2",
  "tree": "7448627b7aa6cc58ac48bac67819cf60a0713a60",
  "parents": [
    "d8a1051c091f74569d47506b5f25887bd11b50aa"
  ],
  "author": {
    "name": "Jan Grulich",
    "email": "grulja@gmail.com",
    "time": "Thu Apr 16 09:04:26 2026"
  },
  "committer": {
    "name": "webrtc-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "email": "webrtc-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "time": "Thu Apr 16 11:09:16 2026"
  },
  "message": "Fix use-after-free in ScreenCast and Camera portal D-Bus callbacks\n\nGDBus async callbacks fire on the GLib main thread with a raw pointer\nto the portal object. When the portal is destroyed on another thread,\nthe callback accesses freed memory.\n\nIntroduce PortalGuard, a ref-counted mutex-protected wrapper that\noutlives the portal. Callbacks lock the guard and check the portal\npointer before use. Stop() locks the same mutex to null the pointer,\nblocking until any in-flight callback finishes. Utility functions\nnow take scoped_refptr\u003cPortalGuard\u003e and manage refs internally.\n\nBug: chromium:491979284\nBug: chromium:499587071\nChange-Id: I80fe20c5c3b6509666554c7cc7454f09cab6c2e4\nReviewed-on: https://webrtc-review.googlesource.com/c/src/+/463800\nReviewed-by: Harald Alvestrand \u003chta@webrtc.org\u003e\nCommit-Queue: Jan Grulich \u003cgrulja@gmail.com\u003e\nReviewed-by: Ilya Nikolaevskiy \u003cilnik@webrtc.org\u003e\nReviewed-by: Andreas Pehrson \u003capehrson@mozilla.com\u003e\nCr-Commit-Position: refs/heads/main@{#47444}\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "6cb394f9430f88c5036d19587e4655b8d0760c76",
      "old_mode": 33188,
      "old_path": "modules/desktop_capture/linux/wayland/base_capturer_pipewire.cc",
      "new_id": "45537dce07d8ca8548795210b7d513d25ff23e4e",
      "new_mode": 33188,
      "new_path": "modules/desktop_capture/linux/wayland/base_capturer_pipewire.cc"
    },
    {
      "type": "modify",
      "old_id": "3ea47e4d3f3feb7f9cce6d2b57b9a1d3019b68df",
      "old_mode": 33188,
      "old_path": "modules/desktop_capture/linux/wayland/screen_capture_portal_interface.cc",
      "new_id": "3a712181641f0f07a1b9dc5e382ff76c74d8e76c",
      "new_mode": 33188,
      "new_path": "modules/desktop_capture/linux/wayland/screen_capture_portal_interface.cc"
    },
    {
      "type": "modify",
      "old_id": "06401f0de23dc8f83160256dcf875e4975e910a9",
      "old_mode": 33188,
      "old_path": "modules/desktop_capture/linux/wayland/screen_capture_portal_interface.h",
      "new_id": "487a1e63e95068fdbb7d0acdb0825903a712f8b9",
      "new_mode": 33188,
      "new_path": "modules/desktop_capture/linux/wayland/screen_capture_portal_interface.h"
    },
    {
      "type": "modify",
      "old_id": "affab4dc1fc794c440e0bb603747e60619a5ca91",
      "old_mode": 33188,
      "old_path": "modules/desktop_capture/linux/wayland/screencast_portal.cc",
      "new_id": "e399d38b83a0f041b07e53fae7cd3db2c38e9483",
      "new_mode": 33188,
      "new_path": "modules/desktop_capture/linux/wayland/screencast_portal.cc"
    },
    {
      "type": "modify",
      "old_id": "d0777567e0d7433228390d37ac93b2fc37e925ed",
      "old_mode": 33188,
      "old_path": "modules/desktop_capture/linux/wayland/screencast_portal.h",
      "new_id": "27b01a42f648b9622fa742f53ebf26a66718b27b",
      "new_mode": 33188,
      "new_path": "modules/desktop_capture/linux/wayland/screencast_portal.h"
    },
    {
      "type": "modify",
      "old_id": "de8a81be5554abd0a0bd1c1460372487b056c977",
      "old_mode": 33188,
      "old_path": "modules/portal/BUILD.gn",
      "new_id": "52e515c1fc6ebacf3b4077b9c84096ffceebc7c8",
      "new_mode": 33188,
      "new_path": "modules/portal/BUILD.gn"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "6c4d2b7630c0accbfbf586ceba257944311af655",
      "new_mode": 33188,
      "new_path": "modules/portal/portal_guard.h"
    },
    {
      "type": "modify",
      "old_id": "ad4c6614d620ecb55eb477e7cc24ac32003009e4",
      "old_mode": 33188,
      "old_path": "modules/portal/xdg_desktop_portal_utils.cc",
      "new_id": "723978cfa69fb57ed7ec5714a1422f2f09dc26eb",
      "new_mode": 33188,
      "new_path": "modules/portal/xdg_desktop_portal_utils.cc"
    },
    {
      "type": "modify",
      "old_id": "feb7da3da468e5d4ac8fad51a349ad85eefcceb5",
      "old_mode": 33188,
      "old_path": "modules/portal/xdg_desktop_portal_utils.h",
      "new_id": "ab9ddb3ca1054381337ffb7d7d831c48128759ce",
      "new_mode": 33188,
      "new_path": "modules/portal/xdg_desktop_portal_utils.h"
    },
    {
      "type": "modify",
      "old_id": "b6c703f38cff856c70ef1ef18b1e28562f05903a",
      "old_mode": 33188,
      "old_path": "modules/video_capture/linux/camera_portal.cc",
      "new_id": "5a9c88b6a9e3e33f42e96e1cfc56e94fb1a22f56",
      "new_mode": 33188,
      "new_path": "modules/video_capture/linux/camera_portal.cc"
    }
  ]
}
