)]}'
{
  "log": [
    {
      "commit": "7b3f6f93625e6df97a7d9e677137a558df8648c4",
      "tree": "b4026fdde2ec2b18de5efb188330f9fe120777be",
      "parents": [
        "43d55e429cf72c21e9a1e60475b50feefa16fda9"
      ],
      "author": {
        "name": "Lei Zhang",
        "email": "thestig@chromium.org",
        "time": "Fri Oct 23 10:54:31 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Oct 23 10:54:31 2026 -0700"
      },
      "message": "Add another pixel test for /DeviceCMYK colorspace\n\nAdd a test case that can trigger the branch in CPDF_DeviceCS::GetRGB()\nwhere IsStdConversionEnabled() returns true. This branch has no existing\ntest coverage.\n\nNote that the rendering does not match other common PDF renderers.\n\nThe test input is AI generated.\n\nBug: 557320961\nChange-Id: Ia7587f5347ba898cb0aa648a4d889c3b802054de\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/161691\nReviewed-by: Andy Phan \u003candyphan@chromium.org\u003e\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "43d55e429cf72c21e9a1e60475b50feefa16fda9",
      "tree": "4bf8dac862fbededb932008e13728ba1e7fe382b",
      "parents": [
        "6693194086d657509d7bd8a29fcf15cbc8f74d7b"
      ],
      "author": {
        "name": "Lei Zhang",
        "email": "thestig@chromium.org",
        "time": "Thu Oct 22 16:08:11 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Oct 22 16:08:11 2026 -0700"
      },
      "message": "Collapse spaces in O(n) time in CPDF_TextPage::CloseTempLine()\n\nBefore commit [1], CPDF_TextPage::CloseTempLine() collapsed consecutive\nspaces by calling WideTextBuffer::Delete(), std::deque::erase(), and\nWideString::Delete() for each duplicate space. After commit [1] switched\n`temp_char_list_` from std::deque to std::vector, erasing near the front\nof `temp_char_list_` with std::vector::erase() shifted all remaining\nelements on each duplicate space, causing O(n^2) behavior on lines with\nmany spaces.\n\nCollapse consecutive spaces in a single O(n) in-place pass over\n`temp_text_buf_` and `temp_char_list_`, truncate the unused tails of\nboth containers once, and construct `str` from the compacted\n`temp_text_buf_`. Keep the std::vector, since CLs that landed after [1]\ntook advantage of the contiguous memory allocation to switch\nCPDF_TextPage code to use spans.\n\nAlso use Clear() instead of Delete() at the end of CloseTempLine() when\nresetting `temp_text_buf_`, since deleting everything is effectively the\nsame as Clear().\n\nThis CL is AI assisted.\n\n[1] https://pdfium-review.googlesource.com/c/151031\n\nBug: 573517426\nChange-Id: I29f29779f1962699709ceb3b4ca6fd58054e5e9b\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/161590\nReviewed-by: Andy Phan \u003candyphan@chromium.org\u003e\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "6693194086d657509d7bd8a29fcf15cbc8f74d7b",
      "tree": "280b8247ecb5b35ca5af0b534fccbfebe7f7ca04",
      "parents": [
        "74429f3edd977642cc21bd7db1a541f8a6d2199c"
      ],
      "author": {
        "name": "Lei Zhang",
        "email": "thestig@chromium.org",
        "time": "Thu Oct 22 15:02:40 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Oct 22 15:02:40 2026 -0700"
      },
      "message": "Stop importing third_party/libopenjpeg/opj_clock.*\n\nUpdate third_party/libopenjpeg/copy.bara.sky to remove these unused\nsource files, and rerun the crowbar tool to auto-delete them. Then\nremove the corresponding comment about these files being unused from the\nfx_libopenjpeg GN source set.\n\nChange-Id: I3dd138b9d2af7f6cf047e4afdaaaefc4534af472\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/161690\nReviewed-by: Andy Phan \u003candyphan@chromium.org\u003e\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "74429f3edd977642cc21bd7db1a541f8a6d2199c",
      "tree": "e811d69a50c76f07d6922106492034c19f4faedb",
      "parents": [
        "7016ba5b105581b3f8a10df2d6f8d977b22092b7"
      ],
      "author": {
        "name": "Lei Zhang",
        "email": "thestig@chromium.org",
        "time": "Thu Oct 22 13:11:42 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Oct 22 13:11:42 2026 -0700"
      },
      "message": "Set LZW_READ_ONLY in tiffconf.h\n\nIn libtiff, there exists the ability to do LZW encoding. Since this is\nnot used, define LZW_READ_ONLY to exclude it.\n\nChange-Id: Iac4d762128ae448423b451594d9d2bd43619be08\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/161650\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\nReviewed-by: Andy Phan \u003candyphan@chromium.org\u003e\n"
    },
    {
      "commit": "7016ba5b105581b3f8a10df2d6f8d977b22092b7",
      "tree": "df5e81208bcc7e7da0fdb01d4c19c3b3f91f9ef6",
      "parents": [
        "4083b1126da38fc6de99960538d2df2068a02cbf"
      ],
      "author": {
        "name": "Lei Zhang",
        "email": "thestig@chromium.org",
        "time": "Thu Oct 22 12:56:22 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Oct 22 12:56:22 2026 -0700"
      },
      "message": "Add missing sources and runtime font data to BUILD.gn files\n\nImprove dependency tracking for `gn analyze` by listing missing files in\nGN targets:\n\n- Add .inc and .h files to GN `sources` in their corresponding\n  `source_set` targets across the repository.\n- Forward `data` in `pdfium_unittest_source_set` and\n  `pdfium_embeddertest_source_set` in testing/test.gni.\n- Add third-party test font files to `data` in core/fxge:unittests and\n  fpdfsdk:embeddertests.\n- Add new `deps` entries or add `gnnocheck` comments, now that GN is\n  checking more sources.\n\nThis CL is AI generated.\n\nBug: 42271923\nChange-Id: Id90f293b5d8db1dcb6eceb52bf60377285977a98\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/161630\nReviewed-by: Andy Phan \u003candyphan@chromium.org\u003e\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "4083b1126da38fc6de99960538d2df2068a02cbf",
      "tree": "c952636f7496a421f0b16ca7a78c46e7d520bdbd",
      "parents": [
        "54861066c5dfcfa83a02c13b5c0aae6612e61fa0"
      ],
      "author": {
        "name": "Maksim Sisov",
        "email": "msisov@igalia.com",
        "time": "Thu Oct 22 12:26:33 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Oct 22 12:26:33 2026 -0700"
      },
      "message": "[3p freshness] openjpeg: Enable auto-update\n\n- crowbar.txtpb: add latest {} on the upstream semver tags (v2.5.4,\n  v2.5.3, ...). semver {} ignores the old non-semver tags\n  (\"version.2.1\", \"opj0-97\", ...).\n- crowbar.txtpb: the upstream identifier is now version: \"v2.5.4\", the\n  tag of the pinned commit 6c4a29b00211. With commit: as identifier,\n  resolve reports v2.5.4 as a new upstream.\n- OpenJPEG is already at the newest release, so there is no roll:\n\n    $ crowbar resolve ./third_party/libopenjpeg\n    ... already using the latest upstream: v2.5.4\n    $ crowbar build ./third_party/libopenjpeg\n    ... Package third_party/libopenjpeg is already up-to-date.\n\n- CPEPrefix stays cpe:/a:uclouvain:openjpeg:2.5.4, and opj_config*.h\n  keep 2.5.4: crowbar promote updates neither, so the first automatic\n  roll needs them updated by hand (see the README note).\n\nFixed: 538009067\nChange-Id: I11a0e5dcd6fef1bf87744a1964bb5d0174a27818\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/161452\nReviewed-by: Andy Phan \u003candyphan@chromium.org\u003e\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Andy Phan \u003candyphan@chromium.org\u003e\n"
    },
    {
      "commit": "54861066c5dfcfa83a02c13b5c0aae6612e61fa0",
      "tree": "7641020bc83b2c28e8d42685e8f6286688451df0",
      "parents": [
        "07e277af45610ac5c97b7b5b19d3dfe5ed2d0f86"
      ],
      "author": {
        "name": "Maksim Sisov",
        "email": "msisov@igalia.com",
        "time": "Thu Oct 22 11:43:30 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Oct 22 11:43:30 2026 -0700"
      },
      "message": "[3p freshness] openjpeg: Add Crowbar workflow\n\n- Add crowbar.txtpb: upstream https://github.com/uclouvain/openjpeg at\n  6c4a29b00211 (tag v2.5.4), the README revision.\n- Add copy.bara.sky: import LICENSE and the src/lib/openjp2 sources\n  and headers PDFium has, listed file by file so the list can be\n  checked against BUILD.gn and a new upstream file is not imported\n  until it is added here. opj_malloc.c is not listed: PDFium\u0027s\n  opj_malloc.cc replaces it. Move src/lib/openjp2/ to the root of src/,\n  then apply the patches in their numeric order. Without any one listed\n  file crowbar deletes it from src/ or fails to apply a patch.\n- Move the patches into patches/ with a/src/... paths, the form\n  patch.apply expects; 0050 had upstream paths (a/src/lib/openjp2/).\n  0034 loses its opj_malloc.cc part: that file is PDFium\u0027s, outside\n  src/. The +/- lines of all other parts are unchanged.\n- README.pdfium: say where the PDFium files and the patches are; add the\n  Crowbar update instructions.\n- No src/ change:\n\n    $ crowbar build ./third_party/libopenjpeg\n    ... Package third_party/libopenjpeg is already up-to-date.\n\nBug: 538009067\nChange-Id: I5875935462360a2cb5ea7cc79064e1d68adf8688\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/161451\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nReviewed-by: Andy Phan \u003candyphan@chromium.org\u003e\nCommit-Queue: Andy Phan \u003candyphan@chromium.org\u003e\n"
    },
    {
      "commit": "07e277af45610ac5c97b7b5b19d3dfe5ed2d0f86",
      "tree": "278da14fcf8f837c49cfd77a47f7a94c6dd764d2",
      "parents": [
        "a211dede0d0a3abb696df714a25eee7be153123e"
      ],
      "author": {
        "name": "Maksim Sisov",
        "email": "msisov@igalia.com",
        "time": "Thu Oct 22 10:45:57 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Oct 22 10:45:57 2026 -0700"
      },
      "message": "[3p freshness] libtiff: Enable auto-update\n\n- crowbar.txtpb: add latest {} on the upstream semver tags. libtiff tags\n  its releases (v4.7.2, v4.7.1, ...); the rc tags (v4.7.2rc2) have no\n  \"-\" before the pre-release part, so semver {} skips them.\n- crowbar.txtpb: the upstream identifier is now version: \"v4.7.2\", the\n  tag of the pinned commit d01a94be176f. With commit: as identifier,\n  resolve reports v4.7.2 as a new upstream.\n- libtiff is already at the newest release, so there is no roll:\n\n    $ crowbar resolve ./third_party/libtiff\n    ... already using the latest upstream: v4.7.2\n    $ crowbar build ./third_party/libtiff\n    ... Package third_party/libtiff is already up-to-date.\n\n- CPEPrefix stays cpe:/a:libtiff:libtiff:4.7.2 and tiffvers.h stays\n  4.7.2: crowbar promote updates neither, so the first automatic roll\n  needs them updated by hand.\n\nFixed: 538009059\nChange-Id: I6ba4169b92e890af4b3c8c7f8421818c2f97a255\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/161433\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nReviewed-by: Andy Phan \u003candyphan@chromium.org\u003e\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "a211dede0d0a3abb696df714a25eee7be153123e",
      "tree": "5f97c7b42230bc909cdf652332080114f714c989",
      "parents": [
        "761a3e7c4f587bf32f62af010b9387eb899ffb6b"
      ],
      "author": {
        "name": "Maksim Sisov",
        "email": "msisov@igalia.com",
        "time": "Thu Oct 22 09:59:52 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Oct 22 09:59:52 2026 -0700"
      },
      "message": "[3p freshness] libtiff: Add Crowbar workflow\n\n- Add crowbar.txtpb: upstream https://gitlab.com/libtiff/libtiff at\n  d01a94be176f (tag v4.7.2), the README revision.\n- Add copy.bara.sky: import LICENSE.md and the libtiff/ sources and\n  headers PDFium has, listed file by file so the list can be checked\n  against BUILD.gn and a new upstream file is not imported until it is\n  added here. Move libtiff/ to the root of src/, then apply the patches\n  in their numeric order. Without any one listed file crowbar deletes\n  it from src/ or fails to apply a patch.\n- Move the patches into patches/ with a/src/... paths, the form\n  patch.apply expects. 0000 and 0031 lose their tiffconf.h parts:\n  tiffconf.h is PDFium\u0027s file outside src/ and already has them. The +/-\n  lines of all other parts are unchanged; 0000, 0031 and 0033 get new\n  line offsets and context for 4.7.2.\n- README.pdfium: say where tiffconf.h, tiffvers.h and the patches are;\n  add the Crowbar update instructions.\n- No src/ change:\n\n    $ crowbar build ./third_party/libtiff\n    ... Package third_party/libtiff is already up-to-date.\n\nBug: 538009059\nChange-Id: I16c78af3480e85ec7e98c7f0c3c66d17bef4ccd9\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/161432\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nReviewed-by: Andy Phan \u003candyphan@chromium.org\u003e\nCommit-Queue: Andy Phan \u003candyphan@chromium.org\u003e\n"
    },
    {
      "commit": "761a3e7c4f587bf32f62af010b9387eb899ffb6b",
      "tree": "b2659e7a5517564cd16f32490e4849bc5aae8d11",
      "parents": [
        "07611a242a121d2f6b6ad26772cdd132f157f9a6"
      ],
      "author": {
        "name": "Lei Zhang",
        "email": "thestig@chromium.org",
        "time": "Wed Oct 21 14:32:01 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Oct 21 14:32:01 2026 -0700"
      },
      "message": "Make coverage_report.py take the renderer into consideration\n\n- Add a new boolean field to `COVERAGE_TESTS` to indicate whether it\n  supports `--use-renderer`.\n- Run `pdfium_test --show-config` to see what renderers it supports.\n  Note that pdfium_test assumes AGG is always available. Match that\n  behavior but leave a TODO to improve it.\n- Expand the list of tests to run if a test supports `--use-renderer`\n  and pdfium_test supports multiple renderers.\n\nTAG\u003dagy\n\nBug: 576312222\nChange-Id: I07e415749b301a3306e420d21f30f71db7251e5b\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/161470\nReviewed-by: Andy Phan \u003candyphan@chromium.org\u003e\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "07611a242a121d2f6b6ad26772cdd132f157f9a6",
      "tree": "c29827ccc12fcecb49d814b6bdb9ce34a6488d45",
      "parents": [
        "4bd20bd51662ef0ffca72ccd6d1ac41999f2d009"
      ],
      "author": {
        "name": "Jeffrey Yu",
        "email": "yuje@google.com",
        "time": "Wed Oct 21 14:26:47 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Oct 21 14:26:47 2026 -0700"
      },
      "message": "Optimize string construction in pdf_xfa_raw_fuzzer\n\nAvoid unnecessary allocations when creating xfa_string by using\nstd::string_view for the prefix, suffix, and input data, and reserving\nthe total required capacity before appending.\n\nAvoids unnecessary string copies during repeated fuzz testing.\n`base::StrCat` is avoided here to not add additional dependencies to a\nthird_party standalone library.\n\nChange-Id: I6a777e4d8f29c927eaf91b990c195a965036400c\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/161550\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "4bd20bd51662ef0ffca72ccd6d1ac41999f2d009",
      "tree": "f415786c5ed9cc55fec20188f14a077de59ad3e5",
      "parents": [
        "473670bfefe582af62ed82767ec07562b60270f4"
      ],
      "author": {
        "name": "Lei Zhang",
        "email": "thestig@chromium.org",
        "time": "Wed Oct 21 11:19:44 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Oct 21 11:19:44 2026 -0700"
      },
      "message": "Properly handle read failure in CPDF_SyntaxParser::ReadStream()\n\nTurn an existing CHECK() that fails into a regular conditional with\nproper error handling. Enable SyntaxParserTest.ReadStreamError now that\nit no longer crashes.\n\nThis CL is AI generated.\n\nBug: 572302944\nChange-Id: I80ff0221a5734b1cb4605285b1359a7802f9a2a9\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/161491\nReviewed-by: Andy Phan \u003candyphan@chromium.org\u003e\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "473670bfefe582af62ed82767ec07562b60270f4",
      "tree": "49382dce07749c030571af8b407fcec652c95d4a",
      "parents": [
        "70355bc434669b7c4b53bd49c1801f082fddc3de"
      ],
      "author": {
        "name": "Lei Zhang",
        "email": "thestig@chromium.org",
        "time": "Wed Oct 21 11:19:35 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Oct 21 11:19:35 2026 -0700"
      },
      "message": "Add unit test for CHECK() failure in CPDF_SyntaxParser::ReadStream()\n\nAdd SyntaxParserTest.ReadStreamError to demonstrate an existing CHECK()\ncan fail if the read fails. The test is disabled for now since it\ncrashes.\n\nThis CL is mostly AI generated.\n\nBug: 572302944\nChange-Id: I26807c27ae09705b522ede2bfe6d6a2c59b21270\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/161490\nReviewed-by: Andy Phan \u003candyphan@chromium.org\u003e\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "70355bc434669b7c4b53bd49c1801f082fddc3de",
      "tree": "3db06dbea529148219a1294eec18042a15a6fc8c",
      "parents": [
        "8fdce8e1b14def5d34f217c5099936ddcebe8b81"
      ],
      "author": {
        "name": "Lei Zhang",
        "email": "thestig@chromium.org",
        "time": "Wed Oct 21 11:13:37 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Oct 21 11:13:37 2026 -0700"
      },
      "message": "[3p freshness] lcms: Remove glob usage in copy.bara.sky\n\nConsistently list origin_files so there are no surprises, at the cost of\nneeding to maintain this list.\n\nBug: 538008161\nChange-Id: I73bbfc2d0fa24e7e41adc8da979fe31288f85c5b\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/161510\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\nReviewed-by: Andy Phan \u003candyphan@chromium.org\u003e\n"
    },
    {
      "commit": "8fdce8e1b14def5d34f217c5099936ddcebe8b81",
      "tree": "6e9380a14c40d166fbb29910a590733dc293f69d",
      "parents": [
        "f023a9432c0c6d7fd5ac96286badae8bf884e6f7"
      ],
      "author": {
        "name": "Copybara",
        "email": "no-reply@google.com",
        "time": "Tue Oct 20 17:16:19 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Oct 20 17:16:19 2026 -0700"
      },
      "message": "Fix float-cast-overflow in CFX_RenderDevice::DrawPath()\n\nIn CFX_RenderDevice::DrawPath(), calculating width and height from\ndevice-space glyph path bounds via unchecked static_cast\u003cint\u003e(ceil(...))\ncan trigger float-cast-overflow when extreme text transformation\nmatrices produce dimensions exceeding INT_MAX.\n\nUse pdfium::ClampCeil\u003cint\u003e to safely saturate width and height\ncalculations and prevent potential signed-integer-overflow in rect_i\ndimension checks.\n\nFixed: 571305639,571926098\nGWSQ_IGNORES: no-reply@google.com\nPiperOrigin-RevId: 995894883\nChange-Id: I8247607cffae1a03e9b4ecec952094fddbac9c31\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/161110\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "f023a9432c0c6d7fd5ac96286badae8bf884e6f7",
      "tree": "efb5cd6fef7375147902a938f872f51cc96fa575",
      "parents": [
        "51665166104c07e0a2656fd25a54a26535668880"
      ],
      "author": {
        "name": "Maksim Sisov",
        "email": "msisov@igalia.com",
        "time": "Tue Oct 20 16:48:38 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Oct 20 16:48:38 2026 -0700"
      },
      "message": "[3p freshness] openjpeg: Move upstream files into src/\n\nCrowbar requires the upstream code of a dependency under src/, with\nPDFium glue outside it.\n\n- Move the upstream files (the src/lib/openjp2 sources and headers and\n  LICENSE) into src/ (100% renames). The Crowbar workflow will move\n  upstream src/lib/openjp2/ to src/.\n- Keep opj_config.h, opj_config_private.h and opj_malloc.cc outside\n  src/: upstream has only templates of the two headers\n  (opj_config*.h.cmake.in), and opj_malloc.cc is PDFium\u0027s allocator in\n  place of upstream opj_malloc.c.\n- third_party/BUILD.gn: add fx_libopenjpeg_config with the libopenjpeg/\n  include dir, so the sources and their users find the two config\n  headers. Without it the build fails: \"\u0027opj_config_private.h\u0027 file not\n  found\". Same approach as the freetype/include config there.\n- core/fxcodec/BUILD.gn: make libopenjpeg2 a public dep, like fx_lcms2:\n  cjpx_decoder.h includes openjpeg.h, and core/fpdfapi/page then needs\n  the config (\"\u0027opj_config.h\u0027 file not found\" otherwise).\n- Add DEPS with skip_child_includes for src/, like third_party/brotli:\n  upstream opj_includes.h includes openjpwl/jpwl.h (only with USE_JPWL),\n  which checkdeps rejects (\"Illegal include\").\n- core/fxcodec/jpx and README.pdfium: use the new paths.\n\nBug: 538009067\nChange-Id: Ie25d00532fbf4be33a491b32a5ae8e80576909da\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/161450\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nReviewed-by: Andy Phan \u003candyphan@chromium.org\u003e\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "51665166104c07e0a2656fd25a54a26535668880",
      "tree": "fe4e63fa9e2e793bea46dc2a3f680f5bc262d18e",
      "parents": [
        "265e2599e2df5b8c6ef1bdcf754ab53a9d434eb4"
      ],
      "author": {
        "name": "Lei Zhang",
        "email": "thestig@chromium.org",
        "time": "Tue Oct 20 15:03:18 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Oct 20 15:03:18 2026 -0700"
      },
      "message": "Fix OOB in AlternateDateTimeSymbols()\n\nAvoid crashing if the provided symbols string is too short. Let the\ncaller know, so the caller can return early and pass along the failure.\n\nBug: 573056667\nChange-Id: I8949bd0742aca77f944903b3a844bd99d6d971f1\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/161231\nReviewed-by: Andy Phan \u003candyphan@chromium.org\u003e\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "265e2599e2df5b8c6ef1bdcf754ab53a9d434eb4",
      "tree": "a3ee090355d53029c44d76994ee19e2d4397879f",
      "parents": [
        "42b4824c8f515c9e64241601a6f3ab28b52e7c8a"
      ],
      "author": {
        "name": "Lei Zhang",
        "email": "thestig@chromium.org",
        "time": "Tue Oct 20 14:53:49 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Oct 20 14:53:49 2026 -0700"
      },
      "message": "Simplify lookup tables used by AlternateDateTimeSymbols()\n\nInside cfxjse_formcalc_context, AlternateDateTimeSymbols() has lookup\ntables for date (D, E, M, Y) and datetime (A, D, E, H, M, S, Y, Z).\nReduce size of tables to 26, since they only need to cover A-Z.\n\nAlso change the sentinel value from 255 to 0, since 0 is never used\notherwise.\n\nChange-Id: I211b0d4f5a44cb2acc6e14e688627079714826ff\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/161230\nReviewed-by: Andy Phan \u003candyphan@chromium.org\u003e\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "42b4824c8f515c9e64241601a6f3ab28b52e7c8a",
      "tree": "012ccb238029a9942791fd2a935cc0f614e7d1be",
      "parents": [
        "81e633c5a42c71a2ce3cef0fd18804076ddf7961"
      ],
      "author": {
        "name": "Lei Zhang",
        "email": "thestig@chromium.org",
        "time": "Tue Oct 20 14:25:48 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Oct 20 14:25:48 2026 -0700"
      },
      "message": "Rename some variables in cfxjse_formcalc_context.cpp\n\nDo some mass-renaming to follow Google C++ style.\n\nChange-Id: If7defea3f5ffa47a8c72e16bb2b5e8eba9d450f2\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/161210\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\nReviewed-by: Andy Phan \u003candyphan@chromium.org\u003e\n"
    },
    {
      "commit": "81e633c5a42c71a2ce3cef0fd18804076ddf7961",
      "tree": "a68129c115f35fc43be4bed28bfc9ecd9f08982b",
      "parents": [
        "01eee861c6485b30060140ed20b5a493e53fa00a"
      ],
      "author": {
        "name": "Maksim Sisov",
        "email": "msisov@igalia.com",
        "time": "Tue Oct 20 11:44:38 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Oct 20 11:44:38 2026 -0700"
      },
      "message": "[3p freshness] lcms: Add Crowbar workflow\n\n- Add crowbar.txtpb: upstream https://github.com/mm2/Little-CMS at\n  b76633e60c83 (tag lcms2.19), the README revision.\n- Add copy.bara.sky: import LICENSE, include/*.h, src/*.c and src/*.h\n  (not the build files next to them), then apply the patches in their\n  numeric order. Without any one of the four globs crowbar deletes\n  LICENSE or fails to apply a patch.\n- Move the patches into patches/ with a/src/... paths, the form\n  patch.apply expects.\n- Refresh five patches that no longer applied to lcms 2.19, neither\n  forward on the upstream files nor in reverse on the checked-in ones:\n  0006, 0027, 0028, 0029 and 0033. Their changes are already in src/;\n  only line offsets and context lines move. Applying the old patches in\n  order with \"patch --fuzz\u003d3\" on lcms 2.19 gives exactly the checked-in\n  files, and each refreshed patch is the diff of its own step.\n- README.pdfium: say where the patches are; add the Crowbar update\n  instructions.\n- No src/ change:\n\n    $ crowbar build ./third_party/lcms\n    ... Package third_party/lcms is already up-to-date.\n\nBug: 538008161\nChange-Id: Ic85aa27e5d4eec48676ccfe6db12ed4b0b20a808\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/161411\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\nReviewed-by: Andy Phan \u003candyphan@chromium.org\u003e\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "01eee861c6485b30060140ed20b5a493e53fa00a",
      "tree": "368b3be02883249ed0de848acae3fc8459545106",
      "parents": [
        "5688f906d86402e6bd5cabbd4b5e8aa5d5ce0961"
      ],
      "author": {
        "name": "Maksim Sisov",
        "email": "msisov@igalia.com",
        "time": "Tue Oct 20 11:07:53 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Oct 20 11:07:53 2026 -0700"
      },
      "message": "[3p freshness] lcms: Move upstream files into src/\n\nCrowbar requires the upstream code of a dependency under src/, with\nPDFium glue (README.pdfium, patches) outside it. Upstream Little CMS\nkeeps src/, include/ and LICENSE at its root, so they become src/src/,\nsrc/include/ and src/LICENSE.\n\n- Move src/, include/ and LICENSE (100% renames, except below).\n- lcms2_internal.h includes lcms2_plugin.h by its path from the PDFium\n  root (0001-fix-include.patch); update that path and the patch.\n- third_party/BUILD.gn, core/fxcodec/icc/icc_transform.h and\n  README.pdfium: use the new paths.\n\nBug: 538008161\nChange-Id: Idd48f04f05dc766b29617c35e9b93c79d95340ea\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/161410\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nReviewed-by: Andy Phan \u003candyphan@chromium.org\u003e\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "5688f906d86402e6bd5cabbd4b5e8aa5d5ce0961",
      "tree": "0f61627532475e0f59487f313a69841580c4ff5a",
      "parents": [
        "cd92f0efef622293bae83bc981b92374edd87f02"
      ],
      "author": {
        "name": "Maksim Sisov",
        "email": "msisov@igalia.com",
        "time": "Tue Oct 20 10:55:43 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Oct 20 10:55:43 2026 -0700"
      },
      "message": "[3p freshness] libtiff: Update LICENSE.md to 4.7.2\n\nThe checked-in LICENSE.md is the one from libtiff 4.7.0. libtiff 4.7.1\nadded the BSD license of tif_lzw.c (\"Lempel-Ziv \u0026 Welch Compression\"),\nupstream commit a0b623c7, and PDFium compiles tif_lzw.c. Take LICENSE.md\nfrom 4.7.2, the version in src/, which is also what the Crowbar workflow\nwill import:\n\n    $ git rev-parse v4.7.2:LICENSE.md\n    12d5ef231021c5da19f3b5af44192fb6f4184542\n    $ git hash-object src/LICENSE.md\n    12d5ef231021c5da19f3b5af44192fb6f4184542\n\nBug: 538009059\nChange-Id: Id22f3a99f68c04448380c40b9b0de0b3f0736223\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/161431\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nReviewed-by: Andy Phan \u003candyphan@chromium.org\u003e\n"
    },
    {
      "commit": "cd92f0efef622293bae83bc981b92374edd87f02",
      "tree": "42e77eed3ec2fcbc2540cb64d18d2803ba32a6f9",
      "parents": [
        "f3653cea53ab75edc76ab408547e6c4bc25eb9d0"
      ],
      "author": {
        "name": "Maksim Sisov",
        "email": "msisov@igalia.com",
        "time": "Tue Oct 20 10:13:34 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Oct 20 10:13:34 2026 -0700"
      },
      "message": "[3p freshness] libtiff: Move upstream files into src/\n\nCrowbar requires the upstream code of a dependency under src/, with\nPDFium glue outside it.\n\n- Move the upstream files (tif_*.c, the headers and LICENSE.md) into\n  src/ (100% renames). Upstream keeps them in libtiff/ and at its root;\n  the Crowbar workflow will move libtiff/ to src/.\n- Keep tiffconf.h and tiffvers.h outside src/: upstream has only their\n  templates (tiffconf.h.in, tiffvers.h.in), PDFium writes them.\n- third_party/BUILD.gn: add fx_tiff_config with the libtiff/ include\n  dir, so the libtiff sources and their users find those two headers.\n  Without it, the build picks up tiffconf.h from the sysroot and fails\n  (\"unknown type name \u0027int8_t\u0027\" in tiff.h). Same approach as the\n  freetype/include config in this file.\n- core/fxcodec/tiff and README.pdfium: use the new paths.\n\nBug: 538009059\nChange-Id: I7cc41dc7ae9eca75344e8293fbe26c30b49e2de0\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/161430\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nReviewed-by: Andy Phan \u003candyphan@chromium.org\u003e\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "f3653cea53ab75edc76ab408547e6c4bc25eb9d0",
      "tree": "3a073efd77f32bf41a51896e4f44c3683cb57ebe",
      "parents": [
        "f6621fff74ece778b491d5d695895100a1c40429"
      ],
      "author": {
        "name": "LN Liberda",
        "email": "lauren@selfisekai.rocks",
        "time": "Mon Oct 19 14:35:02 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Oct 19 14:35:02 2026 -0700"
      },
      "message": "Fix build with unbundled brotli\n\nDependency on brotli:headers is implied by dependency on :dec/:enc\n\nBug: none\nChange-Id: I61bac840651853eaccf789d27479dfff8bc350c4\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/161111\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Andy Phan \u003candyphan@chromium.org\u003e\nReviewed-by: Andy Phan \u003candyphan@chromium.org\u003e\n"
    },
    {
      "commit": "f6621fff74ece778b491d5d695895100a1c40429",
      "tree": "84c03a92233b484ef6ec91650b0f370c36edf6cd",
      "parents": [
        "84a249934825d13f06d0bb52af35b045f639d982"
      ],
      "author": {
        "name": "Lei Zhang",
        "email": "thestig@chromium.org",
        "time": "Mon Oct 19 12:52:23 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Oct 19 12:52:23 2026 -0700"
      },
      "message": "Enable BarcodeTest unit tests for Skia builds\n\nThe barcodes rendered in BarcodeTest are identical inside the barcode\nrectangle between AGG and Skia. The only pixel differences are along the\nouter right and bottom edges of the background rectangle due to stroke\nanti-aliasing differences in CBC_OneDimWriter::RenderDeviceResult() and\nCBC_TwoDimWriter::RenderDeviceResult(). The SaveBitmap() renderings\npassed a manual inspection and looks identical to the human eye.\n\nAdd Skia-specific expected bitmap checksums to cfx_barcode_unittest.cpp\nand re-enable the tests when `PDF_USE_SKIA` is defined.\n\nTAG\u003dagy\nCONV\u003dcbd74667-2db7-45ab-81af-6261d7f53b8b\n\nBug: 42271707\nChange-Id: Ia54e60328c05de440efd4c489946759380175ba5\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/161291\nReviewed-by: Andy Phan \u003candyphan@chromium.org\u003e\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "84a249934825d13f06d0bb52af35b045f639d982",
      "tree": "fc25886ba2f378c684358e29eed1fbd08613df8d",
      "parents": [
        "0a42f6e64f28603f3aee118a1c140e9bd0647b71"
      ],
      "author": {
        "name": "Lei Zhang",
        "email": "thestig@chromium.org",
        "time": "Mon Oct 19 12:51:45 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Oct 19 12:51:45 2026 -0700"
      },
      "message": "Simplify CPDF_InteractiveForm::ExportToFDF()\n\nChange the 1-argument CPDF_InteractiveForm::ExportToFDF() overload to\ncall the 3-argument ExportToFDF() overload with an empty `fields` list\nand `bIncludeOrExclude` set to false, matching ResetForm(). This avoids\ncollecting all fields from `field_tree_` into a temporary vector just to\ninclude every field during export.\n\nWithout this change, the conditional that reads `bIncludeOrExclude`\nalways evaluate to false, because the 1-arg caller passed in the same\nset of fields that the 3-arg callee is iterating on. With this change,\nthe same conditional still evaluates to false, just with less work.\n\nTAG\u003dagy\nCONV\u003d770e36a0-d3ab-4355-be67-7cc4e77a38a8\n\nChange-Id: Ib411a3bbbb5a3594f21c8c2d87f8c0c0d5b27776\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/161290\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\nReviewed-by: Andy Phan \u003candyphan@chromium.org\u003e\n"
    },
    {
      "commit": "0a42f6e64f28603f3aee118a1c140e9bd0647b71",
      "tree": "c7addee121ae9821d7240a499fb3a27dc6cfb026",
      "parents": [
        "37a2c72b6effeeafbdb89588a57b15b91cedc250"
      ],
      "author": {
        "name": "Lei Zhang",
        "email": "thestig@chromium.org",
        "time": "Mon Oct 19 10:51:37 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Oct 19 10:51:37 2026 -0700"
      },
      "message": "Improve memory allocation failure handling in OpenJPEG\n\nPropagate opj_malloc() failure in opj_copy_image_header() to the\ncallers, so they can also fail early instead of continuing after the\nmemory allocation failure.\n\nCredit to the bug reporter for providing this patch.\n\nBug: 574061024\nChange-Id: Ifb53b384f4c0f0386794a76b1ff46e779e6849b7\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/161130\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\nReviewed-by: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "37a2c72b6effeeafbdb89588a57b15b91cedc250",
      "tree": "9756a5506324c66931942d6b43674611f3a26710",
      "parents": [
        "3ad362dc2e5ca07cb18511ecfb7efdea4199b8f7"
      ],
      "author": {
        "name": "pdfium-autoroll@skia-public.iam.gserviceaccount.com",
        "email": "pdfium-autoroll@skia-public.iam.gserviceaccount.com",
        "time": "Sun Oct 18 22:41:27 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Sun Oct 18 22:41:27 2026 -0700"
      },
      "message": "Roll Instrumented Libraries from 423262e4438b to 83128b60913a (8 revisions)\n\nhttps://chromium.googlesource.com/chromium/third_party/instrumented_libraries.git/+log/423262e4438b..83128b60913a\n\nIf this roll has caused a breakage, revert this CL and set the roller\nto dry run mode using the controls here:\nhttps://autoroll.skia.org/r/instrumented-libraries-pdfium\nPlease CC andyphan@google.com,dhoss@chromium.org,thestig@chromium.org on the revert to ensure that a human\nis aware of the problem.\n\nTo report a problem with the AutoRoller itself, please file a bug:\nhttps://issues.skia.org/issues/new?component\u003d1389291\u0026template\u003d1850622\n\nDocumentation for the AutoRoller is here:\nhttps://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md\n\nBug: None\nTbr: andyphan@google.com\nChange-Id: Idc0ea38cc0f8ba87004fce52209eca137170cfaf\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/161370\nCommit-Queue: pdfium-autoroll@skia-public.iam.gserviceaccount.com \u003cpdfium-autoroll@skia-public.iam.gserviceaccount.com\u003e\nBot-Commit: pdfium-autoroll@skia-public.iam.gserviceaccount.com \u003cpdfium-autoroll@skia-public.iam.gserviceaccount.com\u003e\n"
    },
    {
      "commit": "3ad362dc2e5ca07cb18511ecfb7efdea4199b8f7",
      "tree": "623dd24e29cbd71af89447134525679e8cc36bb9",
      "parents": [
        "9c866a447ca929bac93ed7da5f957fddb16ccde9"
      ],
      "author": {
        "name": "pdfium-autoroll@skia-public.iam.gserviceaccount.com",
        "email": "pdfium-autoroll@skia-public.iam.gserviceaccount.com",
        "time": "Sun Oct 18 21:39:23 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Sun Oct 18 21:39:23 2026 -0700"
      },
      "message": "Roll goldctl from 17aa2034a0c4 to d528c7cb34cc\n\nIf this roll has caused a breakage, revert this CL and set the roller\nto dry run mode using the controls here:\nhttps://autoroll.skia.org/r/goldctl-pdfium\nPlease CC andyphan@google.com,thestig@chromium.org on the revert to ensure that a human\nis aware of the problem.\n\nTo file a bug in goldctl: https://issues.skia.org\nTo file a bug in PDFium: https://crbug.com/pdfium\n\nTo report a problem with the AutoRoller itself, please file a bug:\nhttps://issues.skia.org/issues/new?component\u003d1389291\u0026template\u003d1850622\n\nDocumentation for the AutoRoller is here:\nhttps://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md\n\nBug: None\nTbr: andyphan@google.com\nChange-Id: I4b5e4d89d2bd61aadb8893d2ca6ebc012036967c\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/161350\nCommit-Queue: pdfium-autoroll@skia-public.iam.gserviceaccount.com \u003cpdfium-autoroll@skia-public.iam.gserviceaccount.com\u003e\nBot-Commit: pdfium-autoroll@skia-public.iam.gserviceaccount.com \u003cpdfium-autoroll@skia-public.iam.gserviceaccount.com\u003e\n"
    },
    {
      "commit": "9c866a447ca929bac93ed7da5f957fddb16ccde9",
      "tree": "4b34fdbaab86e6f0f2b42c1570b224bec8ed4022",
      "parents": [
        "a50f1a5953264de698f398fe3a2ef6153677fafa"
      ],
      "author": {
        "name": "Frank Barchard",
        "email": "fbarchard@google.com",
        "time": "Fri Oct 16 23:35:37 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Oct 16 23:35:37 2026 -0700"
      },
      "message": "Use float literals in sycc_to_rgb()\n\nIn core/fxcodec/jpx/cjpx_decoder.cpp, sycc_to_rgb() used unsuffixed\ndouble-precision literals (1.402, 0.344, 0.714, 1.772), forcing\nint32-to-fp64 conversions and 64-bit floating-point arithmetic per\npixel across sycc420_to_rgb(), sycc422_to_rgb(), and sycc444_to_rgb().\n\nUse single-precision float literals (1.402f, 0.344f, 0.714f, 1.772f)\nso compilers use 32-bit float instructions and wider SIMD vectors.\n\nPerformance (2048x200 sYCC, Coral NPU v3 RVV 256 px):\nCPU                          Before       After  Improvement\n------------------------------------------------------------\nGoogle Coral NPU v3 (RVV)   245494c      19952c       12.30x\nNVIDIA Grace (Neoverse-V2) 499.5 us    310.9 us        1.61x\nARM Neoverse-N1 (NEON)     988.4 us    623.5 us        1.59x\nAmpereOne (NEON)          1006.1 us    631.6 us        1.59x\nARM Neoverse-V2 (NEON)     988.0 us    623.5 us        1.58x\nAMD Zen 3 (AVX2)           313.8 us    226.4 us        1.39x\nIntel Ivy Bridge (SSE4.2)  722.5 us    519.2 us        1.39x\nAMD Zen 5 (AVX512)         212.3 us    160.1 us        1.33x\nAMD Zen 4 (AVX512)         253.8 us    190.5 us        1.33x\nAMD Zen 2 (AVX2)           416.9 us    330.7 us        1.26x\nAMD Zen 6 (AVX512)         230.1 us    183.7 us        1.25x\nARM Cortex-A53 (NEON)    51602.2 us  41322.9 us        1.25x\nIntel Haswell (AVX2)       495.7 us    435.5 us        1.14x\nIntel Ice Lake (AVX512)    361.5 us    339.4 us        1.07x\nIntel Emerald Rapids       339.7 us    320.3 us        1.06x\nIntel Sapphire Rapids      253.1 us    240.5 us        1.05x\n\nChange-Id: Ia28af085c8c618fde7369f6203cf9b219f60a951\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/161270\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "a50f1a5953264de698f398fe3a2ef6153677fafa",
      "tree": "8ee5f73ed9db0ece58811f33d90af31ee3995f1d",
      "parents": [
        "067393bda2d8be2e9528428baeacc9c97cd49c17"
      ],
      "author": {
        "name": "Lei Zhang",
        "email": "thestig@chromium.org",
        "time": "Fri Oct 16 17:13:47 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Oct 16 17:13:47 2026 -0700"
      },
      "message": "Fix UNSAFE_TODO() in AlternateDateTimeSymbols()\n\nConvert `kAltTableDate` and `kAltTableTime` to std::arrays. Then\naccessing them is safe because operator[] is hardened to do bounds\nchecking.\n\nChange-Id: I0a71c6d7b7f081665bd21306ac5f288085e99c2e\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/161190\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\nReviewed-by: Andy Phan \u003candyphan@chromium.org\u003e\n"
    },
    {
      "commit": "067393bda2d8be2e9528428baeacc9c97cd49c17",
      "tree": "3865edff55d2aea77b712642eebb17cfdd4348f9",
      "parents": [
        "c9a34bc1d8b93531cfaa0a0ab3c2c8519d6270bb"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Fri Oct 16 16:55:45 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Oct 16 16:55:45 2026 -0700"
      },
      "message": "Use display list comparisons in FPDFDocEmbedderTest.DeletePageAndRender\n\nCompare pre-deletion page display lists with post-deletion page\ndisplay lists directly instead of rasterizing each page and comparing\nagainst bitmap expectations, eliminating 10 obsolete golden PNG files.\n\nChange-Id: I664a3d90b24a82efc2b566ec466868598ea206c5\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160356\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "c9a34bc1d8b93531cfaa0a0ab3c2c8519d6270bb",
      "tree": "6d0cd25d672a4a7b0c0d450d66e5e906ab0abd4e",
      "parents": [
        "e804c957606650443fc7ae5d4697bb363732c441"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Fri Oct 16 16:16:56 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Oct 16 16:16:56 2026 -0700"
      },
      "message": "Make ~CFXJSE_FormCalcContext() clear internal binding of value_\n\nThis mirrors what ~CFXJSE_Engine() already did for every other bound\nobject. Also throw an error in V8FunctionCallback_Wrapper should the\nbinding somehow be gone.\n\nBug: 574302978\nChange-Id: I9778cc265ab2bcb311842ae3c168bb8c842befc0\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/161150\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "e804c957606650443fc7ae5d4697bb363732c441",
      "tree": "140282497b1a26aa9a0bd6551906b3239017dd6b",
      "parents": [
        "02aeb0078ab844bfaeb65674956b69be3cf6644b"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Fri Oct 16 16:14:27 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Oct 16 16:14:27 2026 -0700"
      },
      "message": "Use display list comparisons in annotation embedder tests\n\nReplace bitmap comparisons in FPDFAnnotEmbedderTest with\nDisplayListRenderer assertions. This tests rollover appearances,\nannotation flag modifications, link annotation creation, and focus\nring rendering directly against display list output instead of\nrasterized bitmaps, eliminating 17 obsolete golden PNG files.\n\nChange-Id: Icac252c643acb814e6e4c4b1223209c5c7fbb0ab\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160355\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "02aeb0078ab844bfaeb65674956b69be3cf6644b",
      "tree": "7151195bac5b108743dbb0a0ab431df9af72dbd2",
      "parents": [
        "f14ea7f3d445ea7e25def4ef501688c44a7eb310"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Fri Oct 16 14:59:13 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Oct 16 14:59:13 2026 -0700"
      },
      "message": "Use display list comparisons in parser decode embedder tests\n\nReplace bitmap comparisons in FPDFParserDecodeEmbedderTest with\nDisplayListRenderer assertions. This verifies stream decoding behavior,\nblank page generation, image drawing commands, and text rendering\ndirectly from display list output without rasterizing bitmaps,\neliminating 1 obsolete golden PNG file.\n\nChange-Id: I89fbaab1c7cc61f938cd7e02cd509ff9e5e4b821\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160354\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "f14ea7f3d445ea7e25def4ef501688c44a7eb310",
      "tree": "f6975ec0e9e3e47df321091e52a761b757bed50c",
      "parents": [
        "c3e1143e86dd95e2ede9f9415aad103c646b5e81"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Fri Oct 16 13:22:44 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Oct 16 13:22:44 2026 -0700"
      },
      "message": "Use display list comparisons in PPO embedder tests\n\nReplace bitmap comparisons in FPDFPPOEmbedderTest with\nDisplayListRenderer assertions. This tests page organization, N-up\nimport, page-to-XObject conversions, and page import directly against\ndisplay list output instead of rasterized bitmaps, eliminating 23\nobsolete golden PNG files.\n\nChange-Id: I19d59b3953e4002cde952d8eddec26ee02048fdd\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160353\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "c3e1143e86dd95e2ede9f9415aad103c646b5e81",
      "tree": "e0d0a9c3e31b25efb96e97b7afb73b4641c02d6e",
      "parents": [
        "bb72e525b77a2e9dbc3eff126490b969e79808b7"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Fri Oct 16 13:11:45 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Oct 16 13:11:45 2026 -0700"
      },
      "message": "Use display list comparisons in flatten embedder tests\n\nReplace bitmap comparisons in FPDFFlattenEmbedderTest with\nDisplayListRenderer assertions. This tests the presence of annotation\ntext and vector paths directly against display list output instead of\nplatform-specific rasterized bitmaps, eliminating 17 obsolete golden\nPNG files.\n\n-- Add missing name to unicode translations from \"a1\"..\"a206\" for the\n   fontations case provided in FT, as indicated by logging differences.\n\nChange-Id: Ic04c3cc963a064a140ff37f1a1cef861d3bee5e9\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160352\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "bb72e525b77a2e9dbc3eff126490b969e79808b7",
      "tree": "f60f79c0285effd32fe1c82f3934e00a1a9fb393",
      "parents": [
        "7c55203ed66b0461378323e3fcf2efaf76755241"
      ],
      "author": {
        "name": "Lei Zhang",
        "email": "thestig@chromium.org",
        "time": "Fri Oct 16 09:55:46 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Oct 16 09:55:46 2026 -0700"
      },
      "message": "Clean up third_party/lcms/0000-cmserr-changes.patch\n\nhttps://pdfium-review.googlesource.com/c/147470 accidentally included a\ndiff of this file in itself.\n\nChange-Id: I2ab29ef95fd63c8dc9b32fcfb1f29b3ec366701a\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/161090\nReviewed-by: Tom Sepez \u003ctsepez@chromium.org\u003e\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "7c55203ed66b0461378323e3fcf2efaf76755241",
      "tree": "a38a7c1b8cf01c69c2905310fd25df70d9b812c2",
      "parents": [
        "ab5e0a9a5e8461a9f0618fd1a1112b39547c26db"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Thu Oct 15 14:15:59 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Oct 15 14:15:59 2026 -0700"
      },
      "message": "Use display list comparisons in form fill embedder tests\n\nReplace bitmap comparisons in FPDFFormFillEmbedderTest with\nDisplayListRenderer assertions. This verifies rendered form text\nand rectangle highlights directly against display list output instead of\nplatform-specific rasterized bitmaps, eliminating 42 obsolete golden\nPNG files.\n\nChange-Id: I47a8f536bf267559b3a4f4cf5506bb90fc2b1b07\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160351\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "ab5e0a9a5e8461a9f0618fd1a1112b39547c26db",
      "tree": "f02e7176eb9f4b0ff6e41d9a90df529785a92a8b",
      "parents": [
        "609a364f74507898bdd00e8fd5a6fd5b48f75d75"
      ],
      "author": {
        "name": "Jeroen Bobbeldijk",
        "email": "jerbob92@gmail.com",
        "time": "Thu Oct 15 13:03:32 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Oct 15 13:03:32 2026 -0700"
      },
      "message": "Resample the horizontal stretch\u0027s 1- and 2-tap columns with Highway\n\nContinueStretchHorz() resamples one destination column at a time. Its\nmodal tap counts are 1 (no scaling in this axis) and 2 (bilinear\ninterpolation), so a bilinear row is a long run of columns doing the\nsame two multiply-accumulates on neighbouring source pixels, and that\npass is the largest single cost of rendering image-heavy pages.\n\nFour consecutive columns sharing a tap count, whose source pixels lie\nwithin 16 or 32 bytes of each other, are now resampled together: one\nvectorized gather per tap pulls all four columns\u0027 source bytes into\n32-bit lanes, one multiply-accumulate per tap does the arithmetic for\nall four, and the result is packed and stored as one vector. The\narithmetic is the per-column path\u0027s, in tap order, on the same bytes\nwith the same weights, so the output is identical bit for bit.\n\nPlanHorzGroups() runs once per stretch, after the weight table: it\nfinds maximal spans of same-tap-count columns, and for each whole group\nof four within a span whose combined source window fits the gather it\nprecomputes the gather indices and weights (StretchHorzGroup). A span is\nplanned only if at least three in four of its groups fit; consecutive\nfitting groups form a run (StretchHorzRun), which is the unit the\nkernel handles per call. Columns not covered -- an odd tap count, a\nshort span, a group whose window does not fit -- take the per-column\npath unchanged.\n\nThe kernels live in cstretchengine_hwy.cpp and use Highway. Three arms\nare covered:\n\n - k8BppTo8Bpp and kManyBpptoManyBpp (BGR and BGRx destinations):\n   StretchHorzRunSimd(), overloaded on the destination pixel type. 1bpp\n   sources take the k8BppTo8Bpp arm too, on the row Expand1BppRow()\n   produces, so the plan for them is made against that expanded row.\n - kManyBpptoManyBppWithAlpha: StretchHorzRunAlphaSimd(), where each\n   tap\u0027s weight is weight * src.alpha / 255 -- a per-lane truncating\n   divide that depends on the gathered alpha, so it is computed in the\n   kernel with the exact reciprocal-multiply trick for division by 255\n   (the (x + 1 + (x \u003e\u003e 8)) \u003e\u003e 8 approximation would be wrong here:\n   weight * alpha reaches 65536 * 255, past where it is exact).\n\nThe kernels take the source row and destination as spans and process a\nwhole run per call, so the runtime target selection and the call happen\nonce per run (hundreds of groups for an unclipped bilinear row) rather\nthan once per four columns. Stores are packed vectors: 4 bytes for\n8bpp, 16 bytes for BGRA and for BGRx (whose 4th bytes are read back\nfrom the destination and kept, as the per-column path leaves them\nuntouched), and 8 + 4 bytes for BGR so that nothing is written past the\n12 bytes a group owns.\n\nThe new unit tests compare every kernel, over a small fixed set of\ngroups and windows chosen to cover known edges (gather positions at\nthe start/middle/end of the window, weights at both ends and the\nmidpoint of the fixed-point range) for each (taps, window width)\nvariant, against a scalar re-derivation of what a group is documented\nto compute, including the bytes a group must not touch, and check that\na run is processed in full.\n\nBug: 559426535\nChange-Id: I4f5e3e977b4f6f9b184988ae518cf70abd868a20\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/158070\nReviewed-by: Tom Sepez \u003ctsepez@chromium.org\u003e\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "609a364f74507898bdd00e8fd5a6fd5b48f75d75",
      "tree": "0f39b3df0f81581a9db12d230bc4a203386c100a",
      "parents": [
        "c10905a91dc44b77c0bb0f883a382b7ad7100d6a"
      ],
      "author": {
        "name": "Nico Weber",
        "email": "thakis@chromium.org",
        "time": "Thu Oct 15 11:19:30 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Oct 15 11:19:30 2026 -0700"
      },
      "message": "pdfium_test: With --render-repeats, do full loads on each repeat\n\nPreviously, form_callbacks kept per-page data alive\nafter a page was processed. Now, --render-repeats measures\nimage decode time in each repeat.\n\n(When using --pages\u003d1..10, form_fill_info_-\u003eloaded_pages keeps\nper-page image caches alive for all pages still, so decoding many\npages needs memory for the images of all pages still. See an earlier\npatch set on the CL for a different approach that changes that too.)\n\nFollow-up to https://pdfium-review.googlesource.com/c/pdfium/+/132470\n\nBug: none\nChange-Id: Ief69b738ce21f9e82c0f9a95a63f4ec201a9cfc8\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160790\nReviewed-by: Nico Weber \u003cthakis@google.com\u003e\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Nico Weber \u003cthakis@chromium.org\u003e\n"
    },
    {
      "commit": "c10905a91dc44b77c0bb0f883a382b7ad7100d6a",
      "tree": "37474fab5afe3cbd543c12bfd59c6fd892861eeb",
      "parents": [
        "fe163fdddb9fdc24aeb67da8ce90b5af5751be2d"
      ],
      "author": {
        "name": "Lei Zhang",
        "email": "thestig@chromium.org",
        "time": "Thu Oct 15 10:03:53 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Oct 15 10:03:53 2026 -0700"
      },
      "message": "Fix building cpvt_section_unittest.cpp with GCC\n\nMove struct LayoutTestData out of the anonymous namespace inside\ncpvt_section_unittest.cpp. The existing code causes GCC to fail with\n-Werror\u003dsubobject-linkage.\n\nChange-Id: If224f666c2a702d21a13d31d51e8c0e05a926d71\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160971\nReviewed-by: Andy Phan \u003candyphan@chromium.org\u003e\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "fe163fdddb9fdc24aeb67da8ce90b5af5751be2d",
      "tree": "b07cb3d8c452d7c8cd93b43b18532a38a2702cb0",
      "parents": [
        "c7fe62c6bdf7796e64f7b649ed3f01639758b885"
      ],
      "author": {
        "name": "Lei Zhang",
        "email": "thestig@chromium.org",
        "time": "Wed Oct 14 17:49:08 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Oct 14 17:49:08 2026 -0700"
      },
      "message": "Clean up CPDF_SyntaxParser constructors\n\n- Remove CPDF_SyntaxParser::CreateForTesting() and inline the\n  implementation into the only caller.\n- Rename variable names in remaining ctors to use Google C++ style.\n- Add inline comment to help document what \"0\" is.\n\nChange-Id: I8f584ec4295bf8e0d9bb1cf1994423f6750a9f8a\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160991\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\nReviewed-by: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "c7fe62c6bdf7796e64f7b649ed3f01639758b885",
      "tree": "3b9374adf18d5de055541439ec949e7f73c1feca",
      "parents": [
        "5b39cca7f5c26c8063247e7c4057724f0fe78482"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Wed Oct 14 17:37:24 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Oct 14 17:37:24 2026 -0700"
      },
      "message": "Use display lists for text addition and positioning tests\n\nReplace fragile golden PNG image comparisons in FPDFEditEmbedderTest\nfor text addition, font loading, and glyph positioning tests with\ndisplay list inspections. Support UTF-8 multi-byte decoding in\nExtractTextLinesFromDisplayList to verify non-ASCII and CID font text\ndirectly.\n\nDelete 46 obsolete golden PNG expectation files.\n\nChange-Id: Ib10a4210ee33aeccd315d1ca0f0b54187925efaa\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160350\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "5b39cca7f5c26c8063247e7c4057724f0fe78482",
      "tree": "af781cdbcec31f211857e7ba995dedadff202a16",
      "parents": [
        "49861466fc4bb0c4f97c1e3af82b0cfbcf5f7637"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Wed Oct 14 16:52:46 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Oct 14 16:52:46 2026 -0700"
      },
      "message": "Use display lists for font subsetting tests in FPDFSaveEmbedderTest\n\nReplace fragile golden PNG image comparisons in\nFPDFSaveWithFontSubsetEmbedderTest with display list codepoint checks.\nThe display list approach verifies the text emitted by the font\nsubsetting and save operations directly, avoiding rasterization,\nhinting, and font engine discrepancies between FreeType and\nFontations/Skia.\n\nDelete 12 obsolete golden PNG expectation files.\n\nChange-Id: I63bab25d46cf02f6b9e40686ff63c5dea9b53448\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160070\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "49861466fc4bb0c4f97c1e3af82b0cfbcf5f7637",
      "tree": "cb68fc0b569fff875fbba74694b17ac762907fa3",
      "parents": [
        "b87fc9ab98f67a7b0d8cbeab25e22f18b2e90322"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Wed Oct 14 14:59:59 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Oct 14 14:59:59 2026 -0700"
      },
      "message": "Remove unnecessary public access specifiers from structs\n\nStructs default to public access, so the explicit public: access\nspecifier is redundant and can be safely removed to clean up the\ncodebase.\n\n-- Make aggregates where possible.\n-- Make struct inheriting from class into a class.\n\nChange-Id: I8f4762dbdbc380061db4d92cb1393c57483568ba\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160970\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "b87fc9ab98f67a7b0d8cbeab25e22f18b2e90322",
      "tree": "64128654c21cea4c07f832854a69790074e929ee",
      "parents": [
        "f536928c24659ca3f669327b83b0af6e7cfb3826"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Wed Oct 14 14:54:47 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Oct 14 14:54:47 2026 -0700"
      },
      "message": "Make CFFL_FieldAction a true aggregate.\n\nThis is possible now that the out-of-line constructor requirement has\nbeen relaxed. Use designated initializers where possible.\n\n-- convert members to google_style.\n-- remove redundant assignment of members to default values.\n\nChange-Id: If5144766a3c5c5b7809328d9263413364251af52\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160950\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "f536928c24659ca3f669327b83b0af6e7cfb3826",
      "tree": "14b1f9189aee7e497fb95f185b50e7c7436a2e6e",
      "parents": [
        "1276841e4a0174f80f9e98f6154544fb9277b2fa"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Wed Oct 14 12:37:16 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Oct 14 12:37:16 2026 -0700"
      },
      "message": "Use two-argument AutoRestorer constructor in additional files.\n\nSimplify the cases where assigning a bool, enum, or integer literal.\n\nChange-Id: I3fc7104a819f232e668aa92704c145a5e9dc6fd9\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160911\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "1276841e4a0174f80f9e98f6154544fb9277b2fa",
      "tree": "fc57d134b7c9d5b6f30c1a9da18b10a0f992950a",
      "parents": [
        "3ea7ec1feb70ee2d7b64ea857074aac06cfae156"
      ],
      "author": {
        "name": "Lei Zhang",
        "email": "thestig@chromium.org",
        "time": "Wed Oct 14 12:20:09 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Oct 14 12:20:09 2026 -0700"
      },
      "message": "Stop trying to clang-format //third_party code\n\nAdd third_party/.clang-format-ignore so clang-format does not format 3P\ncode.  It is copied from Chromium\u0027s file at the same relative location.\n\nChange-Id: I4903da2517c409a10859d8a039642612f07cce9c\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160930\nReviewed-by: Andy Phan \u003candyphan@chromium.org\u003e\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "3ea7ec1feb70ee2d7b64ea857074aac06cfae156",
      "tree": "2d7e6106c3c94fbe3cc74ea6cfa231249f59a940",
      "parents": [
        "ac3cf1684db05bd68338acb84e3823e6feb72b5b"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Wed Oct 14 11:26:45 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Oct 14 11:26:45 2026 -0700"
      },
      "message": "Introduce two-argument AutoRestorer constructor.\n\nProvide a new value at construction time. Then use this to simplify\nCPDFSDK_FormFillEnvironment.\n\nChange-Id: Iadc1af0ae0e22f441380565219a814b7b56b080f\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160910\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "ac3cf1684db05bd68338acb84e3823e6feb72b5b",
      "tree": "ea58eb54c5d7af30a73b036403b79a9c2a85fa8c",
      "parents": [
        "616a2caa413ab02b0700de7d906a07ee17507637"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Wed Oct 14 11:02:52 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Oct 14 11:02:52 2026 -0700"
      },
      "message": "CHECK on FFE teardown if embedder is inside a callback.\n\nThis indicates a misbehaving embedder, so flag it with a CHECK()\nwhile it is still active on the stack.\n\n-- mass rename two hungarian length variables.\n-- consistently name AutoRestorer local `restorer`\n\nBug: 572237007\nChange-Id: Ice9212769e4072d76a427379aa13d02fa36be55d\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160615\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "616a2caa413ab02b0700de7d906a07ee17507637",
      "tree": "3f83bef31528568dbc9455e99664ad9050a2b3dc",
      "parents": [
        "ff42b578651375a1fb983e5fdf58a191a3a67daf"
      ],
      "author": {
        "name": "Lei Zhang",
        "email": "thestig@chromium.org",
        "time": "Wed Oct 14 10:53:00 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Oct 14 10:53:00 2026 -0700"
      },
      "message": "Tweak GetNormalizedPoints() inside cfx_path.cpp to return earlier\n\nRefactor GetNormalizedPoints() so the case where there are too many\npoints can return slightly earlier by checking a vector size before\nappending to the vector. As such, the same vector can reserve one fewer\nelement.\n\nChange-Id: I79f787c85e18bb0558042f340a8b7e48f788e086\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160890\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\nReviewed-by: Andy Phan \u003candyphan@chromium.org\u003e\n"
    },
    {
      "commit": "ff42b578651375a1fb983e5fdf58a191a3a67daf",
      "tree": "b30be3a71ad943b84ae373d37ddf6ce968a99907",
      "parents": [
        "bb7b5e65a083cadc9a81c38af314e2e8fdd6c897"
      ],
      "author": {
        "name": "Lei Zhang",
        "email": "thestig@chromium.org",
        "time": "Wed Oct 14 10:52:45 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Oct 14 10:52:45 2026 -0700"
      },
      "message": "Simplify CFX_Path::GetRect() checks in cfx_path_unittest.cpp\n\nCombine std::optional::has_value() and std::optional::value() checks on\nCFX_Path::GetRect() into single EXPECT_EQ() calls, and inline the rest\nof the `rect` checks into EXPECT_FALSE(path.GetRect(...).has_value()).\n\nTAG\u003dagy\nCONV\u003d6567e49a-585d-49fa-a2a2-cea8e1071f98\n\nChange-Id: I774f0286072a80560b29ef2e17f7f90793b8029a\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160870\nReviewed-by: Andy Phan \u003candyphan@chromium.org\u003e\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "bb7b5e65a083cadc9a81c38af314e2e8fdd6c897",
      "tree": "28585dbcab398168110fe25d1ed933bb7c94641c",
      "parents": [
        "affabff846464fff587818f1458132b0965b8ee0"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Tue Oct 13 19:39:19 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Oct 13 19:39:19 2026 -0700"
      },
      "message": "Use display lists for text removal tests in FPDFEditEmbedderTest\n\nReplace fragile golden PNG image comparisons in FPDFEditEmbedderTest\ntext removal tests with display list text inspections. The display list\napproach inspects the emitted text directly, avoiding rasterization,\nhinting, and font engine discrepancies between FreeType and Fontations/\nSkia.\n\nDelete 22 obsolete golden PNG expectation files and remove the now\nunused kHelloWorldRemovedPng constant.\n\nChange-Id: I1f296f748e7ea025e3a5c63d51cbd2a7e9e85bf4\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160050\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "affabff846464fff587818f1458132b0965b8ee0",
      "tree": "41c9eb5179583f4613794e50e2ebfc7e06c136d1",
      "parents": [
        "c9c74443cc98129ff54593e6d7bb4727b8ac8829"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Tue Oct 13 19:11:41 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Oct 13 19:11:41 2026 -0700"
      },
      "message": "Add CFX_GEModule::PlatformIface::DestroyPlatformFont()\n\nAdd DestroyPlatformFont() to pair with CreatePlatformFont() on\nCFX_GEModule::PlatformIface under IS_APPLE. This allows\nCFX_Font::ReleasePlatformResource() to move from fx_apple_impl.cpp into\ncfx_font.cpp alongside the rest of CFX_Font.\n\nChange-Id: I01e730dcf380e36b80cf356b2e9dc530641e8bd5\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160652\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "c9c74443cc98129ff54593e6d7bb4727b8ac8829",
      "tree": "3f27cfb94bbb0ec1f69acded1ab0d0178e954ace",
      "parents": [
        "e34a93404af600aca68880d1b26e2eca00db52f7"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Tue Oct 13 19:08:04 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Oct 13 19:08:04 2026 -0700"
      },
      "message": "Remove ShouldDrawDeviceText() from CFX_RenderDevice\n\nThis keeps platform-specific device text eligibility checks inside the\nconcrete device drivers rather than in CFX_RenderDevice, removes a\nredundant ShouldDrawDeviceText() call from the Windows printer path,\nand ensures non-rasterizing drivers will still receive DrawDeviceText()\ncalls on macOS.\n\nInstead, since it is interrogating a font, make it an Apple-only\nmethod of CFX_Font.\n\nBug: 573199238\nChange-Id: I0a107edd4a47c7f22a3e9ffea7becd3e00f05493\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160830\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "e34a93404af600aca68880d1b26e2eca00db52f7",
      "tree": "1f9fd904d030c367e4a0581b4ed7d19801a8e484",
      "parents": [
        "e764cc088a62b5f0510a73bed4e19c88c9af50bc"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Tue Oct 13 18:44:24 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Oct 13 18:44:24 2026 -0700"
      },
      "message": "Check custom property name length in CSS declaration parsers\n\nCommit 21e954b59fce changed CFX_CSSSyntaxParser::GetCurrentString() to\nreturn a string view instead of taking an out-parameter length, leaving\n`iLen2` in CFX_CSSStyleSelector::AppendInlineStyle() and `iValueLen` in\nCFX_CSSStyleSheet::LoadStyleRule() permanently zero.\n\nReplace the stale length checks with !wsName.IsEmpty() so custom CSS\nproperties reach CFX_CSSDeclaration::AddProperty().\n\nUpdate CFX_CSSDeclaration::empty() to check both properties_ and\ncustom_properties_ so style rules containing only custom properties are\nnot discarded.\n\nAdd unit tests covering custom CSS properties in both inline styles and\nstylesheet rules.\n\nBug: 573263143\nChange-Id: Ib9cddf49d6687a34ab2c4195d2dc70eaf74e2aa3\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160850\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "e764cc088a62b5f0510a73bed4e19c88c9af50bc",
      "tree": "7ef4281d168bb7e59c3f50e93e16e021253e7b50",
      "parents": [
        "c2cae14c8b50981469b82bc75224c260be482cbe"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Tue Oct 13 18:43:02 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Oct 13 18:43:02 2026 -0700"
      },
      "message": "Guard against re-entrant destruction of the CJS_Runtime\n\nPrevent a (somewhat) misbehaving embedder from tearing down the\nruntime while a callback is still in-flight.\n\nBug: 572237007\nChange-Id: I003a6b67703305c465a2ed0845f4274df93ed5af\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160614\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "c2cae14c8b50981469b82bc75224c260be482cbe",
      "tree": "e2c04673156ac3019210c17f3b227d9416e33680",
      "parents": [
        "69efacb11fa5bee156017811629ae996296fb7d4"
      ],
      "author": {
        "name": "Lei Zhang",
        "email": "thestig@chromium.org",
        "time": "Tue Oct 13 18:40:21 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Oct 13 18:40:21 2026 -0700"
      },
      "message": "Use CFX_Path::GetRectOppositeCorner() in more places\n\nIn CPDF_ClipPath::AppendPathWithAutoMerge() and\nCPDF_ContentParser::CheckClip(), use GetRectOppositeCorner() and avoid\nassuming the point at index 2 is always the opposite corner. After this,\nCPDF_Path::IsRect() is dead code, so delete it.\n\nChange-Id: Id2ad3fc4e7d2e7b782bedad56946f91f522608fd\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160770\nReviewed-by: Andy Phan \u003candyphan@chromium.org\u003e\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "69efacb11fa5bee156017811629ae996296fb7d4",
      "tree": "ff832981edaec53a9bbdf4331ce08a52aa4015fa",
      "parents": [
        "ff0c9276af3168ac989e0c71752e34814d6d2065"
      ],
      "author": {
        "name": "Lei Zhang",
        "email": "thestig@chromium.org",
        "time": "Tue Oct 13 17:22:21 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Oct 13 17:22:21 2026 -0700"
      },
      "message": "Normalize 4-point rects with redundant or collinear points in CFX_Path\n\nCFX_Path::IsRect(), GetRect(), and GetRectOppositeCorner() recognize\nboth 4-point rectangles (where the start point is not repeated at the\nend) and 5-point rectangles (where the start point is repeated at the\nend). However, PathPointsNeedNormalization() and GetNormalizedPoints()\nonly normalized paths with more than 5 points that repeated the start\npoint at the end.\n\nAs a result, 4-point rectangles with duplicate or collinear edge points,\nsuch as paths closed via CFX_Path::ClosePath() / FPDFPath_Close(), were\nnot recognized as rectangles in memory, even though saving and reloading\nthe PDF via CPDF_StreamContentParser::Handle_ClosePath() appended the\nstart point and turned them into rectangles.\n\nUpdate PathPointsNeedNormalization() to also normalize 5-point paths\nwhere the first and last points differ, and update GetNormalizedPoints()\nto normalize paths with differing first and last points to 4 points\nwhile preserving `close_figure_` when deleting a final closing duplicate\nor collinear point.\n\nTAG\u003dagy\nCONV\u003de2fb55f5-ba6e-4820-9194-44fb5bf14b16\n\nBug: 572902676\nChange-Id: Ie01ae75c1441666bd488104716f8a08804361684\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160711\nReviewed-by: Andy Phan \u003candyphan@chromium.org\u003e\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "ff0c9276af3168ac989e0c71752e34814d6d2065",
      "tree": "ba320907bf0b1ef87bad2d5d6bf8f53ef97cdec8",
      "parents": [
        "e8ff093accb8d171f996c0a059c5adbd55b08bc4"
      ],
      "author": {
        "name": "Lei Zhang",
        "email": "thestig@chromium.org",
        "time": "Tue Oct 13 15:47:41 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Oct 13 15:47:41 2026 -0700"
      },
      "message": "Add unit tests for 4-point rects with redundant or collinear points\n\nCFX_Path::IsRect(), GetRect(), and GetRectOppositeCorner() recognize\nboth 4-point and 5-point rectangles, but PathPointsNeedNormalization()\nand GetNormalizedPoints() currently only normalize paths that have more\nthan 5 points and repeat the first point at the end. As a result,\n4-point rectangles with duplicate or collinear edge points (such as\npaths closed with CFX_Path::ClosePath() instead of repeating the start\npoint) are not recognized as rectangles.\n\nAdd/update tests in cpdf_pagecontentgenerator_unittest.cpp and\ncfx_path_unittest.cpp to document the current behavior, along with TODOs\nto fix this. In particular, add one more scenario in\nCFXPath.FivePointRect, and remove the identical scenario from\nCFXPath.NotRect.\n\nTAG\u003dagy\nCONV\u003de2fb55f5-ba6e-4820-9194-44fb5bf14b16\n\nBug: 572902676\nChange-Id: Ife1104f4417a9f9e9a612f856e31848806cfa7d7\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160710\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\nReviewed-by: Andy Phan \u003candyphan@chromium.org\u003e\n"
    },
    {
      "commit": "e8ff093accb8d171f996c0a059c5adbd55b08bc4",
      "tree": "908005a68f8cae262847e97432a40d410369b034",
      "parents": [
        "b02da6c41c467c45b20c1a052b4b6ed515a519f2"
      ],
      "author": {
        "name": "Lei Zhang",
        "email": "thestig@chromium.org",
        "time": "Tue Oct 13 14:45:47 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Oct 13 14:45:47 2026 -0700"
      },
      "message": "Hide ByteStringPool details inside bytestring_pool.cpp\n\nConvert ByteStringPool into an interface with ByteStringPool::Create()\nand a pure virtual Intern() method, and move the absl::flat_hash_set\nimplementation into ByteStringPoolImpl in bytestring_pool.cpp. This\navoids exposing absl/container/flat_hash_set.h in bytestring_pool.h.\nSince bytestring_pool.h gets transitively included in many translation\nunits, explosing flat_hash_set.h increases the Chromium compile size by\n~450 MB, as seen on crrev.com/c/8563220.\n\nTAG\u003dagy\nCONV\u003d9d52233e-f437-4c0d-acb6-07f402d6540c\n\nChange-Id: Iaecae19ee53ce97e57e793f4962c2e8865b1a295\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160690\nReviewed-by: Tom Sepez \u003ctsepez@chromium.org\u003e\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "b02da6c41c467c45b20c1a052b4b6ed515a519f2",
      "tree": "4d8d318a4747ffb776861f9e401a1e08a184a3c9",
      "parents": [
        "69b5290105869b1bb7f0a15b0b12eedf3258fbe5"
      ],
      "author": {
        "name": "Lei Zhang",
        "email": "thestig@chromium.org",
        "time": "Tue Oct 13 13:06:52 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Oct 13 13:06:52 2026 -0700"
      },
      "message": "Stop recognizing open, 3-sided paths as rectangles.\n\nRevert a behavior change pdfium-review.googlesource.com/c/80912 made,\nsince a path that only forms 3 sides of a rectangle and has not been\nclosed is not a rectangle.\n\nBug: 42270691, 572902676\nChange-Id: I31da35b950e281f0815bfb17b40befd14f21b5cb\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160673\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\nReviewed-by: Andy Phan \u003candyphan@chromium.org\u003e\n"
    },
    {
      "commit": "69b5290105869b1bb7f0a15b0b12eedf3258fbe5",
      "tree": "3d82d39cf921511685be159066a6a4e0c6726e6a",
      "parents": [
        "6153dfada3bb0c09f165638786c22f7d83ddd62f"
      ],
      "author": {
        "name": "Lei Zhang",
        "email": "thestig@chromium.org",
        "time": "Tue Oct 13 12:04:52 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Oct 13 12:04:52 2026 -0700"
      },
      "message": "Add TODO to revert CFXPath expectations for open, 3-sided paths\n\nAdd some TODOs as a first step towards reverting a behavior change\npdfium-review.googlesource.com/c/80912 made. When a path only forms 3\nsides of a rectangle and it has not been closed, that should not count\nas a rectangle.\n\nBug: 42270691, 572902676\nChange-Id: I5cac1867a77b7dbb351d50f3d1df5fee78e1cac6\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160750\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\nReviewed-by: Andy Phan \u003candyphan@chromium.org\u003e\n"
    },
    {
      "commit": "6153dfada3bb0c09f165638786c22f7d83ddd62f",
      "tree": "d42d31bee47a734b1197acee4e9a7d19fb4d6b71",
      "parents": [
        "0ee27549108c31e33de6b82e75a81cbb88431cfd"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Tue Oct 13 10:52:02 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Oct 13 10:52:02 2026 -0700"
      },
      "message": "Combine V8 and XFA columns in SUPPRESSIONS\n\nCombine columns 2 (V8 support) and 3 (XFA support) into a single engine\ncolumn (column 2) accepting nov8, v8, and xfa.\n\nBecause XFA requires V8, the combination nov8 with XFA is impossible,\nand nov8 without XFA is redundant with nov8. Combining these into a\nsingle 3-state engine column simplifies the suppression table from\n7 columns to 6 columns.\n\nAdd convert_suppressions.py to perform the transformation on\nSUPPRESSIONS.\n\nUpdate Suppressor._VALID_COLUMN_VALUES, _SuppressionSpecificity, and\n_MatchSuppression to match against the unified engine column.\n\nChange-Id: Ib4a892f2a56a9dc26e5a860bb67410a0051a093b\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160670\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "0ee27549108c31e33de6b82e75a81cbb88431cfd",
      "tree": "97dad55b3958a94067a7e0ca6febc53cec2cfbfd",
      "parents": [
        "abdb4771d9c6bcdbb6d81c4b647d462e6c63d6a0"
      ],
      "author": {
        "name": "Lei Zhang",
        "email": "thestig@chromium.org",
        "time": "Mon Oct 12 18:41:41 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Oct 12 18:41:41 2026 -0700"
      },
      "message": "Sort conditionals in core/fxge/BUILD.gn\n\nFor instance, pdf_enable_fontations and pdf_enable_freetype blocks now\nlive closer to each other.\n\nChange-Id: Id85bfeeed07033916ee5de8c7eabd3733bb1bc8d\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160650\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\nReviewed-by: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "abdb4771d9c6bcdbb6d81c4b647d462e6c63d6a0",
      "tree": "58d76f4baedd0782121b39de612438e9ceec9594",
      "parents": [
        "d4a751b12cd2ca8e766393d77be89457b1e833c0"
      ],
      "author": {
        "name": "Lei Zhang",
        "email": "thestig@chromium.org",
        "time": "Mon Oct 12 18:31:42 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Oct 12 18:31:42 2026 -0700"
      },
      "message": "Add unit tests for CFX_DIBBase::StretchTo()\n\nAdd unit test coverage for CFX_DIBBase::StretchTo() in\ncfx_dibbase_unittest.cpp, testing empty output bounds, 8-bit mask\nstretching with horizontal flipping and clipping, 8-bit grayscale\nstretching with vertical flipping, and BGRA stretching.\n\nTAG\u003dagy\nCONV\u003d913b2a22-b8f8-4d2f-a2ad-8d7cc152a129\n\nChange-Id: Ie252bbe08915d93d136dd154b6560893287b2557\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160630\nReviewed-by: Tom Sepez \u003ctsepez@chromium.org\u003e\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "d4a751b12cd2ca8e766393d77be89457b1e833c0",
      "tree": "055766a4cec503f9760454bc3881ddb692daacff",
      "parents": [
        "a898334f95d4a38a1648750a125e10c7137624c6"
      ],
      "author": {
        "name": "Lei Zhang",
        "email": "thestig@chromium.org",
        "time": "Mon Oct 12 18:08:02 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Oct 12 18:08:02 2026 -0700"
      },
      "message": "Add unit tests for CFX_DIBBase::TransformTo()\n\nAdd unit test coverage for CFX_DIBBase::TransformTo() in\ncfx_dibbase_unittest.cpp, testing empty output bounds, 8-bit mask\nrotation/scaling, and BGRA scaling/translation.\n\nTAG\u003dagy\nCONV\u003d913b2a22-b8f8-4d2f-a2ad-8d7cc152a129\n\nChange-Id: I51272780d37aae5361e5439cda7de2bd996e6b7f\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160611\nReviewed-by: Tom Sepez \u003ctsepez@chromium.org\u003e\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "a898334f95d4a38a1648750a125e10c7137624c6",
      "tree": "1b46da64c0d418b616fe5cbf5192c3e4018621fb",
      "parents": [
        "bf4dc62c83fd8145ec3e879c08b1660eb24bd19a"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Mon Oct 12 17:17:24 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Oct 12 17:17:24 2026 -0700"
      },
      "message": "Support optional SSIM threshold in fuzzy matching suppressions\n\nAdd support for an optional 4th parameter to the fuzzy action in\nSUPPRESSIONS, allowing tests to specify an SSIM threshold in [0.0, 1.0].\n\nUpdate Suppressor._ParseFuzzyAction to accept up to 4 parameters and\nvalidate that the SSIM threshold does not exceed 1.0.\n\nUpdate PNGDiffer._ParseTolerances to extract the SSIM threshold,\ndefaulting to 1.0. In PNGDiffer.EvaluateMatch, accept comparisons if\neither the existing MSE criteria pass or the mean SSIM strictly exceeds\nthe configured threshold. Defaulting to 1.0 preserves existing behavior\nsince mean SSIM cannot exceed 1.0.\n\nChange-Id: Icf84478c7c825c4c49c01a3c21168f991ea8879d\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160651\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "bf4dc62c83fd8145ec3e879c08b1660eb24bd19a",
      "tree": "f8520a2c8d35ab203a7b9291403576ae482107be",
      "parents": [
        "c31605b51cc8bd6ad8379db338d756c87b10b9ee"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Mon Oct 12 16:46:41 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Oct 12 16:46:41 2026 -0700"
      },
      "message": "Add display list file comparison helpers to EmbedderTest\n\nIntroduce EmbedderTest::CompareDisplayList() and helper functions to\ncompare rendered display lists against expectation files.\n\nAdd VerifySavedRenderingWithDisplayList() and\nVerifySavedDocumentWithDisplayList() to support testing saved document\nrendering with display lists.\n\nMigrate FPDFViewEmbedderTest.RenderPageToDisplayList to use\nCompareDisplayList() with rectangles_expected.dump.txt instead of an\ninline string literal.\n\nChange-Id: Ie055ae896d535ff87d1894ddc871b3b81eba87b2\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160550\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "c31605b51cc8bd6ad8379db338d756c87b10b9ee",
      "tree": "7f9e24a313e3a03e0fdeee2179d589e6047a5886",
      "parents": [
        "f871ae47922d76d668c4eec99b9dba3e6ffd9c38"
      ],
      "author": {
        "name": "Frank Barchard",
        "email": "fbarchard@google.com",
        "time": "Mon Oct 12 16:35:33 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Oct 12 16:35:33 2026 -0700"
      },
      "message": "Use libyuv for DIB format, alpha, and transforms\n\nWhen PDF_USE_LIBYUV is enabled, accelerate lossless pixel format\nconversions, alpha plane extraction/injection, horizontal mirroring, and\n90/270-degree rotation / transposition in CFX_DIBBase and CFX_DIBitmap:\n\n- ConvertBuffer_RgbToArgbPremul, CFX_DIBitmap::ConvertFormat (kBgr -\u003e\n  kBgra), and 24-bpp CFX_DIBBase::RealizeSkImage: use\n  libyuv::RGB24ToARGB.\n- ConvertBuffer_32bppRgbToRgb24: use libyuv::ARGBToRGB24.\n- CFX_DIBBase::CloneAlphaMask: use libyuv::ARGBExtractAlpha.\n- CFX_DIBitmap::MultiplyAlphaMask (kBgrx): use libyuv::ARGBCopyYToAlpha.\n- CFX_DIBBase::FlipImage: use libyuv::MirrorPlane, libyuv::RGB24Mirror,\n  and libyuv::ARGBMirror.\n- CFX_DIBBase::SwapXY: use libyuv::RotatePlane90,\n  libyuv::RotatePlane270, libyuv::TransposePlane, and libyuv::ARGBRotate\n  for 8-bpp and 32-bpp bitmaps via RealizeIfNeeded().\n\nWhen the source bitmap has a contiguous buffer, invoke the full 2D\nlibyuv plane functions directly instead of row-by-row.\n\nSpeedup vs Before (1275x1650, US Letter 150 DPI):\n| Function         | Zen 5  | GNR    | Grace  | Wasm   | RVV    |\n|------------------|--------|--------|--------|--------|--------|\n| RGB24ToARGB      |  6.08x |  2.53x |  5.65x |  5.54x | 31.04x |\n| ARGBToRGB24      |  5.88x |  1.98x |  2.35x |  1.55x | 28.07x |\n| ARGBExtractAlpha |  5.95x |  1.90x |  4.13x |  4.33x | 17.05x |\n| ARGBCopyYToAlpha |  7.61x |  3.02x |  4.71x |  3.28x |  7.22x |\n| MirrorPlane      |  9.59x |  5.28x |  5.84x |  6.04x |  1.33x |\n| RGB24Mirror      |  8.32x |  3.02x |  5.40x |  4.53x |  1.00x |\n| ARGBMirror       |  4.17x |  1.33x |  2.57x |  3.20x | 21.06x |\n| RotatePlane90    | 10.86x |  6.60x |  7.23x |  8.50x |  1.84x |\n| RotatePlane270   | 10.75x |  6.59x |  6.97x |  9.31x |  1.84x |\n| TransposePlane   | 10.92x |  6.53x |  7.13x |  8.64x |  1.84x |\n| ARGBRotate       |  5.40x |  3.01x |  1.65x |  2.74x | 13.24x |\n\n(Zen 5: AMD EPYC Turin AVX-512; GNR: Intel Granite Rapids AVX-512;\nGrace: NVIDIA Grace Neoverse V2 SVE2; Wasm: V8 SIMD128; RVV: Coral NPU)\n\nBug: 42271060, 549230311\nChange-Id: I223e13be29cb4546c7d0e53c9dda340dc4375944\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160093\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "f871ae47922d76d668c4eec99b9dba3e6ffd9c38",
      "tree": "8f26203e0cfd432785d55800de28ee3c0721ce03",
      "parents": [
        "56c5b9701cd7bbf3db4d65d7fb3f9b9e54a1d533"
      ],
      "author": {
        "name": "Lei Zhang",
        "email": "thestig@chromium.org",
        "time": "Mon Oct 12 11:33:41 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Oct 12 11:33:41 2026 -0700"
      },
      "message": "Change ByteStringPool to use absl::flat_hash_set\n\nPer recommendations in Chromium\u0027s base/containers/README.md, switch from\nstd::unordered_set to absl::flat_hash_set.\n\nChange-Id: I0e4dfeea9fe888b0ea2765afa42d165bc69e2e4f\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160493\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\nReviewed-by: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "56c5b9701cd7bbf3db4d65d7fb3f9b9e54a1d533",
      "tree": "00c3fefc8bf40295f36a15f453ae85e66f415788",
      "parents": [
        "1e1e501df0930e8c3c2f438040b93cef878764b4"
      ],
      "author": {
        "name": "Lei Zhang",
        "email": "thestig@chromium.org",
        "time": "Mon Oct 12 11:25:09 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Oct 12 11:25:09 2026 -0700"
      },
      "message": "Remove the ability to intern strings from CPDF_String\n\nAdding arbitrary string data to the ByteStringPool from CPDF_String is\nunlikely to generate much data sharing. Instead, only use ByteStringPool\nfor CPDF_Name, where values like \"Type\" and \"Page\" are often repeated.\n\nChange-Id: I261b16b93a9a180c86e6c78b1dfd92a5d7bd1097\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160492\nReviewed-by: Tom Sepez \u003ctsepez@chromium.org\u003e\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "1e1e501df0930e8c3c2f438040b93cef878764b4",
      "tree": "94456449460541f1dc7fea8e2c977f26c372715c",
      "parents": [
        "e2cea87df5105cb7d749595af6ad519d9fb5403a"
      ],
      "author": {
        "name": "Lei Zhang",
        "email": "thestig@chromium.org",
        "time": "Mon Oct 12 10:08:21 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Oct 12 10:08:21 2026 -0700"
      },
      "message": "Use MaybeOwned in CPDF_Parser\n\nAvoid manually reimplementing it.\n\nChange-Id: I3a5510221a3ee1575e994aacec42d75f7cc6b221\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160491\nReviewed-by: Tom Sepez \u003ctsepez@chromium.org\u003e\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "e2cea87df5105cb7d749595af6ad519d9fb5403a",
      "tree": "78a7ac2477a019d353b814d3027a38b68d608a0f",
      "parents": [
        "59ea54cce0179db3269c4c58874249597ca3b118"
      ],
      "author": {
        "name": "Lei Zhang",
        "email": "thestig@chromium.org",
        "time": "Mon Oct 12 09:56:58 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Oct 12 09:56:58 2026 -0700"
      },
      "message": "Use nullptr instead of FooPtr\u003cT\u003e()\n\nMake it more obvious the code is instantiating a null FooPtr.\n\nChange-Id: Ief54445d91ecc0b90a65009429289455ff1c5bab\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160490\nReviewed-by: Tom Sepez \u003ctsepez@chromium.org\u003e\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "59ea54cce0179db3269c4c58874249597ca3b118",
      "tree": "55b1f4d8ad8ddcddd98a9ec7683683d3b6042851",
      "parents": [
        "bc5820734ee8f94b68fed1093d8e6d7028155814"
      ],
      "author": {
        "name": "pdfium-autoroll@skia-public.iam.gserviceaccount.com",
        "email": "pdfium-autoroll@skia-public.iam.gserviceaccount.com",
        "time": "Sun Oct 11 23:50:04 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Sun Oct 11 23:50:04 2026 -0700"
      },
      "message": "Roll Depot Tools from 36a8df4ad006 to a03dfbf7f2d1 (109 revisions)\n\nhttps://chromium.googlesource.com/chromium/tools/depot_tools.git/+log/36a8df4ad006..a03dfbf7f2d1\n\nIf this roll has caused a breakage, revert this CL and set the roller\nto dry run mode using the controls here:\nhttps://autoroll.skia.org/r/depot-tools-pdfium\nPlease CC andyphan@google.com,thestig@chromium.org on the revert to ensure that a human\nis aware of the problem.\n\nTo report a problem with the AutoRoller itself, please file a bug:\nhttps://issues.skia.org/issues/new?component\u003d1389291\u0026template\u003d1850622\n\nDocumentation for the AutoRoller is here:\nhttps://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md\n\nBug: None\nTbr: andyphan@google.com\nChange-Id: Ie07ffad7a54f33815ef8b32bedca11509f0402af\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160510\nCommit-Queue: pdfium-autoroll@skia-public.iam.gserviceaccount.com \u003cpdfium-autoroll@skia-public.iam.gserviceaccount.com\u003e\nBot-Commit: pdfium-autoroll@skia-public.iam.gserviceaccount.com \u003cpdfium-autoroll@skia-public.iam.gserviceaccount.com\u003e\n"
    },
    {
      "commit": "bc5820734ee8f94b68fed1093d8e6d7028155814",
      "tree": "e0d0a8f3de14ce0cf7e9e9120e621945cbd5eef9",
      "parents": [
        "06fbf69b3a7d13a1faed654e02220806b98623d3"
      ],
      "author": {
        "name": "pdfium-autoroll@skia-public.iam.gserviceaccount.com",
        "email": "pdfium-autoroll@skia-public.iam.gserviceaccount.com",
        "time": "Sun Oct 11 21:56:44 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Sun Oct 11 21:56:44 2026 -0700"
      },
      "message": "Roll Memory Tools from 0732f7097d06 to 3d4610fc0dd4 (3 revisions)\n\nhttps://chromium.googlesource.com/chromium/src/tools/memory.git/+log/0732f7097d06..3d4610fc0dd4\n\nIf this roll has caused a breakage, revert this CL and set the roller\nto dry run mode using the controls here:\nhttps://autoroll.skia.org/r/memory-tools-pdfium\nPlease CC andyphan@google.com,thestig@chromium.org on the revert to ensure that a human\nis aware of the problem.\n\nTo report a problem with the AutoRoller itself, please file a bug:\nhttps://issues.skia.org/issues/new?component\u003d1389291\u0026template\u003d1850622\n\nDocumentation for the AutoRoller is here:\nhttps://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md\n\nBug: None\nTbr: andyphan@google.com\nChange-Id: I1147bf7ff43eba255f2163f10b2000a71c6c6b1d\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160530\nBot-Commit: pdfium-autoroll@skia-public.iam.gserviceaccount.com \u003cpdfium-autoroll@skia-public.iam.gserviceaccount.com\u003e\nCommit-Queue: pdfium-autoroll@skia-public.iam.gserviceaccount.com \u003cpdfium-autoroll@skia-public.iam.gserviceaccount.com\u003e\n"
    },
    {
      "commit": "06fbf69b3a7d13a1faed654e02220806b98623d3",
      "tree": "58f11d99761f7d8b802681408b9530140c5f1eda",
      "parents": [
        "97ab661d8ced24a5eed4c9650d6c42d6a274a88c"
      ],
      "author": {
        "name": "Copybara",
        "email": "no-reply@google.com",
        "time": "Sat Oct 10 14:12:38 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Sat Oct 10 14:12:38 2026 -0700"
      },
      "message": "CPDF_TextPage: Ignore non-finite page objects.\n\nEnsure the rectangle coordinates of page objects are finite before\nprocessing them, avoiding potential issues when clamping and converting\nnon-finite float values to integers. Also reuse the retrieved rectangle\nto avoid redundant calls to GetRect().\n\nFixes UBSan `float-cast-overflow` bug:\n\n```\nCRASH LOG: SUMMARY: UndefinedBehaviorSanitizer: float-cast-overflow\nthird_party/pdfium/HEAD/core/fpdftext/cpdf_textpage.cpp:674:9 (REDACTED)\n```\n\nPiperOrigin-RevId: 995805511\nChange-Id: I1bff4d6a9019bcd337d3707616b1efb6dc893292\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160330\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "97ab661d8ced24a5eed4c9650d6c42d6a274a88c",
      "tree": "b529ad2bbf6ba300c688b4c23c42ba8b505d4c9d",
      "parents": [
        "686814d06630e1684d302d1629580a991e28d3e5"
      ],
      "author": {
        "name": "Jan Wytze Zuidema",
        "email": "jwzuid1999@gmail.com",
        "time": "Sat Oct 10 13:24:28 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Sat Oct 10 13:24:28 2026 -0700"
      },
      "message": "Recognize rectangles with collinear edge points in CFX_Path\n\nGetNormalizedPoints() only drops points that repeat the previous point,\nso a rectangle with an extra vertex in the middle of an edge, such as:\n\n  x1 y1 m\n  x2 y1 l\n  x2 y2 l\n  xm y2 l\n  x1 y2 l\n  h\n\nis not a rectangle to CFX_Path::IsRect() and GetRect(). Some PDF\ngenerators (seen in Amyuni PDF Converter output) clip every image strip\nof a rasterized page with such a page-sized rectangle.\nCFX_AggDeviceDriver::SetClip_PathFill() then rasterizes a full clip mask\nfor each strip instead of intersecting a rectangle. A page with 10,000\nsuch clips takes 9.1 s to render at 200 DPI with pdfium_test, and 0.3 s\nwith this change.\n\nAlso skip a line point that lies strictly between the previous point\nand the next point on a horizontal or vertical line. Removing it does\nnot change the shape of the path, for either fill rule. The \"re\" writers\nalready handle such rectangles since\nhttps://pdfium-review.googlesource.com/160011.\n\nFilled rectangles with such points now take the FillRect() fast path in\nCFX_RenderDevice::DrawPathWithBlend(), just like the same rectangles\nwritten without the extra points. This changes the rendering of the tiny\nrectangles in the 1751_1 corpus test, so also roll DEPS to pick up the\nnew corpus test expectations in\nhttps://pdfium-review.googlesource.com/c/pdfium_tests/+/160230 and\nhttps://pdfium-review.googlesource.com/c/pdfium_tests/+/160270.\n\nBug: 570363704\nChange-Id: I7d0c57c8137331bd1fc4068bfe215e557622012d\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160010\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nReviewed-by: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "686814d06630e1684d302d1629580a991e28d3e5",
      "tree": "7e0eff0a89ae32d894efb476e5162807fd3335b0",
      "parents": [
        "d3321fbc5858db139d2657b92984b3e91cb8eb2f"
      ],
      "author": {
        "name": "Lei Zhang",
        "email": "thestig@chromium.org",
        "time": "Fri Oct 09 21:41:52 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Oct 09 21:41:52 2026 -0700"
      },
      "message": "Avoid integer overflows in FaxG4GetRow()\n\nChange some signed integer math operations to use FX_SAFE_INT32 and\navoid UB.\n\nBug: 570876470\nChange-Id: I9ecc7b1520420424d2d8f7bb5d62dfb967387c3f\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160390\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\nReviewed-by: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "d3321fbc5858db139d2657b92984b3e91cb8eb2f",
      "tree": "de4420ed9f66af88a1aa0936660d5daae6ef12f1",
      "parents": [
        "b4f59421714ffe2d227e64edf15003623e6326b9"
      ],
      "author": {
        "name": "Aryan",
        "email": "aryankrishnan4b@gmail.com",
        "time": "Fri Oct 09 18:21:43 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Oct 09 18:21:43 2026 -0700"
      },
      "message": "Update Brotli config behaviour in library initialization\n\nThis CL updates library initialisation in fpdf_view.cpp to disable\nBrotli when the configuration version is less than 6 or when\nm_BrotliEnabled is not set to true by the embedder.\n\nChange-Id: I9ebe03a91d0f8b7d292cc7d44e98de394b9f57bb\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/158910\nReviewed-by: Tom Sepez \u003ctsepez@chromium.org\u003e\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "b4f59421714ffe2d227e64edf15003623e6326b9",
      "tree": "d28145dd265ab94975ad1ea064a4d7fa091681a8",
      "parents": [
        "f51279699cb59754d1f49aef10eb8e825fe56532"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Fri Oct 09 18:02:15 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Oct 09 18:02:15 2026 -0700"
      },
      "message": "Add test-only DisplayListDeviceDriver and use in EmbedderTest\n\nIntroduce DisplayListDeviceDriver, an implementation of\nRenderDeviceDriverIface for testing that accumulates semantic drawing\ncommands directly into a string display list without pixel\nrasterization. The intent is to avoid needing platform-specific .png\nfiles when some higher level function is all that is being tested.\n\nAdd Render*ToDisplayList methods to EmbedderTest to render pages and\nforms to display lists for semantic verification. Add a test in\nfpdf_view_embeddertest.cpp verifying output on rectangles.pdf.\n\n-- Add --dump flag to pdfium_test.\n-- Retire the fake driver.\n\nChange-Id: Ibc77e853f7fe97bc3d8258f85f11d38144c1869b\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/159394\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "f51279699cb59754d1f49aef10eb8e825fe56532",
      "tree": "5262bde6e919f0b62136d647ac3c568587dcd845",
      "parents": [
        "ceea6879c01d83dd4e924b491549fb71f5d96c92"
      ],
      "author": {
        "name": "Lei Zhang",
        "email": "thestig@chromium.org",
        "time": "Fri Oct 09 17:08:33 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Oct 09 17:08:33 2026 -0700"
      },
      "message": "Avoid nullptr crash in CXFA_FFField::SetEditScrollOffset()\n\nBug: 570068745\nChange-Id: I2aed2f81118f78a47f3266d9275d3c80ebdb5a41\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160430\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\nReviewed-by: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "ceea6879c01d83dd4e924b491549fb71f5d96c92",
      "tree": "aeb2b097c7df670b98cb13cda1326c9f5913c86e",
      "parents": [
        "cf00ae882dcd53f5835b5d8c4d0f673e90d77119"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Fri Oct 09 16:43:35 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Oct 09 16:43:35 2026 -0700"
      },
      "message": "Use ByteString initializer list constructor for simple substitutions\n\nReplace calls to ByteString::Format() that only perform string\nsubstitution with the ByteString constructor taking an initializer\nlist of ByteStringViews.\n\nChange-Id: I3a21c18693df2cacff37d679061c55cb95d081da\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160310\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "cf00ae882dcd53f5835b5d8c4d0f673e90d77119",
      "tree": "b59231c7ff4c0c13ef446273adef593137d40e95",
      "parents": [
        "2b23f4de364ea1df100a90df77fda5f3d57a6f28"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Fri Oct 09 16:36:32 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Oct 09 16:36:32 2026 -0700"
      },
      "message": "Avoid repeated needless scaling loop in CPDF_ScaledRenderBuffer\n\nStop attempting to scale down CPDF_ScaledRenderBuffer dimensions once\nboth width and height reach 1. Subsequent scalings cannot reduce the\ninteger bounds further and cause the loop to spin until floating-point\nunderflow eventually collapses dimensions to 0.0 exactly. Then,\ntermination via CFX_DIBitmap::CalculatePitchAndSize() failure is an\nincidental quirk of its implementation.\n\nChange-Id: I9676e5ffe57ed3fe1aef6309fd1ee32c8517c320\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160410\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "2b23f4de364ea1df100a90df77fda5f3d57a6f28",
      "tree": "8f5ad0d439543e3b5518b21a40f8532cb66d7e93",
      "parents": [
        "e38c84159a9de2a586d623335a8cbaa6a9b0c334"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Fri Oct 09 15:53:31 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Oct 09 15:53:31 2026 -0700"
      },
      "message": "Enforce non-null bitmap in CFX_RenderDevice::AttachSkiaImpl()\n\nThe change at https://pdfium-review.googlesource.com/150952\neliminated two-stage initialization of CFX_RenderDevice and\nrouted FPDF_FFLDrawSkia() to CFX_RenderDevice::CreateForSkiaCanvas().\nConsequently, AttachSkiaImpl() is no longer invoked with a null bitmap\npointer during canvas recording.\n\nReplace the dead null-check in AttachSkiaImpl() with a CHECK(pBitmap),\nmatching AttachAggImpl(). Remove the now-obsolete comments regarding\nnull bitmaps in both AttachSkiaImpl() and AttachAggImpl().\n\nChange-Id: Ib213880b0d231b95b0e13758722f1b549581205b\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160361\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "e38c84159a9de2a586d623335a8cbaa6a9b0c334",
      "tree": "dc027ada02a8498942ed2d3a9bec73fda7ea99e5",
      "parents": [
        "e644f8cba5313005b89c16d83d453151a2c8fad5"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Fri Oct 09 15:50:15 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Oct 09 15:50:15 2026 -0700"
      },
      "message": "Add CFX_RenderDevice::CreateWithDriver()\n\nPrevents CFX_RenderDevice from being a driver/bitmap factory, and\nallow extension for test-only drivers.\n\n-- Add CFX_RenderDevice::CreateWithDriver() static method.\n-- Make GetDeviceDriver() public.\n-- Rewrite CreateForWindowsDC() using CreateWithDriver().\n-- Rewrite CreateForSkiaCanvas() using CreateWithDriver().\n-- Remove CFX_RenderDevice::CreateForNewBitmap*()\n-- C++23: need complete types for defaulted arguments.\n-- Add FakeDeviceDriver for testing.\n\nChange-Id: I4bb2b31519546c92a6bee82ad068ae56717eb5ca\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/159910\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "e644f8cba5313005b89c16d83d453151a2c8fad5",
      "tree": "2120c16f0020995bebfa793a116e7b332f346c4f",
      "parents": [
        "547d3f4ba2a309f059e4d0ccc12490690c1c23c7"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Fri Oct 09 11:52:46 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Oct 09 11:52:46 2026 -0700"
      },
      "message": "Remove group_knockout argument from device class constructors.\n\nFirst step towards simplifying the number of different forms of\ndevice class constructors. Group knockout is fundamentally a piece\nof rendering state - it only matters when blending a new primitive\nonto the canvas. Pass as an argument when needed.\n\nChange-Id: I0e187f79d1f975ece739c0ba788c89dc07e04e1d\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160290\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "547d3f4ba2a309f059e4d0ccc12490690c1c23c7",
      "tree": "0f0793195a5e78cc81736434ef3a4bdcd8594203",
      "parents": [
        "29b3246851e74b3414bdb4c941753ea1bf910b76"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Thu Oct 08 09:57:52 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Oct 08 09:57:52 2026 -0700"
      },
      "message": "Simplify brotli_decodeparms to test one thing and unify golden PNGs\n\nTests should test one thing. In this case, that the Brotli filter\ncorrectly decodes an image stream using DecodeParms predictor\nparameters.\n\nPreviously, brotli_decodeparms.in was derived from bug_1015233.in,\na test originally created to demonstrate a tiling pattern bug.\nConsequently, it included fractional pattern matrices\n([.202488 0 0 -.449947 0 791.999]), subpixel path strokes (0.24 pt),\nand pattern tiling.\n\nThose extraneous rendering operations made the test non-portable. AGG\nand Skia rasterized the patterns and subpixel strokes differently,\ncausing 120,196 out of 120,200 image bytes to diverge. That divergence\nrequired separate brotli_decode_parms_agg.png and\nbrotli_decode_parms_skia.png expectation files.\n\nSimplify brotli_decodeparms.in to render the 4x4 Brotli image directly\nto the page without patterns or strokes. The resulting output is\nbit-for-bit identical between AGG and Skia, allowing replacement of the\nbackend-specific PNGs with a single brotli_decode_parms.png and\nswitching the test to CompareBitmap().\n\nChange-Id: I172f21b04b43494ca3e5d1906ae7a217c6c05a5b\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160090\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "29b3246851e74b3414bdb4c941753ea1bf910b76",
      "tree": "d7bf700f5da4620694ba22b2e484f428610a73e2",
      "parents": [
        "e2a8e09798a3c1fc93236cffba5b03b122671569"
      ],
      "author": {
        "name": "Lei Zhang",
        "email": "thestig@chromium.org",
        "time": "Thu Oct 08 09:55:34 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Oct 08 09:55:34 2026 -0700"
      },
      "message": "Stop using third_party/rust/cxx/v1/cxx.h\n\nJust use third_party/rust/chromium_crates_io/vendor/cxx-v1/include/cxx.h\ndirectly.\n\nBug: 396397336\nChange-Id: Icbc6afb2ff91d7c46fd54da932afa10ef6c47d0f\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/159930\nReviewed-by: Tom Sepez \u003ctsepez@chromium.org\u003e\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "e2a8e09798a3c1fc93236cffba5b03b122671569",
      "tree": "d185f4c3cbad17bc76441cf9934c74168f422a9b",
      "parents": [
        "cd522d62c55430757ce79eedbbebfbf5df18f2f6"
      ],
      "author": {
        "name": "Lei Zhang",
        "email": "thestig@chromium.org",
        "time": "Thu Oct 08 09:40:44 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Oct 08 09:40:44 2026 -0700"
      },
      "message": "Restore implicit public headers in fuzzer impl targets\n\nRevert a tiny portion of https://pdfium-review.googlesource.com/c/160112\nso Chromium can successfully roll PDFium and build the fuzzers.\n\nBug: 556959580\nChange-Id: Ic002f56f0eb5a9fff4d7eebaa2a398fc7d19bde2\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160250\nCommit-Queue: Andy Phan \u003candyphan@chromium.org\u003e\nAuto-Submit: Lei Zhang \u003cthestig@chromium.org\u003e\nReviewed-by: Andy Phan \u003candyphan@chromium.org\u003e\n"
    },
    {
      "commit": "cd522d62c55430757ce79eedbbebfbf5df18f2f6",
      "tree": "95a3e6ee2d39e7550d5ffff4e062697c23d5be34",
      "parents": [
        "94bbf40bd640f658cd9691961992165cac794264"
      ],
      "author": {
        "name": "Lei Zhang",
        "email": "thestig@chromium.org",
        "time": "Thu Oct 08 09:40:17 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Oct 08 09:40:17 2026 -0700"
      },
      "message": "Fix various SyntaxWarnings in DEPS files\n\nAs seen when running buildtools/checkdeps/checkdeps.py.\n\nChange-Id: Icc6fe0267e30706a9f899e181ec70378deddf876\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160132\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\nReviewed-by: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "94bbf40bd640f658cd9691961992165cac794264",
      "tree": "09c602d041182d81b188d1244aea50ffbe99c236",
      "parents": [
        "e0dd7ca096b3a64bbc6b7e68ffd8f20c5fdcc24a"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Thu Oct 08 08:49:33 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Oct 08 08:49:33 2026 -0700"
      },
      "message": "Tidy conditional options in pdfium_test.cc\n\nAvoid hitting a check when initializing a library by providing the\ncorrect default based upon what is linked into the binary.\n\nDo the same for the embedder_test_environment.cc.\n\n-- No need to provide designated-initializer for 0s.\n\nChange-Id: I82745b19cc8c8e7b5b058cd2aee1338be44fb3af\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160131\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "e0dd7ca096b3a64bbc6b7e68ffd8f20c5fdcc24a",
      "tree": "8cd85327e95cf5c21c877766f7b33bf09854e206",
      "parents": [
        "71b984c3f64b616c5b9ea935f21fc3efad9b75bf"
      ],
      "author": {
        "name": "xonaman",
        "email": "xonaman738@gmail.com",
        "time": "Thu Oct 08 08:46:34 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Oct 08 08:46:34 2026 -0700"
      },
      "message": "Dereference old-style named destinations in FPDF_GetNamedDest()\n\nFPDF_CountNamedDests() counts every key in the catalog\u0027s old-style\n/Dests dictionary, and FPDF_GetNamedDest() falls back to that dictionary\nfor indices past the /Dests name tree. The fallback used the raw\ndictionary value, so when the value was an indirect reference, which is\nvalid PDF, it was neither an array nor a dictionary. FPDF_GetNamedDest()\nthen returned nullptr without reporting the name, and a document could\nreport named destinations that it could not return by index.\n\nAll other named destination lookups already dereference the value: the\n/Dests name tree lookups by name and by index, and the old-style lookup\nby name. As a result, FPDF_GetNamedDestByName() found indirect old-style\ndestinations that FPDF_GetNamedDest() dropped.\n\nDereference only the value of the matching key, so that the loop does\nnot parse the objects behind the keys it walks past. Direct values are\nunaffected, and a dangling reference resolves to nothing, so\nFPDF_GetNamedDest() returns nullptr for it.\n\nAdd a named_dests_old_style_indirect.pdf fixture whose old-style /Dests\nvalues are all indirect: a destination array, a destination dictionary\nwith a /D array, and a dangling reference. The new embedder test checks\nthat FPDF_GetNamedDest() returns the same destinations as\nFPDF_GetNamedDestByName() along with their names, that those\ndestinations are for the expected pages, and that the dangling entry\ngives neither a destination nor a name.\n\nAn alternative would be to expose GetNamedDestFromObject() from\ncpdf_nametree.cpp through a new CPDF_NameTree static for the old-style\nlookup by index. This change keeps the fix local instead.\n\nFound while working on the pdfium-native Node.js binding.\n\nChange-Id: I380f9b07dbe1bbc680e3c5ae4a21f161a1d554fa\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/159090\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nReviewed-by: Tom Sepez \u003ctsepez@chromium.org\u003e\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "71b984c3f64b616c5b9ea935f21fc3efad9b75bf",
      "tree": "d2b98571592d4b3b52bf7b29de13f4af92e50b23",
      "parents": [
        "8d804d1424af0598d1aba3d085354689f709cb08"
      ],
      "author": {
        "name": "Lei Zhang",
        "email": "thestig@chromium.org",
        "time": "Thu Oct 08 08:42:35 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Oct 08 08:42:35 2026 -0700"
      },
      "message": "Adjust some code that involves PDF_USE_AGG\n\n- In core/fxge, mark code as NOTREACHED() for the case when AGG is\n  disabled at build time, yet somehow Skia is not available.\n- Compile FPDFViewEmbedderTest.Bug2087 only for builds that have both\n  AGG and Skia. Otherwise the test does not make sense to run.\n\nChange-Id: If0f93635ca1a2859db4065e0c3740e4d092ac4d6\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160190\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\nReviewed-by: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "8d804d1424af0598d1aba3d085354689f709cb08",
      "tree": "ba0d37be07af4ad946f592ae47c59a55d7c53a3e",
      "parents": [
        "fd884274a279e30e33fb1201167a33029ddebd28"
      ],
      "author": {
        "name": "Matt Stark",
        "email": "msta@google.com",
        "time": "Wed Oct 07 17:42:33 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Oct 07 17:42:33 2026 -0700"
      },
      "message": "Fix check_includes_strict violations in pdfium.\n\nNote: public_deps should now be used iff a public header includes the\ndependency. This is because public_deps no longer exposes headers from\ndependencies, so the advice to avoid public_deps is no longer relevant.\n\nThis is a part of the LSC https://docs.google.com/document/d/1zYUC_zuFrZozo9ogFHcf0Rzkiw9W7RVnaY-1fzfQ0AM/edit?tab\u003dt.0\n\nBug: 556959580\nChange-Id: Id9954ce4c8685204030e22a7a23891eb6a6a6964\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160112\nAuto-Submit: Matt Stark \u003cmsta@google.com\u003e\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "fd884274a279e30e33fb1201167a33029ddebd28",
      "tree": "b5427a23394ecd0ca97798d0caf6cd23c39daf5e",
      "parents": [
        "f5ec36c8272fac4854433b0f93398582c9a35095"
      ],
      "author": {
        "name": "Frank Barchard",
        "email": "fbarchard@google.com",
        "time": "Wed Oct 07 17:31:01 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Oct 07 17:31:01 2026 -0700"
      },
      "message": "Speed up PngPredictLine for Paeth and Average\n\nSimplify PaethPredictor() algebraically (pa \u003d abs(b - c),\npb \u003d abs(a - c), pc \u003d abs((a - c) + (b - c))) and use branchless\nconditional selection.\n\nExtend the per-pixel register-carry fast path (previously used only for\n3- and 4-byte Sub rows) to Bpp \u003d 1, 2, 3, and 4 across Sub, Average,\nand Paeth rows, and reuse PredictSubRow() on the first row of Paeth.\nCarrying the running left and upper_left pixel state in local registers\neliminates per-byte store-to-load forwarding stalls on\ndest_span[i - bpp], redundant loads of last_span[i - bpp], and per-byte\nspan bounds checks via fxcrt::Zip().\n\nOn a 2048x200 image, PngPredictLine() with Paeth is 3.72x faster for\n4-Bpp (5911.4 us -\u003e 1588.9 us) and 2.33x faster for 3-Bpp (5553.3 us -\u003e\n2386.0 us), while remaining bit-exact for all filter tags and inputs.\n\nBug: 549230311\nChange-Id: I45ed513938044b868cb7ef526706948501b567ca\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160071\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "f5ec36c8272fac4854433b0f93398582c9a35095",
      "tree": "d2195b6595172371e865d6361a6d20f2ba3476c7",
      "parents": [
        "efe339c7c307bdbad2eb962f1059cbaaa3478804"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Wed Oct 07 17:02:29 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Oct 07 17:02:29 2026 -0700"
      },
      "message": "Introduce CalculateSSIM and output metrics in image_diff\n\nThis CL implements CalculateSSIM in pixel_diff_util, modifies\nimage_diff.cpp to output mean_ssim and min_window_ssim, and\nupdates pngdiffer.py to parse them without taking any new action.\n\nEventually, these can be used to provide another sanity check\non Fontations/Skia results that would have large MSE issues\notherwise and would have to their diffs ignored for the moment.\n\nA short-circuit is provided in image_diff.cpp to avoid SSIM calculation\nif the images are exactly identical.\n\nChange-Id: I40e1e4e9b2cbc3b9f8862fdae5820d846b076e05\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160150\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "efe339c7c307bdbad2eb962f1059cbaaa3478804",
      "tree": "fc6ec40147d7a38a98d7ad9328d119d071fa6980",
      "parents": [
        "f0672807c5f31d09cb4e1c58416f2537d9039236"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Wed Oct 07 14:35:20 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Oct 07 14:35:20 2026 -0700"
      },
      "message": "Clean up PDF_ENABLE_SKIA and PDF_USE_XFA macros\n\nUnify macro usage to follow the convention where USE_ is for backend\nchoices (e.g., Skia) and ENABLE_ is for additive features (e.g., XFA).\n\n- Remove PDF_USE_XFA from public/fpdfview.h as it was redundant\n  with PDF_ENABLE_XFA and is unused throughout the chromium codebase.\n- Replace PDF_ENABLE_SKIA with PDF_USE_SKIA in the testing directory\n  and BUILD.gn, as this was one oddball usage.\n- Remove redundant #define block for PDF_USE_SKIA in pdfium_test.cc.\n- More accurately name pdfium_test_config.\n\nChange-Id: I1de149cd743bd24b1cb99d493e199524d9655144\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160170\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "f0672807c5f31d09cb4e1c58416f2537d9039236",
      "tree": "a837182a7f4da14f81c92562adb69d5aa236b277",
      "parents": [
        "00a936084c7872bb970d442eef837209a290374f"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Wed Oct 07 13:50:07 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Oct 07 13:50:07 2026 -0700"
      },
      "message": "Add third_party/libyuv to .gitignore.\n\nThis is now being DEPS\u0027d into the tree.\n\nChange-Id: I3941eef2036970beaf39ab5f5b30db33c48f1b13\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160130\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\nAuto-Submit: Tom Sepez \u003ctsepez@chromium.org\u003e\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    }
  ],
  "next": "00a936084c7872bb970d442eef837209a290374f"
}
