)]}'
{
  "commit": "ad0e47cfe356cf5f60e57dd0cffa223bb951cb4c",
  "tree": "41e6ff67a11b89c6196545799a5e37ee866a4e77",
  "parents": [
    "3acf17e6ed3de808ec580c814815bcf962b292c7"
  ],
  "author": {
    "name": "Tom Sepez",
    "email": "tsepez@google.com",
    "time": "Fri Jun 05 17:00:09 2026 -0700"
  },
  "committer": {
    "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "time": "Fri Jun 05 17:00:09 2026 -0700"
  },
  "message": "Add span-based I/O wrappers as core/fxcrt/span_io.h\n\nIntroduce safe, container-templated span-based I/O wrappers. Helps\ncentralize some UNSAFE_BUFFERS() usage.\n\n-- Add spanread/spanwrite overloads for FILE*.\n-- Add spanread/spanwrite overloads for POSIX file descriptors.\n-- Add spanread/spanwrite overloads for Windows HANDLE.\n-- Change FileAccessIface::Write() signature to return bool.\n-- Update image_diff, write.cc, file_util, and cfx_folderfontinfo.\n-- Update CFX_FileAccess_Posix to use FD wrappers.\n-- Update CFX_FileAccess_Windows to use HANDLE wrappers.\n-- Update TemporaryFileTest to use safe spanwrite wrapper.\n-- Add unit tests for all overloads in span_util_unittest.cpp.\n\nNote that CFX_FileAccess_Posix changes may have fixed a latent error\nunderflow bug in the process.\n\nChange-Id: Ic2c4088d364be0a2f38c5d30854a61fdacc6c69d\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/149030\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "9fcac56c05a20e36e7ff5c4a619d1e89a57d8572",
      "old_mode": 33188,
      "old_path": "core/fxcrt/BUILD.gn",
      "new_id": "c93c8fa5a1002f9457950c0d19158bf1c3670b55",
      "new_mode": 33188,
      "new_path": "core/fxcrt/BUILD.gn"
    },
    {
      "type": "modify",
      "old_id": "ac074a0dd056e98943b90f9da9843a5dce18c2ec",
      "old_mode": 33188,
      "old_path": "core/fxcrt/cfx_fileaccess_posix.cpp",
      "new_id": "f9e230d2aaf3d32e53c3f51f178e615e65ca4429",
      "new_mode": 33188,
      "new_path": "core/fxcrt/cfx_fileaccess_posix.cpp"
    },
    {
      "type": "modify",
      "old_id": "24652a6c6bbbf4a6e13dca990a5fbf91161e9295",
      "old_mode": 33188,
      "old_path": "core/fxcrt/cfx_fileaccess_posix.h",
      "new_id": "fd06cf28c590364b7d4986cc4b566bb4a4b02f4c",
      "new_mode": 33188,
      "new_path": "core/fxcrt/cfx_fileaccess_posix.h"
    },
    {
      "type": "modify",
      "old_id": "b855c81cb1d41a6bf33e1a8060b0ab82f868d81b",
      "old_mode": 33188,
      "old_path": "core/fxcrt/cfx_fileaccess_stream.cpp",
      "new_id": "8d97c40265d05def2af7671d10177505dc479b2b",
      "new_mode": 33188,
      "new_path": "core/fxcrt/cfx_fileaccess_stream.cpp"
    },
    {
      "type": "modify",
      "old_id": "7adc1b58ac639a651aa1ab2d330331164bcd0485",
      "old_mode": 33188,
      "old_path": "core/fxcrt/cfx_fileaccess_windows.cpp",
      "new_id": "74b19379faaf80902dbd47cbf0ed513cd3c1ca3e",
      "new_mode": 33188,
      "new_path": "core/fxcrt/cfx_fileaccess_windows.cpp"
    },
    {
      "type": "modify",
      "old_id": "1e9b9835f2283a346927ed65a11334c01ce4a70b",
      "old_mode": 33188,
      "old_path": "core/fxcrt/cfx_fileaccess_windows.h",
      "new_id": "7efdbd040af65d4d0a81aebbc6a03c46bafc345a",
      "new_mode": 33188,
      "new_path": "core/fxcrt/cfx_fileaccess_windows.h"
    },
    {
      "type": "modify",
      "old_id": "59113d10c75b2305953fec01c033a3f5a550e513",
      "old_mode": 33188,
      "old_path": "core/fxcrt/fileaccess_iface.h",
      "new_id": "ca9d756ae43efa9b636c92de88f67bc0e2b17c4d",
      "new_mode": 33188,
      "new_path": "core/fxcrt/fileaccess_iface.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "c58b093f4c5acc73d8af713666a5e835f0ce62f2",
      "new_mode": 33188,
      "new_path": "core/fxcrt/span_io.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "a50936916893416ee49dc76cf7a03eff45a96df0",
      "new_mode": 33188,
      "new_path": "core/fxcrt/span_io_unittest.cpp"
    },
    {
      "type": "modify",
      "old_id": "d350d8d6287ac35a687eeb9801815009d5bdd20c",
      "old_mode": 33188,
      "old_path": "core/fxge/cfx_folderfontinfo.cpp",
      "new_id": "2a554e46752f693593af8541a90471ecb8fa7e3a",
      "new_mode": 33188,
      "new_path": "core/fxge/cfx_folderfontinfo.cpp"
    },
    {
      "type": "modify",
      "old_id": "3fc504dec02688542c71aecf524007c08d1c7029",
      "old_mode": 33188,
      "old_path": "testing/helpers/write.cc",
      "new_id": "04bc0717b34142dd9a0196c155e52b254ba97e30",
      "new_mode": 33188,
      "new_path": "testing/helpers/write.cc"
    },
    {
      "type": "modify",
      "old_id": "994d6de2a972048f26eb4d1e42f9ba3a70541a61",
      "old_mode": 33188,
      "old_path": "testing/image_diff/image_diff.cpp",
      "new_id": "a2f3a834b1ac9fa65a2d63b997b8ef378660dc48",
      "new_mode": 33188,
      "new_path": "testing/image_diff/image_diff.cpp"
    },
    {
      "type": "modify",
      "old_id": "decfff2aaa49b84d4d0d50020f2e8e89beab6460",
      "old_mode": 33188,
      "old_path": "testing/temporary_file_test.cpp",
      "new_id": "1f6f6e01f4c841853e5e1cb91cb8902ad924c694",
      "new_mode": 33188,
      "new_path": "testing/temporary_file_test.cpp"
    },
    {
      "type": "modify",
      "old_id": "017ae211a27994a7bfc609a7f66091fa26a3d552",
      "old_mode": 33188,
      "old_path": "testing/utils/file_util.cpp",
      "new_id": "21b01417d3da385dae40e0e6b0f74b49eaf1667e",
      "new_mode": 33188,
      "new_path": "testing/utils/file_util.cpp"
    },
    {
      "type": "modify",
      "old_id": "4fc1f5af3175ab84227f5e7cb214da167a60ad1b",
      "old_mode": 33188,
      "old_path": "testing/utils/file_util.h",
      "new_id": "f27c14b7c6e75ef1d2415b2424769a71900281ff",
      "new_mode": 33188,
      "new_path": "testing/utils/file_util.h"
    }
  ]
}
