)]}'
{
  "log": [
    {
      "commit": "7dfadb98db46d2d8a6d30d45eea8fd56dfe8c650",
      "tree": "0226edefa27ee8aee5a00a4661346efc2f9b0498",
      "parents": [
        "554fa4412c5e471c017b690de3b5ea775866f8aa"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Tue Sep 22 15:43:26 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Sep 22 15:43:26 2026 -0700"
      },
      "message": "Add Fontations glyph rendering pipeline using Skrifa hinted outlines\n\nIntegrate Skrifa outline extraction and TrueType bytecode hinting\ninto CFX_Face::RenderGlyph(). When the Fontations backend is enabled,\nquery Skrifa for hinted TrueType outlines (or scaled outlines as\nfallback), convert the resulting path verbs and coordinates into an\nFT_Outline, and rasterize via FT_Render_Glyph(). Also implement\nCFX_Face::LoadGlyphPath() via Skrifa unscaled outlines.\n\nUpdate testing harnesses to support Fontations/Skrifa execution flags,\ncombine caller diff options with Fontations antialiasing tolerances,\nand add suppressions for known subpixel rendering discrepancies.\n\nTAG\u003dagy\nCONV\u003ddb6cb163-190b-47d4-bbdc-b519626ce208\n\nBug: 42271123\nChange-Id: I9934502347aa7b433ed32310d2ae811b09a3bb5e\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/156170\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "554fa4412c5e471c017b690de3b5ea775866f8aa",
      "tree": "2a934cb2ad46cb067d209575b9830c9a72532bd7",
      "parents": [
        "f36ba935e7bc8b45aa325961fecac9cf9d90cdf5"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Tue Sep 22 14:51:29 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Sep 22 14:51:29 2026 -0700"
      },
      "message": "Premultiply alpha when comparing BGRA bitmaps in EmbedderTest\n\nMake PreMultiplyColor() and UnPreMultiplyColor() in fx_dib.h available\nunconditionally without PDF_USE_SKIA guards.\n\nIntroduce CompareBGRABitmapToPng() in EmbedderTest to premultiply both\nactual and expected pixels prior to comparison. This prevents false\npositive diffs in transparent or near-transparent pixels where\nunweighted color differences exceed tolerance.\n\nChange-Id: Ic5f2099d1469e18970d2885c4ce2cbff5155f5d4\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/158590\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "f36ba935e7bc8b45aa325961fecac9cf9d90cdf5",
      "tree": "f8088cf51213456a81d642f6833df5a6cdfd4c0e",
      "parents": [
        "da9d8c430b119024bc7c9d767417a5fa23c8345f"
      ],
      "author": {
        "name": "Nico Weber",
        "email": "thakis@chromium.org",
        "time": "Tue Sep 22 12:55:49 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Sep 22 12:55:49 2026 -0700"
      },
      "message": "Add and use fxcrt::CeilDiv()\n\nMostly no behavior change: CeilDiv replaces `(a + n - 1) / n`\nexpressions, but uses an implementation that won\u0027t overflow. So for\nthese expressions that used CheckedNumeric, this now overflow only if\n`a` is `n - 1` bigger. Due to the slightly later overflow, update\nsome boundaries in test, and one fuzz input now renders one scanline\ninstead of nothing.\n\nBug: none\nChange-Id: I7c5539199adba8b15d3d039ffa270c4444447790\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/158110\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Nico Weber \u003cthakis@chromium.org\u003e\nReviewed-by: Nico Weber \u003cthakis@google.com\u003e\n"
    },
    {
      "commit": "da9d8c430b119024bc7c9d767417a5fa23c8345f",
      "tree": "ce55ffb14ce78c2b71f46c8dafa6bd81aed36df3",
      "parents": [
        "716607c75fdc922dfb8bb6ac8398f9d1049c8700"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Tue Sep 22 10:18:19 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Sep 22 10:18:19 2026 -0700"
      },
      "message": "Fix form fill environment lifecycle crashes in XFA\n\nRe-create CXFA_FFApp on CPDFXFA_Context when re-initializing a form fill\nenvironment after one has already been shut down.\n\nDo not re-install object definitions into CFXJS_PerIsolateData when\ninitializing CJS_Runtime on an isolate that already has definitions\ninstalled.\n\nTear down CXFA_Document layout data before invoking\nCPDFSDK_FormFillEnvironment::OnDocumentClosing(), and have\nOnDocumentClosing() reset ijs_runtime_ so CJS_Runtime and its V8\ncontext are released before the isolate is destroyed.\n\nRemove DISABLED_ from CPDFXFAFormFillEnvEmbedderTest tests and add\nper-document isolate test cases.\n\nFixed: 563426171\nChange-Id: I808d8a72b2461dac79875b75405c9202dc22feb1\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/158410\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "716607c75fdc922dfb8bb6ac8398f9d1049c8700",
      "tree": "bdb62731be1cd8a8328a3b6367b214f3788449b2",
      "parents": [
        "e66f9000ee3e6ab7f2a887b977c4a8973260d9ae"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Tue Sep 22 09:53:05 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Sep 22 09:53:05 2026 -0700"
      },
      "message": "Add find_performance_steps.py to detect CI performance step functions\n\nIntroduce testing/tools/find_performance_steps.py to detect persistent\nperformance step functions (both regressions and improvements) across\nPDFium CI builders.\n\nThe tool queries historical builds using Buildbucket and ResultDB,\naggregates test suite durations, and detects shifts that persist for at\nleast two future runs. For each detected step function, individual\nculprit tests are extracted and ranked.\n\nChange-Id: I98e91d732d01dfc7b0f1fdda579fc9d87ea85ecc\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/158570\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "e66f9000ee3e6ab7f2a887b977c4a8973260d9ae",
      "tree": "6254ad827fd04daac03f2bee62b904771f248937",
      "parents": [
        "43b6ec25c28697125da16d78a10b1dbd00e28432"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Mon Sep 21 21:19:57 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Sep 21 21:19:57 2026 -0700"
      },
      "message": "Narrow GDI diff suppressions to gdi_skia for surprise passes\n\nTests that unexpectedly passed on win_xfa_gdi still fail image diff on\nwin_xfa_skia_gdi. Narrow their rendering column from gdi to gdi_skia.\n\nThis allows win_xfa_gdi to compare against expected images while keeping\nthe diff suppression in place for win_xfa_skia_gdi.\n\nDifferentiate the GDI rendering option into gdi_agg and gdi_skia based\non whether the SKIA feature is present. In column 4 of the suppression\nfiles, gdi serves as an umbrella shorthand that matches both gdi_agg\nand gdi_skia, mirroring how mac in column 1 matches both mac_arm and\nmac_x86.\n\nSpecific subtypes gdi_agg and gdi_skia can now be used when a test\nneeds to be suppressed only on one GDI backend (e.g. win_xfa_gdi or\nwin_xfa_skia_gdi).\n\nThere should no longer be any surprise matches after this CL.\n\nChange-Id: Ica14f73691b1fc08d74186eaf409269a7aa9c5a1\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/158471\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "43b6ec25c28697125da16d78a10b1dbd00e28432",
      "tree": "02c1e0caef99594703876dd01d85b9333070c15f",
      "parents": [
        "c1092013df310d4ac3f741256bffc96cb3719518"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Mon Sep 21 21:13:20 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Sep 21 21:13:20 2026 -0700"
      },
      "message": "Remove stale mac_x86 Skia diff suppressions\n\nThree corpus tests (annotation_strikeout_opacity.pdf, example_042.pdf,\nand xfermodes3.pdf) now render identically on the mac_xfa_skia_rust_x86\nbuilder, producing unexpected successes when suppressed with diff.\n\nRemoving the mac_x86 skia diff rules allows these tests to be compared\nproperly on mac_x86. Verification across all 60 test builds confirms\nthat no other platform was formerly suppressed by these mac_x86-specific\nrules.\n\nChange-Id: Id2a04cc39e3ab744523e92d904d5e03d63a9f0d1\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/158470\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "c1092013df310d4ac3f741256bffc96cb3719518",
      "tree": "c29d93e310ec446696541dfc430129dd65fc880c",
      "parents": [
        "c2dfc74bf998759ff5709017876e3832afe1ed2d"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Mon Sep 21 19:55:23 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Sep 21 19:55:23 2026 -0700"
      },
      "message": "Improve test runner suppression handling and failure reporting\n\nA suppression is intended to excuse rendered output that does not match\nexpectations. Previously, HandleResult() rewrote any non-pass status to\nSKIP whenever a test was result-suppressed, masking segmentation\nfaults, ASan reports, CHECK failures, and timeouts. Conversely, a\nsuppressed test that passed was posted to ResultDB with status \"abort\"\n(via result_types.UNKNOWN), causing the Milo build indicator to flap\nyellow mid-run. Real timeouts also map to \"abort\", causing LUCI Analysis\nto cluster sub-second passes as timeouts.\n\nIn addition, subprocess.run() does not collect output when re-raising\nTimeoutExpired on POSIX. Decoding the resulting None stdout/stderr\nraised AttributeError in worker processes and aborted the entire run.\n\nThis change cleans up suppression and failure reporting across the test\nharness:\n\n1. Record comparison_failure on test results, and restrict suppressions\n   to only excuse output mismatches via IsSuppressible(). A crash or\n   execution failure is now reported even if output was produced.\n2. Add a \"skip\" action to column 6 of testing/SUPPRESSIONS so tests\n   expected to crash are skipped rather than run.\n3. Report suppressed results (both passes and mismatches) to ResultDB\n   as SKIP to prevent spurious build indicators, while attaching a\n   pdfium_suppression tag for unexpected successes.\n4. Default missing captured output on timeout to empty bytes before\n   decoding, allowing timed-out tests to be recorded without aborting\n   the run.\n\nSince the indicators will no longer flicker yellow, add a script to\nquery the result db for this information to be run manually as desired.\n\nTAG\u003dagy\nCONV\u003dcb006656-4ac4-4ff7-9705-478ba4c6a291\nChange-Id: I398fd6273b77b20c658b2a1bc60388f1901c1321\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/158192\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "c2dfc74bf998759ff5709017876e3832afe1ed2d",
      "tree": "92fa3334f946ba7d23abbf2c42afe435d1adbd8c",
      "parents": [
        "b60996c4a2521d73cae763a862bc0de3d4029c8e"
      ],
      "author": {
        "name": "pdfium-autoroll@skia-public.iam.gserviceaccount.com",
        "email": "pdfium-autoroll@skia-public.iam.gserviceaccount.com",
        "time": "Sun Sep 20 22:17:23 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Sun Sep 20 22:17:23 2026 -0700"
      },
      "message": "Roll goldctl from c7c91b4c709a to 63df9e9df52e\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 akall@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: akall@google.com\nChange-Id: Ifa025b764198e2b13b40cfbc980f313dea11d917\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/158510\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": "b60996c4a2521d73cae763a862bc0de3d4029c8e",
      "tree": "698a3a46d0207d27becda0e255d7fd0380302731",
      "parents": [
        "4a9b3d668e1ac05625b6576c0c1862e12cbe2ed4"
      ],
      "author": {
        "name": "pdfium-autoroll@skia-public.iam.gserviceaccount.com",
        "email": "pdfium-autoroll@skia-public.iam.gserviceaccount.com",
        "time": "Sun Sep 20 22:00:16 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Sun Sep 20 22:00:16 2026 -0700"
      },
      "message": "Roll Instrumented Libraries from d15c278eed5d to 423262e4438b (2 revisions)\n\nhttps://chromium.googlesource.com/chromium/third_party/instrumented_libraries.git/+log/d15c278eed5d..423262e4438b\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 akall@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: akall@google.com\nChange-Id: I8566d2794ef747225909b35a4d3524725d826935\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/158530\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": "4a9b3d668e1ac05625b6576c0c1862e12cbe2ed4",
      "tree": "f953bfc9c64de6fdbc3e3fea9c12c053f3af28cb",
      "parents": [
        "3f30d5dca87d120a853f3fc8d42945ffdaf601dc"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Sat Sep 19 09:09:54 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Sat Sep 19 09:09:54 2026 -0700"
      },
      "message": "Run XFA embedder tests in isolate-per-document mode\n\nConfigure JSEmbedderTest to support switching between shared\nisolate mode (for non-XFA tests) and isolate-per-document mode (for XFA\ntests). In XFAJSEmbedderTest, dynamically query the document\u0027s isolate\nwhen open, falling back to the global test isolate otherwise.\n\nTAG\u003dagy\nCONV\u003dcddd51c4-8efc-4ad4-b0cf-377b846e0dcf\n\nBug: 531975357\nChange-Id: I0c6c60be9587fbc3bc1c2ce5bc19e170b4548303\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/157351\nReviewed-by: Andy Phan \u003candyphan@chromium.org\u003e\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "3f30d5dca87d120a853f3fc8d42945ffdaf601dc",
      "tree": "7b673a68bae37ea2347ef4c488c4c22fea52d668",
      "parents": [
        "1442e4fe069f058b19e7fd74fe154fee3c37d344"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Fri Sep 18 17:32:26 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Sep 18 17:32:26 2026 -0700"
      },
      "message": "Enable isolate-per-document mode in pdfium_test when XFA is enabled\n\nConfigure FPDF_LIBRARY_CONFIG with m_IsolatePerDocument set to true in\npdfium_test when XFA is enabled and JavaScript is not disabled.\n\nTAG\u003dagy\nCONV\u003dcddd51c4-8efc-4ad4-b0cf-377b846e0dcf\n\nBug: 531975357\nChange-Id: Ie959d9275057f8673da92154e27c40ce241deaa6\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/157254\nReviewed-by: Andy Phan \u003candyphan@chromium.org\u003e\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "1442e4fe069f058b19e7fd74fe154fee3c37d344",
      "tree": "77b0c062bd860ed8869d7554d4cf1e49934cbba0",
      "parents": [
        "d793a0ddc1d875461661bcec939d35648e90e7f6"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Fri Sep 18 16: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 Sep 18 16:50:15 2026 -0700"
      },
      "message": "Add disabled embeddertests for form fill environment lifecycle crashes\n\nConsecutive FPDFDOC_InitFormFillEnvironment calls on an XFA document\ncause a null pointer dereference in CXFA_FFApp::GetHeap(), and closing\nan FPDF_DOCUMENT before exiting its form fill environment causes a\nheap-use-after-free in CPDFSDK_FormFillEnvironment.\n\nNeither of these are reachable without a misbehaving embedder.\n\nBug: 563426171\nChange-Id: I6e5669e1ee8ae23158ba0d60a60d9ea062d3f4e0\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/158390\nReviewed-by: Andy Phan \u003candyphan@chromium.org\u003e\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "d793a0ddc1d875461661bcec939d35648e90e7f6",
      "tree": "a9b343b7039f710098cbdaaa4a8c2e5a676db93c",
      "parents": [
        "a5e00c61c8bd3a4d468f5331ad1bd13df3db2e5f"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Fri Sep 18 15:07:02 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Sep 18 15:07:02 2026 -0700"
      },
      "message": "Create a per-document v8::Isolate for XFA documents\n\nWhen FPDF_LIBRARY_CONFIG requests it, CPDFXFA_Context now owns a\nv8::Isolate with an attached CppHeap, and the XFA garbage collected\nheap rides on that CppHeap rather than on a standalone cppgc::Heap.\nCJS_Runtime picks the isolate up from the form fill environment.\n\nTeardown is order sensitive: garbage collected objects hold an\nUnownedPtr back to the FXGC_Heap, so the wrapper must outlive the\nisolate that owns the CppHeap. The external V8 pointers it holds are\ntherefore excluded from dangling pointer detection.\n\nPer-isolate data can no longer be freed when the last engine on the\nisolate goes away, since the isolate itself may outlive it, so\ndisposing the isolate releases it instead.\n\nTAG\u003dagy\nCONV\u003de9f2854c-dfc6-47a5-a99e-56b61291357a\n\nBug: 531975357\nChange-Id: If8f94a9041ebf603006a6d8d8414ac0ed4e10254\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/157610\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "a5e00c61c8bd3a4d468f5331ad1bd13df3db2e5f",
      "tree": "cd4e4a995cd12289184135b82d27701fb336ccd9",
      "parents": [
        "1d3371aa4e3bf95a727e6703192b9c9b169bb52a"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Fri Sep 18 11:42:48 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Sep 18 11:42:48 2026 -0700"
      },
      "message": "Remove the pdfium_diff --fuzzy option and its tolerance parameters\n\nWith pngdiffer deciding every image comparison from the measurements\nprinted by --metrics, the tolerance machinery inside pdfium_diff has\nno remaining caller. Delete the --fuzzy flag, the parsing of its\noptional delta, mse and win_mse fields, and the four tolerance\nparameters threaded through PixelsDifferent() and CompareImages().\nA pixel now counts as different if it differs at all.\n\nDrop the shadow validation in pngdiffer along with the c_result field\nit compared against. The check has served its purpose, and without\ntolerances in C++ a fuzzy-matched test would report a Python pass\nagainst a C++ failure on every run.\n\nThe fuzzy limits themselves are unchanged. pngdiffer still parses the\nfuzzy\u003d suppression token, and the C++ embedder tests still take the\nlimits from kFuzzyDiffOptions in testing/utils/pixel_diff_util.h.\n\nAlso report win_mse in the fuzzy failure reason, since it can be the\nsole cause of a failure and the Python verdict is now the only one.\n\nTAG\u003dagy\nCONV\u003dcb006656-4ac4-4ff7-9705-478ba4c6a291\n\nChange-Id: I8effaad520fc88d0537219c831bc4d335874a178\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/158191\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "1d3371aa4e3bf95a727e6703192b9c9b169bb52a",
      "tree": "75cab31d7d5674d6f2e4aa1d4ed7fd55d3127598",
      "parents": [
        "b79f4d5187ebe92acb89a521b2a6000afa1e565a"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Fri Sep 18 10:51:42 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Sep 18 10:51:42 2026 -0700"
      },
      "message": "Remove the pdfium_diff --metrics parity check\n\nHaving established equivalence in the prior CL on the bots, remove the\nextra invocation. The --fuzzy flag still remains.\n\nTAG\u003dagy\nCONV\u003dcb006656-4ac4-4ff7-9705-478ba4c6a291\n\nChange-Id: Ifde72eec58e8ea1a1d7a0da9686918572f0d236d\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/158210\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "b79f4d5187ebe92acb89a521b2a6000afa1e565a",
      "tree": "8ccee6405679a753c3fc0691dc2d488ec42afdc9",
      "parents": [
        "bb1f9f71e7b15afdd5937adf8cfe5807522b882f"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Fri Sep 18 10:10:39 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Sep 18 10:10:39 2026 -0700"
      },
      "message": "Add --metrics mode to pdfium_diff and shadow-validate in pngdiffer\n\nIntroduce a --metrics flag that prints a machine-readable line of\nmeasurements for a comparison.\n\nUnder --metrics, that verdict is reported in the output rather than\nthrough the exit code, which then indicates only whether the\ncomparison could be performed at all.\n\nHave pngdiffer.py request --metrics, and assert that its decision\nagrees with the one from a --fuzzy run.\n\nSuppress two GDI cases that were silently ignored by the old code\nsince the new test harness is stricter about missing actual files.\n\n-- Return values for --histogram now on parity with --metrics.\n-- Replace the single sscanf() parsing.\n-- Unlink any stale diff image before --subtract.\n-- Images from --diff and --subtract now span the union of the two\n   image sizes, with the region outside the overlap filled red.\n\nTAG\u003dagy\nCONV\u003dcb006656-4ac4-4ff7-9705-478ba4c6a291\n\nChange-Id: Ib38e411f6306c519f380c040f285da128512109a\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/158190\nReviewed-by: Andy Phan \u003candyphan@chromium.org\u003e\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "bb1f9f71e7b15afdd5937adf8cfe5807522b882f",
      "tree": "afe8722ec26255ce941abf4eb9d359c4a323f25c",
      "parents": [
        "fc46361ce75055cd549cb938fae5d6a3fe3a1a05"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Thu Sep 17 20:01:38 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Sep 17 20:01:38 2026 -0700"
      },
      "message": "Remove stale suppressions format_custom_format.pdf\n\nformat_custom_format.pdf fails only on AGG when JavaScript is disabled\nbecause the absence of JavaScript prevents appearance regeneration,\nfalling back to a pre-baked 2012 appearance stream whose sub-pixel font\npositioning differs by a few anti-aliased edge pixels under AGG\u0027s\nscanline rasterizer.\n\nresolve_nodes_1.pdf is still wrong relative to other readers, so\nprovide a correct expectations showing the difference.\n\nbug_679643.in no longer exists.\n\nTAG\u003dagy\nCONV\u003d4b3dbb90-71fc-4f70-ab7d-9ba40b3b6cc2\n\nChange-Id: I56e29fdaec9997b108ffb253ba9b085d4e37eb4c\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/157932\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "fc46361ce75055cd549cb938fae5d6a3fe3a1a05",
      "tree": "d8a0dc23abd3e92213c7b613a5b8c6304f6dea2e",
      "parents": [
        "221fc40e5868f4c136179d40a10e8fc75deb6889"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Thu Sep 17 18:46:22 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Sep 17 18:46:22 2026 -0700"
      },
      "message": "Remove core/fxge dependency from core/fxcrt/css\n\ncore/fxcrt is the lowest-level foundation layer, but its css/\nsubcomponent previously depended on core/fxge solely for the\nFX_ARGB type alias and ArgbEncode() helper in core/fxge/dib/fx_dib.h.\n\nUse a local equivalent instead and break the dependence. This avoids\ndragging in fx_dib.h across several compilation units.\n\nTAG\u003dagy\nCONV\u003d1827ad5a-75b4-4315-a226-f6b7baa3ec5e\n\nChange-Id: Ie46cd75fc82848afd2f6d473dd5cfb4593732d23\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/157911\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\nAuto-Submit: Tom Sepez \u003ctsepez@chromium.org\u003e\nReviewed-by: Andy Phan \u003candyphan@chromium.org\u003e\n"
    },
    {
      "commit": "221fc40e5868f4c136179d40a10e8fc75deb6889",
      "tree": "e78eae74777b979e0a40848f4d07abd3ccbfb6fc",
      "parents": [
        "3dd328a6b34ce669d4122443109284956313a4ab"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Thu Sep 17 18:16:51 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Sep 17 18:16:51 2026 -0700"
      },
      "message": "Look up the JS runtime in CFXJSE_Engine rather than caching it\n\nThis is unfortunate from a lifetime perspective: the runtime belongs to\nthe form fill environment and can be destroyed before the document; the\nengine belongs to CXFA_Document on the cppgc heap.\n\nCaching is currently ok because SetFormFillEnv() cleans up when the\nenvironment is destructed. Remove that and it dangles.\n\nInstead, fetch it through the form fill environment, as three other\ncallers do. Those callers also are converted to AsCJSRuntime() from\nstatic_cast\u003c\u003e as a defensive meausre.\n\nChange-Id: I2242ad99f0c2882e4ffb50b2061a26bf627482ef\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/158331\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "3dd328a6b34ce669d4122443109284956313a4ab",
      "tree": "2b04c8a5157b350685c1b7a04fec1c12f8568d83",
      "parents": [
        "48af8b61057256b50cfdb4eae55b9b050924b48f"
      ],
      "author": {
        "name": "Lei Zhang",
        "email": "thestig@chromium.org",
        "time": "Thu Sep 17 17:47:54 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Sep 17 17:47:54 2026 -0700"
      },
      "message": "Delete duplicate test expectations in testing/resources\n\nRemove redundant expectation PNG files that are identical to other\nexpectations within the same fallback chain.\n\nTAG\u003dagy\nCONV\u003d555e3297-d470-4fd2-9ec0-82025ed7db87\n\nChange-Id: I531be95919502fbb73f119b2259918fdc9e7c30f\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/156930\nReviewed-by: Tom Sepez \u003ctsepez@chromium.org\u003e\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "48af8b61057256b50cfdb4eae55b9b050924b48f",
      "tree": "c4d6ef89bb33fd77329da7335854f84fc27c14bd",
      "parents": [
        "67e899575690dd52875592e0b3e09bff89cdaa56"
      ],
      "author": {
        "name": "Lei Zhang",
        "email": "thestig@chromium.org",
        "time": "Thu Sep 17 17:29:38 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Sep 17 17:29:38 2026 -0700"
      },
      "message": "Fix JS triggered on load bypassing user gesture requirement\n\nDelete CPDFSDK_InteractiveForm::OnKeyStrokeCommit() to fix a bug where\nJS runs on load and bypasses the user gesture requirement:\n\n- JS can eventually trigger this method. This method then runs an\n  additional action that should only trigger based on key strokes.\n  This confuses the fxjs code, which thinks key strokes triggered JS\n  calls, which satisfies the user gesture requirement, even though there\n  is no user input event.\n- Additional action for key strokes is already handled elsewhere, so\n  this method is just doing extra work to cause bugs. Delete it. Then\n  update the expectations for the textbox_on_load.in JS test.\n\nBug: 494352583\nChange-Id: Ic6e79ead2acf9de8c91a48f4ab08b49fa11e3a43\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/158330\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\nReviewed-by: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "67e899575690dd52875592e0b3e09bff89cdaa56",
      "tree": "2c4a9958004ae44f166a3b182fb0667c2941bc95",
      "parents": [
        "17cf94b52e01507108da6460ebca6b48995a698e"
      ],
      "author": {
        "name": "Lei Zhang",
        "email": "thestig@chromium.org",
        "time": "Thu Sep 17 16:51:48 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Sep 17 16:51:48 2026 -0700"
      },
      "message": "Add some JavaScript tests for textboxes\n\n- textbox_keyboard_event.in / textbox_keyboard_event.evt: Should trigger\n  JS due to the keyboard event.\n- textbox_keyboard_no_event.in: Should not trigger JS due to the lack of\n  keyboard events.\n- textbox_on_load.in: Should not trigger JS due to the lack of keyboard\n  events, but actually does.\n\nInputs based on AI-suggestions attached to the bug report.\n\nBug: 494352583\nChange-Id: Ifad2e9c232d50e924da79bfd1cddfd6c032e59e8\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/158310\nReviewed-by: Tom Sepez \u003ctsepez@chromium.org\u003e\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "17cf94b52e01507108da6460ebca6b48995a698e",
      "tree": "aced474b9c6f42a43b76286a2d77d44533c96b17",
      "parents": [
        "3e9b2c24c3c35c17ad887f6b415e04163d97ae3c"
      ],
      "author": {
        "name": "Lei Zhang",
        "email": "thestig@chromium.org",
        "time": "Thu Sep 17 16:25:20 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Sep 17 16:25:20 2026 -0700"
      },
      "message": "Revert \"Fix mixed-direction line extraction\"\n\nThis reverts commit 17c6d8dae85dc4e2e76660d46e106f5af1283e1c.\n\nThen update FPDFTextEmbedderTest.Arabic so it passes to show the\nregression has been fixed.\n\nReason for revert: Caused a regression: crbug.com/561066233\n\nOriginal change\u0027s description:\n\u003e Fix mixed-direction line extraction\n\u003e\n\u003e Disable automatic whole-line Bidi segment reversal for text extraction,\n\u003e preserving the original logical ordering of text segments on the page to\n\u003e match Acrobat behavior and prevent semantic phrase reversals in mixed\n\u003e English/Hebrew sentences. Then update FPDFTextEmbedderTest.ActualTextRtl\n\u003e test expectations to match this behavior change.\n\u003e\n\u003e TAG\u003dagy\n\u003e CONV\u003df944b222-25e8-4814-ac19-fc1a0101da16\n\u003e\n\u003e Bug: 525087036\n\u003e Change-Id: Ia48be8bb74ed60e4bd1bd34b34461ea5d46b3db0\n\u003e Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/152910\n\u003e Commit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\n\u003e Reviewed-by: Andy Phan \u003candyphan@chromium.org\u003e\n\nBug: 525087036, 561066233\nChange-Id: I7949f315ae37143e7b510978b2ba9187e60d026f\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/158290\nReviewed-by: Andy Phan \u003candyphan@chromium.org\u003e\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "3e9b2c24c3c35c17ad887f6b415e04163d97ae3c",
      "tree": "84e994a908352a991bf1a9f560f430d682091ca1",
      "parents": [
        "39f22bcdf6fd5877ee64705cf9d891fac56e4132"
      ],
      "author": {
        "name": "Miklos Vajna",
        "email": "miklos.vajna@collabora.com",
        "time": "Thu Sep 17 15:52:06 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Sep 17 15:52:06 2026 -0700"
      },
      "message": "Add FPDFPageObj_GetRenderedFillPattern() API\n\nThis is similar to http://pdfium-review.googlesource.com/c/154910, but\nthat one was for stroke patterns and this is for fill patterns.\n\nChange-Id: I9929e232472fdd974009c64bcb1109d69a813d0a\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/157490\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\nReviewed-by: Tom Sepez \u003ctsepez@chromium.org\u003e\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "39f22bcdf6fd5877ee64705cf9d891fac56e4132",
      "tree": "cf5f299a00ba6e4df6637d5fe0cb0e97855941cc",
      "parents": [
        "644461c3ac4e2e87b481e62e22c1fd6aee654496"
      ],
      "author": {
        "name": "Lei Zhang",
        "email": "thestig@chromium.org",
        "time": "Thu Sep 17 15:49:56 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Sep 17 15:49:56 2026 -0700"
      },
      "message": "Update license field in third_party/llvm-libc/README.pdfium\n\nSynchronize with change in crrev.com/1625165.\n\nBug: 562189087\nChange-Id: Ic55de8f3895dfbdbbf86759f232c236b5f9bc734\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/158250\nAuto-Submit: Lei Zhang \u003cthestig@chromium.org\u003e\nReviewed-by: Andy Phan \u003candyphan@chromium.org\u003e\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "644461c3ac4e2e87b481e62e22c1fd6aee654496",
      "tree": "4e99a547be9f12ce63bdc6475bb21b9e3d56508d",
      "parents": [
        "80bccb870ed3e4721a49b5f120dace71a787d2d6"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Thu Sep 17 15:49:29 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Sep 17 15:49:29 2026 -0700"
      },
      "message": "Convert named action test to embedder test\n\ntesting/resources/javascript/named_action.in was not an actual\nJavaScript test; it tested an OpenAction named action (/Print)\nhandled via the FFI_ExecuteNamedAction callback in C++.\n\nBecause of this, running it under JavaScript tests in nov8 mode\nrequired a custom suppression rule and an exception in test_runner.py\nto prevent it from triggering an unexpected success (surprise).\n\nThis change:\n1. Adds ExecuteNamedAction to EmbedderTest::Delegate and\n   EmbedderTestMockDelegate, wired to FFI_ExecuteNamedAction.\n2. Adds OpenActionNamedAction embedder test in\n   fpdfsdk/fpdf_formfill_embeddertest.cpp with testing/resources/named_action.pdf.\n3. Deletes named_action.in, named_action_expected.txt, and its\n   suppression rule from testing/SUPPRESSIONS.\n4. Removes the suppression exception for nov8 mode in test_runner.py.\n\nTAG\u003dagy\nCONV\u003d4b3dbb90-71fc-4f70-ab7d-9ba40b3b6cc2\n\nChange-Id: Ibb20a105659bb0db2a92678ee7cb5469daca5d62\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/157970\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "80bccb870ed3e4721a49b5f120dace71a787d2d6",
      "tree": "b2457b430fd8f86baa7eed73eb5e8de17e5e635a",
      "parents": [
        "6da3530eabe3fbf02dc54da3fc6563cfde8055ef"
      ],
      "author": {
        "name": "Lei Zhang",
        "email": "thestig@chromium.org",
        "time": "Thu Sep 17 15:20:14 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Sep 17 15:20:14 2026 -0700"
      },
      "message": "Add FPDFTextEmbedderTest.Arabic regression test\n\nDemonstrate a regression where extracted Arabic text is backwards. The\ntest PDF takes the sample PDF from the bug, reduced its size, and\nmassaged it to be structurally similar to hebrew_mirrored.pdf.\n\nBug: 561066233\nChange-Id: I088bf09e0c910da09697f1ece939dbbb56bd9256\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/158270\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\nReviewed-by: Andy Phan \u003candyphan@chromium.org\u003e\n"
    },
    {
      "commit": "6da3530eabe3fbf02dc54da3fc6563cfde8055ef",
      "tree": "149a3d07fd412d47aff55d5653026d2ff8c73cd3",
      "parents": [
        "a0ad2ce0825cf70b1dfc8ec0478de701a1c23f24"
      ],
      "author": {
        "name": "Lei Zhang",
        "email": "thestig@chromium.org",
        "time": "Wed Sep 16 16:09:37 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Sep 16 16:09:37 2026 -0700"
      },
      "message": "Add unit tests for PostScript EMF DC clip box clamping\n\nAdd CFXRenderDeviceTest.WindowsEmfPostScriptClipBox and\nCFXRenderDeviceTest.WindowsEmfPostScriptClipRgn to demonstrate\nCFX_PSRenderer::SetClip_PathFill() currently behaves strangely and\ncalculate negative clip box heights. Add TODO comments to fix that.\n\nTAG\u003dagy\nCONV\u003d6b3124d0-7f12-417c-b771-b63010dc7351\n\nBug: 553140224\nChange-Id: Iafd05a9b4af9402bc58059336928bc764e1d19c0\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/157750\nReviewed-by: Tom Sepez \u003ctsepez@chromium.org\u003e\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "a0ad2ce0825cf70b1dfc8ec0478de701a1c23f24",
      "tree": "232367c2e2f9d176b68041498cd15ca3f1bf4784",
      "parents": [
        "13817c3ffde984caeef65edf3fab33a66f513530"
      ],
      "author": {
        "name": "Lei Zhang",
        "email": "thestig@chromium.org",
        "time": "Wed Sep 16 13:39:34 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Sep 16 13:39:34 2026 -0700"
      },
      "message": "Remove redundant size check in FindBit() in faxmodule.cpp\n\nFollow-up to pdfium-review.googlesource.com/c/157990 to fix a nit in a\nsubspan() call. Also upgrade a DCHECK_GE() to CHECK_GE(), to always make\nsure casting ints to size_t is safe in the same subspan() call. Both of\nthese changes make FindBit() faster.\n\nChange-Id: I664978d2b85f6a66ca031d72f43a6d0edc340c1b\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/158151\nCommit-Queue: Nico Weber \u003cthakis@google.com\u003e\nReviewed-by: Nico Weber \u003cthakis@chromium.org\u003e\nAuto-Submit: Lei Zhang \u003cthestig@chromium.org\u003e\nReviewed-by: Nico Weber \u003cthakis@google.com\u003e\n"
    },
    {
      "commit": "13817c3ffde984caeef65edf3fab33a66f513530",
      "tree": "8da4df6f3b4874247eadf85b37e95c42ff5fb991",
      "parents": [
        "3bd3091c27504021ce217e4407433d9eb91221bb"
      ],
      "author": {
        "name": "Lei Zhang",
        "email": "thestig@chromium.org",
        "time": "Wed Sep 16 13:26:36 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Sep 16 13:26:36 2026 -0700"
      },
      "message": "Add operator\u003c\u003c for FX_RECT in fx_coordinates_test_support.h\n\nImplement operator\u003c\u003c for FX_RECT to print readable rectangle coordinates\nwhen GTest assertions like EXPECT_EQ() fail, matching the formatting of\nCFX_RectF and CFX_FloatRect. Add FXRectTest.Print to make sure this\nworks.\n\nReplace VerifyFXRect() calls with EXPECT_EQ() checks, and include\nfx_coordinates_test_support.h in cfx_renderdevice_unittest.cpp to\nimprove test output in that file.\n\nTAG\u003dagy\nCONV\u003d07af66e3-59b5-490c-b150-1533e9c3f2cf\n\nChange-Id: I65e9373775583c4233793f8fbc78dc3a3a08658e\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/157933\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\nReviewed-by: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "3bd3091c27504021ce217e4407433d9eb91221bb",
      "tree": "082401e2d9298d2d3d4ed1a0897ed36569377d55",
      "parents": [
        "fa2e5fc21867054ed359a4f9da137440035a638f"
      ],
      "author": {
        "name": "Nico Weber",
        "email": "thakis@chromium.org",
        "time": "Wed Sep 16 09:59:08 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Sep 16 09:59:08 2026 -0700"
      },
      "message": "In fax decoder, replace kOneLeadPos with countl_zero\n\nFollow-up to https://pdfium-review.googlesource.com/c/pdfium/+/157990\n\nNo behavior or performance change, but less code, and 256 byte less\nglobal data.\n\nBug: 555145149\nChange-Id: Ib81f093323d669bb0cb828fe86059f25e92f68ee\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/158090\nCommit-Queue: Nico Weber \u003cthakis@chromium.org\u003e\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nReviewed-by: Nico Weber \u003cthakis@google.com\u003e\n"
    },
    {
      "commit": "fa2e5fc21867054ed359a4f9da137440035a638f",
      "tree": "199211a222a2fdb3539cbac6b987bd20da21f1ca",
      "parents": [
        "3f86f877e04a967de684e62f1c74c99b458806fc"
      ],
      "author": {
        "name": "Nico Weber",
        "email": "thakis@chromium.org",
        "time": "Wed Sep 16 05:54:52 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Sep 16 05:54:52 2026 -0700"
      },
      "message": "Process 4 bytes at once in the fax codec\u0027s FindBit() routine\n\nBefore:\n\n    Benchmark 1: pdfium_test --pages\u003d1-30 Mellor_ACTITC_01.pdf\n      Time (mean ± σ):     960.4 ms ±   5.8 ms\n      Range (min … max):   955.2 ms … 970.7 ms    10 runs\n\n    Benchmark 1: pdfium_test --pages\u003d20-22 Mellor_ACTITC_11.pdf\n      Time (mean ± σ):     587.4 ms ±   3.8 ms\n      Range (min … max):   582.7 ms … 596.0 ms    10 runs\n\nAfter:\n\n    Benchmark 1: pdfium_test --pages\u003d1-30 Mellor_ACTITC_01.pdf\n      Time (mean ± σ):     910.0 ms ±   3.8 ms\n      Range (min … max):   901.7 ms … 916.2 ms    10 runs\n\n    Benchmark 1: pdfium_test --pages\u003d20-22 Mellor_ACTITC_11.pdf\n      Time (mean ± σ):     485.4 ms ±   3.2 ms\n      Range (min … max):   481.7 ms … 492.0 ms    10 runs\n\nNo behavior change.\n\nBug: 555145149\nChange-Id: I76ff1102485b4eb34cfdf9f06c16fd7acb8da218\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/157990\nCommit-Queue: Nico Weber \u003cthakis@chromium.org\u003e\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nReviewed-by: Nico Weber \u003cthakis@google.com\u003e\n"
    },
    {
      "commit": "3f86f877e04a967de684e62f1c74c99b458806fc",
      "tree": "dc593901f1717f48a1192dfcf0de381938c827aa",
      "parents": [
        "ecbfc062ae39e902c7472ec8165d2232fd81f3d1"
      ],
      "author": {
        "name": "Nico Weber",
        "email": "thakis@chromium.org",
        "time": "Tue Sep 15 16:07:21 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Sep 15 16:07:21 2026 -0700"
      },
      "message": "Expand 1bpp rows to bytes before stretching them horizontally\n\nBefore:\n\n    pdfium_test --pages\u003d1-30 Mellor_ACTITC_01.pdf\n      Time (mean ± σ):      1.218 s ±  0.006 s\n      Range (min … max):    1.205 s …  1.228 s    10 runs\n\n    pdfium_test --pages\u003d20-22 Mellor_ACTITC_11.pdf\n      Time (mean ± σ):     621.8 ms ±   4.5 ms\n      Range (min … max):   615.6 ms … 630.4 ms    10 runs\n\nAfter:\n\n    pdfium_test --pages\u003d1-30 Mellor_ACTITC_01.pdf\n      Time (mean ± σ):     971.3 ms ±   4.9 ms\n      Range (min … max):   964.0 ms … 976.9 ms    10 runs\n\n    pdfium_test --pages\u003d20-22 Mellor_ACTITC_11.pdf\n      Time (mean ± σ):     587.4 ms ±   7.0 ms\n      Range (min … max):   577.2 ms … 595.4 ms    10 runs\n\n20% faster for one workload, 5% faster for another.\n\nBug: 555145149\nChange-Id: I7604080b3422a53e8afffdee8d4c8010cf62eb97\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/157851\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nReviewed-by: Nico Weber \u003cthakis@google.com\u003e\nCommit-Queue: Nico Weber \u003cthakis@chromium.org\u003e\n"
    },
    {
      "commit": "ecbfc062ae39e902c7472ec8165d2232fd81f3d1",
      "tree": "db632ab79f2a2655af78987c2964f39ebdca3d79",
      "parents": [
        "4ef1e1b47d9a2e5c2d7340971ce158ba4b964c1e"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Tue Sep 15 14:52:37 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Sep 15 14:52:37 2026 -0700"
      },
      "message": "Consolidate the three suppression files into one\n\nThe font engine and action columns left all three files with identical\nsyntax, differing only in the action their name implied. The implication\nis now written on every line, so the files can be one file.\n\nSUPPRESSIONS keeps its existing lines in their existing order. Each\nincoming rule is placed directly after the first line naming the same\ntest, keeping a test\u0027s rules together; the 45 rules naming a test that\nappears nowhere else go at the end. No rule is dropped: 689 + 9 + 232\nlines in, 930 lines out.\n\nLoading is now a single pass that routes each matching rule by its\naction rather than by the file it came from.\n\nTAG\u003dagy\nCONV\u003d6b842231-ce9c-4564-992e-c2405724eec1\n\nChange-Id: I9a2c142b9b7cb09230b50100a78d40d7b2bae20b\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/157890\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "4ef1e1b47d9a2e5c2d7340971ce158ba4b964c1e",
      "tree": "4cc05d228e63b1f5acabcdb098f020ec220fdb4a",
      "parents": [
        "862f692afc0646f3a238c7bc8d8ed8e37c6e1219"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Tue Sep 15 14:26:37 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Sep 15 14:26:37 2026 -0700"
      },
      "message": "Use a standalone cppgc heap for the XFA fuzzer process state\n\nV8 attaches a default CppHeap to every isolate, so passing the fuzzer\u0027s\nisolate to FXGC_CreateHeap() returned that attached heap instead of a\nstandalone cppgc heap. Collecting an attached heap runs a full V8 GC,\nwhich requires --expose-gc and requires the isolate to have been\nentered. The latter does not hold when ~XFAProcessState() runs from a\nstatic destructor at process exit, so V8 fails a CHECK comparing the\ncurrent isolate against the one owning the page metadata:\n\n  Check failed: isolate_ \u003d\u003d isolate.\n  v8::internal::MainAllocator::FreeLinearAllocationArea\n  v8::internal::HeapAllocator::FreeLinearAllocationAreas\n\nPass nullptr to keep using a standalone heap here, and explain why.\n\nTAG\u003dagy\nCONV\u003d918ad331-ad78-48c4-9753-e971c146f06f\n\nFixed: 561958664\nChange-Id: Ib92ade3031b481d53411fc21a3dbcf0436e11730\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/157910\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\nReviewed-by: Andy Phan \u003candyphan@chromium.org\u003e\n"
    },
    {
      "commit": "862f692afc0646f3a238c7bc8d8ed8e37c6e1219",
      "tree": "78eb1671eb25d08ec9eb6a15318f407f30ba13d9",
      "parents": [
        "8dff61f330f0d8a78ab9350ceab63c9389e24ad8"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Tue Sep 15 14:12:39 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Sep 15 14:12:39 2026 -0700"
      },
      "message": "Add font engine and action columns to the suppression files\n\nThe font engine is orthogonal to the rasterizer, so it gets a column\nof its own rather than a token smuggled into the rendering column.\nColumn 5 holds *, freetype, or fontations.\n\nColumn 6 states what a matching rule does, instead of leaving it\nimplicit in the file name: \"diff\" in SUPPRESSIONS, where the test\nruns but its result is ignored; \"blank\" in SUPPRESSIONS_IMAGE_DIFF,\nwhich skips the image comparison; \"fuzzy\" or\n\"fuzzy\u003d\u003cdelta\u003e,\u003cmse\u003e,\u003cwin_mse\u003e\" in SUPPRESSIONS_EXACT_MATCHING, which\ncompares with a tolerance.\n\nAll three files now have exactly seven columns. Existing lines take\n\"*\" for the font engine and the action their file already implied, so\nno rule changes meaning.\n\nEvery column is validated against its legal values, and an action\nmust be one the file accepts. A misspelled token previously matched\nnothing and said nothing.\n\nTAG\u003dagy\nCONV\u003d6b842231-ce9c-4564-992e-c2405724eec1\n\nBug: 42271123\nChange-Id: I27c73fd0e058cb08a7a2c68edbaa47dc770b7f93\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/157870\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "8dff61f330f0d8a78ab9350ceab63c9389e24ad8",
      "tree": "966f0e787c7108840664da9c9df2b6357e70752f",
      "parents": [
        "ac60fa3dacb2ee66d7025578aa6370b723b2346d"
      ],
      "author": {
        "name": "Nico Weber",
        "email": "thakis@chromium.org",
        "time": "Tue Sep 15 11:21:39 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Sep 15 11:21:39 2026 -0700"
      },
      "message": "Remove unused variable in pdfium_test.cc\n\nUnused since pdfium-review.googlesource.com/c/108891,\nand showed up in profiles.\n\n(Drops 40ms from `pdfium_test --pages\u003d1-30 Mellor_ACTITC_01.pdf`,\nbut as this is test-only code, this is a measurement-only effect.)\n\nNo behavior change.\n\nBug: 555145149\nChange-Id: I2477539fdf5446d611b604d46d494452468836ae\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/157850\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Nico Weber \u003cthakis@chromium.org\u003e\nReviewed-by: Nico Weber \u003cthakis@google.com\u003e\n"
    },
    {
      "commit": "ac60fa3dacb2ee66d7025578aa6370b723b2346d",
      "tree": "3ca01f569ba4cfe301792c8b7946265c1832b116",
      "parents": [
        "bc80bbdd1b10c566cd3bb8afd47fe71a74c8cd99"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Tue Sep 15 10:07:38 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Sep 15 10:07:38 2026 -0700"
      },
      "message": "Move core/fpdfapi/edit/cpdf_contentstream_write_utils.cpp to fxcrt.\n\nThese have little to do with content streams, as they write basic\nfxcrt objects to std::ostream. Putting these here avoids having\nother fpdfapi/ modules depend on fpdfapi/edit/ just to include these.\n\nBypass-Check-License: Renamed file.\nChange-Id: I986196df85861941f872f372d5d951e0d0b4664b\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/157730\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\nReviewed-by: Andy Phan \u003candyphan@chromium.org\u003e\n"
    },
    {
      "commit": "bc80bbdd1b10c566cd3bb8afd47fe71a74c8cd99",
      "tree": "81aa64e482e4aa8d868226af0c88936abd426491",
      "parents": [
        "f3635dd0d8dc292741303d2947a8d33fd818728e"
      ],
      "author": {
        "name": "Nico Weber",
        "email": "thakis@chromium.org",
        "time": "Tue Sep 15 10:05:05 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Sep 15 10:05:05 2026 -0700"
      },
      "message": "Increase jbig2 limits and roll jbig2 testing corpus\n\nReal-world PDF files contain jbig2 symbol dictionaries with more than\n65535 symbols (see bug for one with 173132), so bump up the limit 16x.\n\nAlso picks up\nhttps://pdfium-review.googlesource.com/c/pdfium_tests/+/157510 which\ncontains a synthetic text with 2**18 symbols in its symbol dict.\n\nThe new test used to time out before these two:\nhttps://pdfium-review.googlesource.com/c/pdfium/+/157550\nhttps://pdfium-review.googlesource.com/c/pdfium/+/157830\n\nBug: 555145149\nChange-Id: I22d9fabb82c8d888dcfd9b295dc937f327e19ab9\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/157530\nAuto-Submit: Nico Weber \u003cthakis@chromium.org\u003e\nReviewed-by: Nico Weber \u003cthakis@google.com\u003e\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "f3635dd0d8dc292741303d2947a8d33fd818728e",
      "tree": "4d11476bf20f82d6c4bf548d6fb4bf7fe55ce2a9",
      "parents": [
        "7a19043977a4b6a81b3802a3ba7f06a5d2baa81a"
      ],
      "author": {
        "name": "Nico Weber",
        "email": "thakis@chromium.org",
        "time": "Tue Sep 15 09:37:08 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Sep 15 09:37:08 2026 -0700"
      },
      "message": "Fix O(n^2) behavior when decoding G4 fax data\n\nThe synthetic benchmark in bitmap-symbol-symhuff-texthuff-manysyms.pdf\ncontains a height class bitmap that\u0027s 9 * 2^18 pixels wide and 2 pixels\nhigh.\n\nG4 2D data has a virtual all-white scanline above the first actual\nscanline. The first actual scanline was encoded using only the\n\"Horizontal\" mode which doesn\u0027t use B1 and B2 (see\nT-REC-T.6-198811-I!!PDF-E.pdf page 4, FIGURE 1/T.6). Yet, FaxG4GetRow\nsearched the virtual all-white scanline starting at a0 for a black pixel\nfor every run, which each time searched 2 million white pixels.\n\nInstead, only call FaxG4FindB1B2() for modes that use its results.\n\nFor the synthetic test input, takes processing time from 3.515 s to\n0.017 s.\n\nThis helps non-synthetic cases a bit too: `hyperfine \u0027pdfium_test\n--pages\u003d1-30 Mellor_ACTITC_01.pdf\u0027` goes from 1.245 s ± 0.006 s to 1.187\ns ± 0.004 s, 4.7% faster.\n\nNo intended behavior change.\n\nBug: 555145149\nChange-Id: Ib268a10f2756e31286a5d140bb6727452de67de6\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/157830\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Nico Weber \u003cthakis@chromium.org\u003e\nReviewed-by: Nico Weber \u003cthakis@google.com\u003e\n"
    },
    {
      "commit": "7a19043977a4b6a81b3802a3ba7f06a5d2baa81a",
      "tree": "113b9384439e698a20fb6730afe002ac8f03170a",
      "parents": [
        "5fe6c25b21de1060eca1210cd8a70e07ff893d59"
      ],
      "author": {
        "name": "Victor Hugo Vianna Silva",
        "email": "victorvianna@google.com",
        "time": "Tue Sep 15 08:59:43 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Sep 15 08:59:43 2026 -0700"
      },
      "message": "Remove usage of checkout_wpr_archives gclient var\n\nBug: 559353440\nChange-Id: I08d4b5d49775c62f03b6d86e0b543925f24d1680\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/157810\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\nAuto-Submit: Victor Vianna \u003cvictorvianna@google.com\u003e\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "5fe6c25b21de1060eca1210cd8a70e07ff893d59",
      "tree": "cbf2a9911622379e00fba2b91328e3058ba6577b",
      "parents": [
        "f8ad3e8496451249e7617e429ac4c7905faa3f7d"
      ],
      "author": {
        "name": "Aryan",
        "email": "aryankrishnan4b@gmail.com",
        "time": "Mon Sep 14 18:59:01 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Sep 14 18:59:01 2026 -0700"
      },
      "message": "Update BrotliDecoder::Decode() to return FX_INVALID_OFFSET on failure\n\nThis CL updates BrotliDecoder::Decode() to return\n{DataVector\u003cuint8_t\u003e(), FX_INVALID_OFFSET} instead of\n{DataVector\u003cuint8_t\u003e(), 0u} on failure which ensures consistency with\nthe other decoders.\n\nChange-Id: Ib695e82f43c4a4d2fb71590038390b666dc10fa3\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/156250\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nReviewed-by: Andy Phan \u003candyphan@chromium.org\u003e\nCommit-Queue: Aryan Krishnan \u003caryankrishnan4b@gmail.com\u003e\n"
    },
    {
      "commit": "f8ad3e8496451249e7617e429ac4c7905faa3f7d",
      "tree": "60321c668e35739a813a4ee8e03e51e15af3998a",
      "parents": [
        "9270224a15122042a8cfa244d34e032e330519d4"
      ],
      "author": {
        "name": "Lei Zhang",
        "email": "thestig@chromium.org",
        "time": "Mon Sep 14 18:14:38 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Sep 14 18:14:38 2026 -0700"
      },
      "message": "Revert \"Fix clip box calculation in CFX_PSRenderer::SetClip_PathFill()\"\n\nThis reverts commit 2e017ed40229d88ac293865ab057036f62dc7eb3.\n\nReason for revert: Blocks PDFium roll.\n\nFailure Link: crrev.com/c/8392474\n\nOriginal change\u0027s description:\n\u003e Fix clip box calculation in CFX_PSRenderer::SetClip_PathFill()\n\u003e\n\u003e In CFX_PSRenderer::SetClip_PathFill(), replace the manual coordinate\n\u003e calculations with `clip_box_.Intersect(rect.GetOuterRect())`. Calling\n\u003e `rect.GetOuterRect()` matches CFX_PSRenderer::SetClip_PathStroke() and\n\u003e restores the logic from before CL [1].\n\u003e\n\u003e Update PSRendererTest.SetClipPathFill to remove the TODOs and assert the\n\u003e correct clip box values.\n\u003e\n\u003e [1] https://codereview.chromium.org/2612243005\n\u003e\n\u003e TAG\u003dagy\n\u003e CONV\u003d8f063108-e7ca-41cf-8504-4967b5566063\n\u003e\n\u003e Bug: 553140224\n\u003e Change-Id: Ic4cdce68e24f48d9660d7a1fbde7f116620284a5\n\u003e Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/157312\n\u003e Reviewed-by: Andy Phan \u003candyphan@chromium.org\u003e\n\u003e Commit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\n\n# Not skipping CQ checks because original CL landed \u003e 1 day ago.\n\nBug: 553140224\nChange-Id: Ia988b1e6e73411a68d7a0ce5ae3c63b869ae1968\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/157751\nBot-Commit: rubber-stamper@appspot.gserviceaccount.com \u003crubber-stamper@appspot.gserviceaccount.com\u003e\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "9270224a15122042a8cfa244d34e032e330519d4",
      "tree": "d7db87b6a901b4967b0b5851d70fe19b95af6a0b",
      "parents": [
        "c929c947c3e1c2b63e3d38a6224ab962be427dc9"
      ],
      "author": {
        "name": "Anne Redulla",
        "email": "aredulla@google.com",
        "time": "Mon Sep 14 17:34:24 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Sep 14 17:34:24 2026 -0700"
      },
      "message": "[sbom-quality] Switch to abs file paths for License File paths\n\nWhen PDFium is checked out within chromium, some of the 3p deps\naren\u0027t checked out in the expected relative paths. This CL updates\nthe License File field in metadata files to use the absolute format,\nwhich works for both standalone and in chromium PDFium checkouts.\n\nBug: 307141537\nChange-Id: Ic07554d1399047c0fcf9f18a13f1bd102608cf66\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/157470\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nReviewed-by: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "c929c947c3e1c2b63e3d38a6224ab962be427dc9",
      "tree": "9624fb9355afb96fba55eec484709c5ddabc07ff",
      "parents": [
        "9bd9ac2ea799ebe814e7e572a13e2d89d71841a2"
      ],
      "author": {
        "name": "Aryan",
        "email": "aryankrishnan4b@gmail.com",
        "time": "Mon Sep 14 17: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 Sep 14 17:33:41 2026 -0700"
      },
      "message": "Support DecodeParams in BrotliDecoder\n\nThis CL passes decode parameters to BrotliDecoder::Decode() to enable\nsupport for predictor-based decoding operations and updates expectation\nimages as needed.\n\nThis CL updates calls to BrotliDecode() in stream parsing (which then\ncalls BrotliDecoder::Decode() after parsing the CPDF_Dictionary) to\nforward the parameters from the dictionary. After successful Brotli\ndecompression, parameters are validated using GetAndCheckDecodeParams(),\nand the appropriate predictor algorithm (PNG or TIFF) is applied based\non the configured predictor type.\n\nBug: 550512275\nChange-Id: If55a2a3fd59c3437fd820c865fee20e52c31f3f2\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/155993\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nReviewed-by: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "9bd9ac2ea799ebe814e7e572a13e2d89d71841a2",
      "tree": "b4753698838138ac24ccafa481537d99c3bc98a1",
      "parents": [
        "5f6ecb0cf341d26ad24bf283c78cf6678ea17eba"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Mon Sep 14 17:03:19 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Sep 14 17:03:19 2026 -0700"
      },
      "message": "Plumb FXGC_Heap through XFA in place of cppgc::Heap\n\nFXGC_Heap already abstracts over standalone and V8-attached heaps, but\nnothing outside of its own creation used it. Pass the wrapper rather\nthan the underlying cppgc::Heap so that a future per-document isolate\ncan supply a v8::CppHeap-backed heap without further plumbing.\n\nNo behavior change: every heap remains standalone.\n\nTAG\u003dagy\nCONV\u003de9f2854c-dfc6-47a5-a99e-56b61291357a\n\nChange-Id: I91ed82240ca2e1274eca5ea4e94dd9ff52bb4ff4\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/157590\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "5f6ecb0cf341d26ad24bf283c78cf6678ea17eba",
      "tree": "e8ed233f474926f3a0b6bed8e486e3c1a9b327f7",
      "parents": [
        "72fca0181a0621be6a26f59142d3959c6a13d4b4"
      ],
      "author": {
        "name": "Nico Weber",
        "email": "thakis@chromium.org",
        "time": "Mon Sep 14 17:02:33 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Sep 14 17:02:33 2026 -0700"
      },
      "message": "Reduce JBIG2 Huffman reading work per bit from O(n) to O(1)\n\nDecodeAValue() repeatedly read one bit and then scanned the whole symbol\ntable to find a match.\n\nInstead, precompute for each code length how many codes there are with\nthis length, and have an index that orders symbols first by code length,\nand then by value.\n\nThis allows doing the per-bit work in O(1) time.\n\n(This is still less efficient than the usual efficient huffman decoding\nloop described e.g. in https://www.hanshq.net/zip.html#huffdec that\nusually reads all bits for a symbol in a single read, but it\u0027s enough of\na progression to push huffman work low in profiles.)\n\nTakes `pdfium_test Mellor_ACTITC_01.pdf --pages\u003d1-30` from 9.7s to 1.5s.\n\nChange on:\n\n    hyperfine \u0027pdfium_test --pages\u003d1-30 Mellor_ACTITC_01.pdf\u0027\n\nBefore:\n\n    Benchmark 1: pdfium_test --pages\u003d1-30 Mellor_ACTITC_01.pdf\n      Time (mean ± σ):     11.135 s ±  0.426 s    [User: 11.011 s, System: 0.117 s]\n      Range (min … max):   10.603 s … 11.800 s    10 runs\n\nAfter:\n\n    Benchmark 1: pdfium_test --pages\u003d1-30 Mellor_ACTITC_01.pdf\n      Time (mean ± σ):      1.255 s ±  0.005 s    [User: 1.170 s, System: 0.081 s]\n      Range (min … max):    1.247 s …  1.263 s    10 runs\n\n88.7% less time: the old code took 8.8x as long as the new code for this\nfile.\n\nRendering pages 20-22 of Mellor_ACTITC_11.pdf, with a local change to\nbump up limits to allow rendering it, goes from 8.6s to 0.91s. An even\nbigger speedup, because that file has a larger table, so the O(n) hurt\neven more.\n\nThe new test file in\nhttps://pdfium-review.googlesource.com/c/pdfium_tests/+/157510 with the\nsame local change to bump limits goes from 12.9s to 3.5s.\n\nAlso make a few variables and fields unsigned while here.\n\nNo intended behavior change.\n\nBug: 555145149\nChange-Id: I87cea0e76b7984698812ccd50f8e2c58b0c0ce02\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/157550\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": "72fca0181a0621be6a26f59142d3959c6a13d4b4",
      "tree": "a30a56117da86739b00fc536bbaf01ea13522492",
      "parents": [
        "5fcdcb8be6b05d3564dcbab3044fd3667f70bba3"
      ],
      "author": {
        "name": "Aryan",
        "email": "aryankrishnan4b@gmail.com",
        "time": "Mon Sep 14 15:07:05 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Sep 14 15:07:05 2026 -0700"
      },
      "message": "Fix BrotliDecode buffer expansion check\n\nWhen decompression requires additional output memory, the decoder checks\nwhether the buffer can grow. Previously, the expansion condition checked\nif the buffer size was less than or equal to half of kMaxDecodeBytes,\npreventing resizing when the buffer size reached higher limits or\nreached kMaxDecodeBytes directly.\n\nThis CL updates the condition to allow the buffer size to reach its\nmaximum value and caps the resize logic using std::min() to safely\naccommodate output growth up to the maximum limit.\n\nBug: 550460311\nChange-Id: I460f232074d7a37ce5be808c9d00d39b3a40edb7\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/155711\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Andy Phan \u003candyphan@chromium.org\u003e\nAuto-Submit: Aryan Krishnan \u003caryankrishnan4b@gmail.com\u003e\nReviewed-by: Andy Phan \u003candyphan@chromium.org\u003e\n"
    },
    {
      "commit": "5fcdcb8be6b05d3564dcbab3044fd3667f70bba3",
      "tree": "7022321a1e7ffb9c23edcef1540ae0e097423809",
      "parents": [
        "96d91c20618b9fbe5b4c0960fbd524844e833364"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Mon Sep 14 14:27:08 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Sep 14 14:27:08 2026 -0700"
      },
      "message": "Fix dangling span in ~RustJpegScanlineDecoder()\n\nApply same suppression as in ~LibjpegScanlineDecoder()\n\nChange-Id: Iaeb3a9d7fa029208403f4444799130837032491f\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/157710\nCommit-Queue: Andy Phan \u003candyphan@chromium.org\u003e\nAuto-Submit: Tom Sepez \u003ctsepez@chromium.org\u003e\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\nReviewed-by: Andy Phan \u003candyphan@chromium.org\u003e\n"
    },
    {
      "commit": "96d91c20618b9fbe5b4c0960fbd524844e833364",
      "tree": "0d912f8230d77938cc9c66cfa71dc8f7f048b45e",
      "parents": [
        "c7071596bd8e254b24d93043b4bac379945d2130"
      ],
      "author": {
        "name": "Jimin Lee",
        "email": "cliceleee@gmail.com",
        "time": "Mon Sep 14 12:16:03 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Sep 14 12:16:03 2026 -0700"
      },
      "message": "Ignore control characters typed with unhandled modifier chords\n\nOn macOS, Ctrl-C is not a shortcut (Command is), so it arrives as a\ntyped 0x03 character and replaces the selection in form text fields.\nMeta chords cause the same problem on other platforms.\n\nIn CFWL_Edit, never type control characters, since backspace, tab and\nreturn are already handled earlier. In CPWL_Edit, only drop them when\nCtrl or Meta is held, since TypeChar() still handles backspace and\nreturn there.\n\nR\u003dthestig@chromium.org\n\nBug: 528342021\nChange-Id: Ie1d7560dd2995a35a8c298adfd7e254ada5f0af2\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/153370\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": "c7071596bd8e254b24d93043b4bac379945d2130",
      "tree": "d2bc2732e7a10fb428b389711d5eecef67ddc90d",
      "parents": [
        "5266b2b9f2723e753b29b15a0a12bd30a5264eb7"
      ],
      "author": {
        "name": "pdfium-autoroll@skia-public.iam.gserviceaccount.com",
        "email": "pdfium-autoroll@skia-public.iam.gserviceaccount.com",
        "time": "Mon Sep 14 08:41:21 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Sep 14 08:41:21 2026 -0700"
      },
      "message": "Roll Memory Tools from 8d3182bb3c86 to 0732f7097d06 (2 revisions)\n\nhttps://chromium.googlesource.com/chromium/src/tools/memory.git/+log/8d3182bb3c86..0732f7097d06\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 akall@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: akall@google.com\nChange-Id: I07eae909e7c351846ca86e793fef85ec8c3d782c\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/157410\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": "5266b2b9f2723e753b29b15a0a12bd30a5264eb7",
      "tree": "692470b7b09bd530152300f31347742719c4c235",
      "parents": [
        "506c994cd9ce3ea1e0c530f678ab252915711231"
      ],
      "author": {
        "name": "pdfium-autoroll@skia-public.iam.gserviceaccount.com",
        "email": "pdfium-autoroll@skia-public.iam.gserviceaccount.com",
        "time": "Mon Sep 14 08:41:13 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Sep 14 08:41:13 2026 -0700"
      },
      "message": "Roll Depot Tools from 732902ab86f8 to 36a8df4ad006 (122 revisions)\n\nhttps://chromium.googlesource.com/chromium/tools/depot_tools.git/+log/732902ab86f8..36a8df4ad006\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 akall@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: akall@google.com\nChange-Id: Id0e80ca396f3e54f7caadc6fcff8161f7c629be8\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/157450\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": "506c994cd9ce3ea1e0c530f678ab252915711231",
      "tree": "a4194a82c783724e341aa8018853b42ceb2afecd",
      "parents": [
        "379fa928339ed3aa50648fd0500db5b508506265"
      ],
      "author": {
        "name": "Aryan Krishnan",
        "email": "aryankrishnan4b@gmail.com",
        "time": "Mon Sep 14 08:18:06 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Sep 14 08:18:06 2026 -0700"
      },
      "message": "Revert \"Roll Instrumented Libraries from d15c278eed5d to 51898bc68243 (1 revision)\"\n\nThis reverts commit 8943614bf03b0c71733de142f1e763d67879ab7d.\n\nReason for revert: Reason for tree closure\n\nFailure Link: https://ci.chromium.org/ui/p/pdfium/builders/ci/linux_msan/11179/overview\n\nOriginal change\u0027s description:\n\u003e Roll Instrumented Libraries from d15c278eed5d to 51898bc68243 (1 revision)\n\u003e\n\u003e https://chromium.googlesource.com/chromium/third_party/instrumented_libraries.git/+log/d15c278eed5d..51898bc68243\n\u003e\n\u003e If this roll has caused a breakage, revert this CL and set the roller\n\u003e to dry run mode using the controls here:\n\u003e https://autoroll.skia.org/r/instrumented-libraries-pdfium\n\u003e Please CC akall@google.com,dhoss@chromium.org,thestig@chromium.org on the revert to ensure that a human\n\u003e is aware of the problem.\n\u003e\n\u003e To report a problem with the AutoRoller itself, please file a bug:\n\u003e https://issues.skia.org/issues/new?component\u003d1389291\u0026template\u003d1850622\n\u003e\n\u003e Documentation for the AutoRoller is here:\n\u003e https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md\n\u003e\n\u003e Bug: None\n\u003e Tbr: akall@google.com\n\u003e Change-Id: I77d126ba123b483687e77127748ee526a7eff2d0\n\u003e Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/157430\n\u003e Commit-Queue: pdfium-autoroll@skia-public.iam.gserviceaccount.com \u003cpdfium-autoroll@skia-public.iam.gserviceaccount.com\u003e\n\u003e Bot-Commit: pdfium-autoroll@skia-public.iam.gserviceaccount.com \u003cpdfium-autoroll@skia-public.iam.gserviceaccount.com\u003e\n\nTBR\u003dpdfium-autoroll@skia-public.iam.gserviceaccount.com,pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com,akall@google.com\n\nNo-Presubmit: true\nNo-Tree-Checks: true\nNo-Try: true\nBug: None\nChange-Id: Ie255071ddc08043638d012c3a082253552079335\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/157570\nCommit-Queue: Aryan Krishnan \u003caryankrishnan4b@gmail.com\u003e\nBot-Commit: rubber-stamper@appspot.gserviceaccount.com \u003crubber-stamper@appspot.gserviceaccount.com\u003e\n"
    },
    {
      "commit": "379fa928339ed3aa50648fd0500db5b508506265",
      "tree": "cfa3fc755153723f1e6cebe36fe91623d616e475",
      "parents": [
        "8943614bf03b0c71733de142f1e763d67879ab7d"
      ],
      "author": {
        "name": "pdfium-autoroll@skia-public.iam.gserviceaccount.com",
        "email": "pdfium-autoroll@skia-public.iam.gserviceaccount.com",
        "time": "Sun Sep 13 21:54:46 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Sun Sep 13 21:54:46 2026 -0700"
      },
      "message": "Roll libpng from 6d5341764ef4 to 0179a807421c (1 revision)\n\nhttps://chromium.googlesource.com/chromium/src/third_party/libpng.git/+log/6d5341764ef4..0179a807421c\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/libpng-pdfium\nPlease CC akall@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: akall@google.com\nChange-Id: I8285d44c39ac0f317822b1e92c4667dd515d8feb\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/157411\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": "8943614bf03b0c71733de142f1e763d67879ab7d",
      "tree": "0a49b87d9f3ec602d190fc3951f20d15023dfcfd",
      "parents": [
        "6c8196a1478e4c37dac543210c73e276d4c06386"
      ],
      "author": {
        "name": "pdfium-autoroll@skia-public.iam.gserviceaccount.com",
        "email": "pdfium-autoroll@skia-public.iam.gserviceaccount.com",
        "time": "Sun Sep 13 21:45:42 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Sun Sep 13 21:45:42 2026 -0700"
      },
      "message": "Roll Instrumented Libraries from d15c278eed5d to 51898bc68243 (1 revision)\n\nhttps://chromium.googlesource.com/chromium/third_party/instrumented_libraries.git/+log/d15c278eed5d..51898bc68243\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 akall@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: akall@google.com\nChange-Id: I77d126ba123b483687e77127748ee526a7eff2d0\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/157430\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": "6c8196a1478e4c37dac543210c73e276d4c06386",
      "tree": "a6f4141aebe7e9f27472aad1d532efac7ba42df2",
      "parents": [
        "93466ec405b10a90645cedaa5d76c4f9f45169f0"
      ],
      "author": {
        "name": "Jeroen Bobbeldijk",
        "email": "jerbob92@gmail.com",
        "time": "Sat Sep 12 10:58:58 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Sat Sep 12 10:58:58 2026 -0700"
      },
      "message": "Make later ToUnicode mappings supersede earlier ones\n\nCPDF_ToUnicodeMap kept the numerically lowest unicode when a charcode\nwas mapped more than once. Adobe TN #5014 requires the last mapping to\nwin: \"Code mappings (unlike codespace ranges) may overlap, but\nsucceeding maps superceded preceding maps.\"\n\nSubset fonts commonly emit a catch-all bfrange and then override\nindividual codes, so this decoded those overrides incorrectly whenever\nthe correct unicode was numerically above the charcode. In practice that\nmeant accented letters and symbols: a font mapping 0xCE to U+00F3\nextracted as U+00CE, and one mapping 0x9B to U+00BA extracted as a C1\ncontrol character. ASCII in the same font was unaffected, because there\nthe target falls below the charcode, so affected pages looked almost\ncorrect.\n\nThe behaviour was not deliberate. Deduplication was added to bound\nmemory by [1], and [2] collapsed the multimap to a flat map using\nstd::min while speeding up ReverseLookup(). Both were memory and speed\nchanges rather than semantic ones.\n\nApply the same rule to reverse_map_, so both maps agree about which\nmapping is the effective one. Where several charcodes map to one\nunicode, ReverseLookup() now answers with the last of them rather than\nthe lowest, which is observable through CharCodeFromUnicode().\nDeduplication is preserved in both maps, so that memory bound still\nholds.\n\nThis change exposes a second bug, in the font subsetter rather than in\nthe reader. The FPDFSaveWithFontSubsetEmbedderTest expectations that\nchange here are a symptom of that one, not a consequence of correcting\nthe precedence rule.\n\nThe ToUnicode CMap that LoadCompositeFont() generates for a font loaded\nthrough FPDFText_LoadFont() already mapped some charcodes twice. It\ncollects the font\u0027s cmap into a multimap keyed by glyph, so a glyph that\nseveral unicodes reach contributes several entries, and overlapping\nbfranges result. A reader following TN #5014 has always resolved those\noverlaps to the last mapping, so what these generated fonts extract to\nin other PDF viewers has never been what these tests recorded. The tests\ncould not show that, because they check PDFium\u0027s writer using PDFium\u0027s\nreader, and the reader keeping the lowest mapping cancelled out the\nwriter\u0027s ambiguity.\n\nCorrecting the reader stops the two from cancelling, so the expectations\nnow record what a conformant viewer has been seeing all along: U+4E00\nrather than U+2F00, which is the better answer, but also U+F906 rather\nthan U+53E5 and U+00A0 rather than U+0020, which are worse. The\nsubsetter is fixed separately by [3], which makes each charcode map once\nso that no reader has an overlap to resolve.\n\n[1] https://pdfium-review.googlesource.com/c/pdfium/+/95390\n[2] https://pdfium-review.googlesource.com/c/pdfium/+/139310\n[3] https://pdfium-review.googlesource.com/c/pdfium/+/157050\n\nBug: 554790604\nChange-Id: Ib76dae0f8188dadec7b92ef7b31d86fa11ed201c\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/156290\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": "93466ec405b10a90645cedaa5d76c4f9f45169f0",
      "tree": "14cde542f3b13a9cc24b41398b8a30c4180cd8f3",
      "parents": [
        "88c60350edd0c6362b742c544e1776a7bdd5c1c4"
      ],
      "author": {
        "name": "xonaman",
        "email": "xonaman738@gmail.com",
        "time": "Fri Sep 11 19:21:51 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Sep 11 19:21:51 2026 -0700"
      },
      "message": "Add FPDFAttachment_GetAFRelationship() API\n\nThe attachment API exposes the filespec /Desc (via\nFPDFAttachment_GetDescription()) and the embedded stream /Subtype (via\nFPDFAttachment_GetSubtype()), plus generic /Params keys (via\nFPDFAttachment_GetStringValue()), but there is no public way to read the\nfile specification dictionary\u0027s /AFRelationship entry.\n\nThat name (PDF 2.0 / ISO 32000-2; also used by PDF/A-3 associated files)\ndescribes an embedded file\u0027s role - for example a ZUGFeRD/Factur-X\ne-invoice marks the machine-readable invoice XML as \"Alternative\" or\n\"Data\". Without it, embedders can only guess an attachment\u0027s role from\nits file name.\n\nFPDFAttachment_GetAFRelationship() is modeled on the existing\nGetSubtype() and GetDescription() getters: it reads the /AFRelationship\nname from the file specification dictionary and returns it as UTF-16LE\nvia the standard two-pass buffer protocol, returning an empty string\n(length 2) when the entry is absent.\n\nAdd an embedded_attachments_with_af.pdf fixture and embedder tests\ncovering the present, absent, null-handle and too-small-buffer cases.\n\nChange-Id: I738fbd7a4d16e89946c7e2e209780081d694f298\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/154470\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\nReviewed-by: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "88c60350edd0c6362b742c544e1776a7bdd5c1c4",
      "tree": "fd2d25a6d5923ff31abfd2f9902f236129e40c3f",
      "parents": [
        "e30162ad3b8c6e1f25d272eef7066f0a5b0cc77c"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Fri Sep 11 18:11:52 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Sep 11 18:11:52 2026 -0700"
      },
      "message": "Add FXGC_Heap wrapper and CppHeap support for per-document heap\n\nIntroduce FXGC_Heap to support both standalone cppgc::Heap and attached\nv8::CppHeap. Provide FXGC_CreateCppHeap() to configure a v8::CppHeap\nfor attachment at isolate creation time when isolate-per-document mode\nis enabled. Standalone heaps continue to be used when\nisolate-per-document mode is inactive.\n\nTAG\u003dagy\nCONV\u003dcddd51c4-8efc-4ad4-b0cf-377b846e0dcf\n\nBug: 531975357\nChange-Id: I6ab2268a50362d373681314adea94f726378f3de\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/157252\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "e30162ad3b8c6e1f25d272eef7066f0a5b0cc77c",
      "tree": "cb6cebbfceab3742a08bb5fc19077e584f280746",
      "parents": [
        "a32bca6be294b8e17e6a3cc3e9517f0d150103a5"
      ],
      "author": {
        "name": "Lei Zhang",
        "email": "thestig@chromium.org",
        "time": "Fri Sep 11 17:27:04 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Sep 11 17:27:04 2026 -0700"
      },
      "message": "Fix punctuation check in CPVT_Section\n\nIn IsPunctuation(), change `word \u003c\u003d 0x0094` to `word \u003d\u003d 0x0094`. The\npre-existing typo incorrectly classified all characters in the range\n[0x0080, 0x0094] as punctuation. This caused 0x0080 (Euro sign) to be\ntreated as punctuation rather than a prefix currency symbol in\nNeedDivision(), incorrectly breaking it away from following numbers\nduring CPVT_Section::Rearrange().\n\nUpdate CPVT_SectionTest.OutputLines_Multiline_CurrencySymbol\nexpectations accordingly now that Euro symbol correctly stays grouped\nwith following numbers.\n\nTAG\u003dagy\nCONV\u003d1462813b-6927-4f0b-9648-a61f66bc08b0\n\nBug: 557320960\nChange-Id: Ibf63124f06acca9b390e12270645f6f32c101330\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/157291\nReviewed-by: Andy Phan \u003candyphan@chromium.org\u003e\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "a32bca6be294b8e17e6a3cc3e9517f0d150103a5",
      "tree": "c2e3381fbc6aaf78981d398581c0f1e1a5efaad9",
      "parents": [
        "7720c8b5eedec9a4acd78f995177a7a38bd6db21"
      ],
      "author": {
        "name": "Lei Zhang",
        "email": "thestig@chromium.org",
        "time": "Fri Sep 11 17:08:22 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Sep 11 17:08:22 2026 -0700"
      },
      "message": "Demonstrate CPVT_Section line breaking bug with prefix currency symbols\n\nAdd CPVT_SectionTest.OutputLines_Multiline_CurrencySymbol to demonstrate\na line breaking bug when calling CPVT_Section::Rearrange().\n\nInside cpvt_section.cpp, IsCurrencySymbol() classifies 0x0080 (Euro) as\na currency symbol, and IsPrefixSymbol() checks IsCurrencySymbol() so\nthat currency symbols stay grouped with the following number. However,\nIsPunctuation() checks `word \u003c\u003d 0x0094`, which incorrectly classifies\n0x0080 as punctuation. In NeedDivision(), the IsPunctuation() check\nprecedes the IsPrefixSymbol() check, causing 0x0080 to be treated as\npunctuation instead of a prefix symbol. Consequently,\nCPVT_Section::Rearrange() breaks 0x0080 away from the following number\nacross lines, whereas other currency symbols like \u0027$\u0027 stay grouped with\nthe number.\n\nTAG\u003dagy\nCONV\u003d1462813b-6927-4f0b-9648-a61f66bc08b0\n\nBug: 557320960\nChange-Id: Ia1e2c7c49bd2b28396ebbd0a109480f34b52fd84\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/157290\nReviewed-by: Andy Phan \u003candyphan@chromium.org\u003e\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "7720c8b5eedec9a4acd78f995177a7a38bd6db21",
      "tree": "29fc3fe27e9fd3d56c62d72a5f12908688a5868f",
      "parents": [
        "2e017ed40229d88ac293865ab057036f62dc7eb3"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Fri Sep 11 16:57:44 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Sep 11 16:57:44 2026 -0700"
      },
      "message": "Convert much of CFXJS_Engine to use google_style local names\n\nNo functional change intended.\n\nChange-Id: I2bea0ab2eed6119dec287ea35100bafdae0e6633\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/157390\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "2e017ed40229d88ac293865ab057036f62dc7eb3",
      "tree": "a2c14910c48af0049de34ea2c25856740668c9c5",
      "parents": [
        "a5a7089234f121990b336b3841008009dca143bf"
      ],
      "author": {
        "name": "Lei Zhang",
        "email": "thestig@chromium.org",
        "time": "Fri Sep 11 16:45:44 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Sep 11 16:45:44 2026 -0700"
      },
      "message": "Fix clip box calculation in CFX_PSRenderer::SetClip_PathFill()\n\nIn CFX_PSRenderer::SetClip_PathFill(), replace the manual coordinate\ncalculations with `clip_box_.Intersect(rect.GetOuterRect())`. Calling\n`rect.GetOuterRect()` matches CFX_PSRenderer::SetClip_PathStroke() and\nrestores the logic from before CL [1].\n\nUpdate PSRendererTest.SetClipPathFill to remove the TODOs and assert the\ncorrect clip box values.\n\n[1] https://codereview.chromium.org/2612243005\n\nTAG\u003dagy\nCONV\u003d8f063108-e7ca-41cf-8504-4967b5566063\n\nBug: 553140224\nChange-Id: Ic4cdce68e24f48d9660d7a1fbde7f116620284a5\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/157312\nReviewed-by: Andy Phan \u003candyphan@chromium.org\u003e\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "a5a7089234f121990b336b3841008009dca143bf",
      "tree": "52e97a452c1b5214410075c2f20a3a723242c193",
      "parents": [
        "eca6654bfd89947d4f7c733ffa371b1347a78115"
      ],
      "author": {
        "name": "Lei Zhang",
        "email": "thestig@chromium.org",
        "time": "Fri Sep 11 16:45:12 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Sep 11 16:45:12 2026 -0700"
      },
      "message": "Add unit test for CFX_PSRenderer::SetClip_PathFill()\n\nAdd PSRendererTest.SetClipPathFill to test the clip box calculation in\nCFX_PSRenderer::SetClip_PathFill() and demonstrate the current buggy\nbehavior. Add TODOs for fixing them.\n\nTAG\u003dagy\nCONV\u003d8f063108-e7ca-41cf-8504-4967b5566063\n\nBug: 553140224\nChange-Id: I8bdcb3b58dd4009234ac01f17790580053a279f9\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/157311\nReviewed-by: Andy Phan \u003candyphan@chromium.org\u003e\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "eca6654bfd89947d4f7c733ffa371b1347a78115",
      "tree": "a73d58cce4c12ae5c29856a68ebe1f1ff48dee2b",
      "parents": [
        "44742cbf138c3711a900a45f678acb1fd211e498"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Fri Sep 11 15:54:18 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Sep 11 15:54:18 2026 -0700"
      },
      "message": "Provide shared CFX_V8ArrayBufferAllocator instance\n\nAdd CFX_V8ArrayBufferAllocator::GetSharedInstance() to return the\nprocess-shared, intentionally leaked array buffer allocator instance.\n\nUse this shared instance in FXJS_GetIsolate() and delegate\nFPDF_GetArrayBufferAllocatorSharedInstance() to it, eliminating the\nredundant g_arrayBufferAllocator global pointer in cfxjs_engine.cpp\n\nThis avoids duplicate allocator instances, ensures safe lifetime\nacross library release calls, and allows multiple isolates to\nconsistently share the same thread-safe allocator as expected by V8.\n\nTAG\u003dagy\nCONV\u003dcddd51c4-8efc-4ad4-b0cf-377b846e0dcf\n\nChange-Id: I112c965d0633676c97e3f8f76b0a442c6f844cc2\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/157370\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "44742cbf138c3711a900a45f678acb1fd211e498",
      "tree": "e434506f051f05e4e2b9b342bcfa2e9c62eceadc",
      "parents": [
        "25a20ec8b38f22d18325ad3882f6d63a04d687b6"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Fri Sep 11 14:30:59 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Sep 11 14:30:59 2026 -0700"
      },
      "message": "Make FXJS object definition IDs constexpr constants.\n\nSupport multiple isolates by making FXJS object definition IDs\ncompile-time constants. This avoids re-assigning over static\nvariables for each new isolate encountered during initialization.\n\nTAG\u003dagy\nCONV\u003dcddd51c4-8efc-4ad4-b0cf-377b846e0dcf\n\nChange-Id: I798fa9d4770785e98ff9dbcc0d9c6fd7cdd5c9d5\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/157350\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "25a20ec8b38f22d18325ad3882f6d63a04d687b6",
      "tree": "7e3aa393bbba34aa0170b6a0e870b93f5a21ae1d",
      "parents": [
        "83cc01697f71f9fe8a272de9c45664a530a00e12"
      ],
      "author": {
        "name": "Aryan",
        "email": "aryankrishnan4b@gmail.com",
        "time": "Fri Sep 11 13:48:49 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Sep 11 13:48:49 2026 -0700"
      },
      "message": "Consolidate predictor switching into image_predictors\n\nThis CL moves the switch statement that selects and applies PNG, TIFF,\nor no predictor out of FlateModule and into a new helper function,\nApplyPredictor(), in image_predictors.cpp.\n\nThis refactoring centralises predictor dispatch logic within the\nimage_predictors module, improving encapsulation and reducing code\nduplication across flate decoding components and prepares it for use in\nBrotli.\n\nBug: 550512275\nChange-Id: Ic44a7f643375385945dc11979c35aca70eabae38\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/156770\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\nReviewed-by: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "83cc01697f71f9fe8a272de9c45664a530a00e12",
      "tree": "078948152aeac6ed9638507b741da1b7489dbb08",
      "parents": [
        "902614110592f62929b75ad59ad225817917f1be"
      ],
      "author": {
        "name": "Lei Zhang",
        "email": "thestig@chromium.org",
        "time": "Fri Sep 11 13:22:38 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Sep 11 13:22:38 2026 -0700"
      },
      "message": "Better document FPDF_GetMetaText() behavior\n\nAdd more comments to public/fpdf_doc.h to explain how FPDF_GetMetaText()\nhandles various error conditions.\n\nBug: 555280403\nChange-Id: Iedc66daa541a78b40759985a64973aa02fcf8a52\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/157310\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\nReviewed-by: Andy Phan \u003candyphan@chromium.org\u003e\n"
    },
    {
      "commit": "902614110592f62929b75ad59ad225817917f1be",
      "tree": "665ba7ec1385113e1412349d59add6d472978b96",
      "parents": [
        "96fade8f9e83ef08c4f5404c6ae4a5ad0ed9b192"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Fri Sep 11 09:49:44 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Sep 11 09:49:44 2026 -0700"
      },
      "message": "Move engine refcount from global state into CFXJS_PerIsolateData\n\nCurrently, CFXJS_Engine tracks engine instances using the global\nvariable g_isolate_ref_count, which is only incremented and decremented\nwhen GetIsolate() equals g_isolate.\n\nMove `g_isolate_ref_count` into CFXJS_PerIsolateData, and increment and\ndecrement it on the isolate\u0027s data directly in InitializeEngine() and\nReleaseEngine(). This ensures that CFXJS_PerIsolateData is preserved for\nas long as any engine remains active on that isolate.\n\nTAG\u003dagy\nCONV\u003dcddd51c4-8efc-4ad4-b0cf-377b846e0dcf\n\nChange-Id: If9c9d66e3aac210fde68ed1f5e4eb03081f7822d\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/157270\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "96fade8f9e83ef08c4f5404c6ae4a5ad0ed9b192",
      "tree": "f1af5f77c2b3c07a3bd00e3e95d155266fb126c1",
      "parents": [
        "49026973ee31118cab3fdcfc2ea4c8ac1ddb6904"
      ],
      "author": {
        "name": "Lei Zhang",
        "email": "thestig@chromium.org",
        "time": "Thu Sep 10 22:39:26 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Sep 10 22:39:26 2026 -0700"
      },
      "message": "Use CFX_Point in CFX_GlyphBitmap\n\nCombine 2 int parameters into a CFX_Point, store the CFX_Point, and only\nexpose a single getter. For the 2 callers to the getter:\n\n1) Adjust TextGlyphPos::GetOrigin() to use the new getter.\n2) Rewrite CPDF_RenderStatus::ProcessType3Text() to call\n   TextGlyphPos::GetOrigin() instead of re-implementing it.\n\nChange-Id: I630765fa7f5a30237f4ab9d3cd755849af68390f\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/143455\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\nReviewed-by: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "49026973ee31118cab3fdcfc2ea4c8ac1ddb6904",
      "tree": "8bd15ba2f1264d05be510cf6f604244ee11232a2",
      "parents": [
        "b2dd3c4e61770caa8457d8482decf080594763d1"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Thu Sep 10 11:40:18 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Sep 10 11:40:18 2026 -0700"
      },
      "message": "Add m_IsolatePerDocument to FPDF_LIBRARY_CONFIG for version 7\n\nIntroduce version 7 of FPDF_LIBRARY_CONFIG containing the\nm_IsolatePerDocument flag to configure whether PDFium creates a\ndedicated v8::Isolate per document.\n\nEnforce via CHECK that when m_IsolatePerDocument is enabled,\nm_pIsolate must be NULL.\n\n-- Introduce test at fxjs/ layer for the sake of layering.\n\nTAG\u003dagy\nCONV\u003dcddd51c4-8efc-4ad4-b0cf-377b846e0dcf\n\nBug: 531975357\nChange-Id: I02ef14f03f42217ed0af7090ee4aeb5201db2f79\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/157251\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "b2dd3c4e61770caa8457d8482decf080594763d1",
      "tree": "a65864cbcfaea337a75dcd73bca409f4fb4fbe7f",
      "parents": [
        "551d27e7f31dab21e2a62c5d72113d63c65e468a"
      ],
      "author": {
        "name": "Matt Stark",
        "email": "msta@google.com",
        "time": "Thu Sep 10 08:40:27 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Sep 10 08:40:27 2026 -0700"
      },
      "message": "Fix strict deps violation for pdfium.\n\nBug: 500845363\nChange-Id: Ifd3b8ace5ab01ca8677c14d91aee0d816a6a6964\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/157170\nAuto-Submit: Matt Stark \u003cmsta@google.com\u003e\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nReviewed-by: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "551d27e7f31dab21e2a62c5d72113d63c65e468a",
      "tree": "7a9d16a63f174c7824858b53f018e2667bed41b9",
      "parents": [
        "6ef00856d4121eba1ca745b281e366e006569e3f"
      ],
      "author": {
        "name": "Andy Phan",
        "email": "andyphan@chromium.org",
        "time": "Wed Sep 09 17:35:04 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Sep 09 17:35:04 2026 -0700"
      },
      "message": "Fix 12-hour time parsing in FX_ParseDateUsingFormat()\n\nFX_ParseDateUsingFormat() incorrectly handled 12-hour time parsing with\nAM/PM markers:\n* 12 PM incorrectly rolled over to the next day (hour 24), and 12 AM\n  was left as noon (hour 12).\n* Uppercase markers were not recognized and defaulted to AM.\n* Unrecognized marker characters were silently accepted as AM instead\n  of being rejected as invalid formats.\n\nTrack AM/PM markers case-insensitively, reject invalid markers, and\nproperly convert 12-hour time to 24-hour time. Update test expectations\naccordingly.\n\nTAG\u003dagy\nCONV\u003df96089b4-cb0a-43a3-8bf4-16d4c0790cb3\n\nBug: 555848528\nChange-Id: I5744130e481d41a7139a72d8a90f497e7a44b7ee\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/156912\nCommit-Queue: Andy Phan \u003candyphan@chromium.org\u003e\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "6ef00856d4121eba1ca745b281e366e006569e3f",
      "tree": "be8f89a1a4cb5ba3e85a3f6cf3a84d372ba8736d",
      "parents": [
        "937a50f411f169191f99adb606ad18384260579a"
      ],
      "author": {
        "name": "Andy Phan",
        "email": "andyphan@chromium.org",
        "time": "Wed Sep 09 17:34:58 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Sep 09 17:34:58 2026 -0700"
      },
      "message": "Add test cases for 12-hour time parsing in FX_ParseDateUsingFormat()\n\nAdd test cases for FX_ParseDateUsingFormat() covering 12-hour time\nparsing with AM/PM markers (\"t\" and \"tt\").\n\nInclude TODOs documenting current parsing defects:\n- \"12:xx pm\" rolls over to hour 24 / next day instead of noon.\n- \"12:xx am\" remains at hour 12 instead of midnight.\n- Uppercase AM/PM markers (\"PM\", \"P\") are ignored and treated as AM.\n- Malformed markers are silently accepted as AM instead of being\n  rejected as bad formats.\n\nTAG\u003dagy\nCONV\u003d217915ef-20b8-4b6e-849b-8360d32c7229\n\nBug: 555848528\nChange-Id: I48bcaf60df07c538ff87ef4fb1624fae7f2fdca0\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/156870\nCommit-Queue: Andy Phan \u003candyphan@chromium.org\u003e\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "937a50f411f169191f99adb606ad18384260579a",
      "tree": "e88fde5a2982c10b97b0b70104561a619e9faa7d",
      "parents": [
        "9af929acc34a0e16b56fb6bad1271d35d979e034"
      ],
      "author": {
        "name": "Nico Weber",
        "email": "thakis@chromium.org",
        "time": "Wed Sep 09 17:13:07 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Sep 09 17:13:07 2026 -0700"
      },
      "message": "Use readNBits to read N bits in CJBig2_SDDProc::DecodeHuffman\n\nNo intended behavior change.\n\nBug: none\nChange-Id: I6b5975dad5e6c36862dac4990fde7d60301da2e2\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/157230\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nReviewed-by: Nico Weber \u003cthakis@google.com\u003e\nCommit-Queue: Nico Weber \u003cthakis@chromium.org\u003e\n"
    },
    {
      "commit": "9af929acc34a0e16b56fb6bad1271d35d979e034",
      "tree": "e1f81631dfba02e3d05c075670572af350547d07",
      "parents": [
        "f67ab273476fcd8632a94b4bb5229ab155e918a6"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Wed Sep 09 17:08:11 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Sep 09 17:08:11 2026 -0700"
      },
      "message": "Move default global object template into CFXJS_PerIsolateData\n\nGlobal variables storing V8 objects (such as v8::Global) are bound to\na single v8::Isolate and must not be shared across isolates.\n\nReplace the static g_DefaultGlobalObjectTemplate variable with a member\nstored directly on CFXJS_PerIsolateData, ensuring each isolate manages\nits own default global object template.\n\nTAG\u003dagy\nCONV\u003dcddd51c4-8efc-4ad4-b0cf-377b846e0dcf\n\nChange-Id: I0eaea85cab93939ab1ad9228316b73d290a55f05\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/157250\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "f67ab273476fcd8632a94b4bb5229ab155e918a6",
      "tree": "1a825640187b7ca6838c80d92eed23b7ff3d381b",
      "parents": [
        "b0800210824595a21519cdfea9b21d4f4daed84e"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Wed Sep 09 16:06:23 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Sep 09 16:06:23 2026 -0700"
      },
      "message": "Remove Skia typeface checks in CFX_Face while keeping Fontations\n\nRemove the parallel equivalence assertions, Skia typeface probes, and\ndead typeface checks in CFX_Face, but retain the underlying Fontations\nfont-query functionality.\n\nThe previous attempt to eliminate typeface checks inadvertently removed\nthe Fontations logic because the Fontations queries were nested inside\nPDF_ENABLE_SKIA_TYPEFACE_CHECKS preprocessor blocks.\n\nThis change untangles the two features: it removes the obsolete\npdf_enable_skia_typeface_checks GN argument and preprocessor define,\nwhile preserving a direct runtime backend switch between Fontations and\nFreeType via CFX_Face::IsFontations(). When Fontations is active,\nCFX_Face queries Skrifa for font metadata, metrics, and glyph queries;\notherwise, FreeType remains the active backend.\n\nTAG\u003dagy\nCONV\u003d3038bb05-b8b8-4fd3-9f22-6b3c39a89be3\n\nBug: 42271123\nChange-Id: I8c1fe38acf06477beaf572384aae1b72d8f2d023\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/157112\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "b0800210824595a21519cdfea9b21d4f4daed84e",
      "tree": "8341fcc36847134edbc64112d943c13dd50a334d",
      "parents": [
        "dbe0a5f4c275ae91a9465a335b4883701034eebc"
      ],
      "author": {
        "name": "Nico Weber",
        "email": "thakis@chromium.org",
        "time": "Wed Sep 09 16:06:14 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Sep 09 16:06:14 2026 -0700"
      },
      "message": "Extract a CeilLog2() helper, use it in jbig2 code\n\nNo intended behavior change.\n\nBug: none\nChange-Id: Ie59f8ba24b62d1a55751e4cc902ad42fd2c4a1ff\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/157210\nReviewed-by: Nico Weber \u003cthakis@google.com\u003e\nCommit-Queue: Nico Weber \u003cthakis@chromium.org\u003e\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "dbe0a5f4c275ae91a9465a335b4883701034eebc",
      "tree": "01c4ee87189c17e00ad66358e740b69fcf94bd13",
      "parents": [
        "32d5e1d51f5cfbd29d00f0162bec3f6dbac6f853"
      ],
      "author": {
        "name": "Jeroen Bobbeldijk",
        "email": "jerbob92@gmail.com",
        "time": "Wed Sep 09 15:23:11 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Sep 09 15:23:11 2026 -0700"
      },
      "message": "Extend the JPEG BGR decode to ICCBased color spaces with sRGB profiles\n\nFor an ICCBased color space whose profile is recognized as sRGB,\nCPDF_ICCBasedCS::TranslateImageLine() is exactly fxcodec::ReverseRGB(),\nthe same per-pixel RGB-to-BGR swap that ShouldDecodeJpegToBgr() already\nfolds into the decode for DeviceRGB and CalRGB.\n\nAccept that case too. The component-count equality mirrors the guard in\nTranslateScanline24bppDefaultDecode(), which only translates when the\nsample count matches the color space; profiles that are not supported\nfall back to the alternate color space\u0027s float conversion and profiles\nthat need a real ICC transform keep using the translate path, so\nneither is captured.\n\nBug: 553831655\nChange-Id: I428ae3d08d9020db3aa8840323433c948d7b0ea8\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/156090\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nReviewed-by: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "32d5e1d51f5cfbd29d00f0162bec3f6dbac6f853",
      "tree": "ef68a69837cc095709c4ae62faeb6fb939f098a8",
      "parents": [
        "f0118f1eb5e3b6e9047d7e0597b41196720f8256"
      ],
      "author": {
        "name": "Jeroen Bobbeldijk",
        "email": "jerbob92@gmail.com",
        "time": "Wed Sep 09 14:50:27 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Sep 09 14:50:27 2026 -0700"
      },
      "message": "Decode 3-component JPEGs straight to BGR when the DIB wants BGR\n\nCPDF_DIB stores 24bpp images as FXDIB_Format::kBgr, so for the common\nscan population -- 8 bpc 3-component DCTDecode data in DeviceRGB or\nCalRGB with the default Decode array and no color key -- GetScanline()\nruns TranslateScanline24bppDefaultDecode(), whose whole job on that\npath is a per-pixel RGB-to-BGR byte swap into line_buf_. Every decoded\nscanline is copied once just to exchange two bytes per pixel.\n\nlibjpeg-turbo can emit the swapped order itself: with\nout_color_space \u003d JCS_EXT_BGR the decode pipeline is unchanged and the\ncolor converter stores its three converted samples at exchanged\noffsets, so the per-sample values are identical to a JCS_RGB decode.\nMerged-upsample selection treats the two layouts identically, the SIMD\nconverters are per-layout instantiations of one template, and the\nconverted values do not depend on the store order.\n\nJpegModule::CreateDecoder() gains prefer_bgr_output. The libjpeg\ndecoder honors it only when the output would otherwise have been plain\n3-component JCS_RGB (raw pass-through YCbCr, grayscale and CMYK\noutputs are untouched), and reports the swap through the new\nScanlineDecoder::ScanlinesAreBgr(). The Skia decoder ignores the\nrequest, and so never reports it.\n\nCPDF_DIB asks for BGR exactly when its scanline path would have been\nthe bare swap: default Decode array, no color key (its comparisons\nread the raw scanline in component order), DeviceRGB or CalRGB (every\nother family goes through TranslateImageLine()), 3 components at\n8 bpc. When the decoder reports the swap, GetScanline() returns the\ndecoder\u0027s scanline directly and the translate step and its copy\ndisappear.\n\nBug: 553831655\nChange-Id: I29b4eaf2e886c88ed19023846e96a05f010be04f\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/156070\nReviewed-by: Tom Sepez \u003ctsepez@chromium.org\u003e\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "f0118f1eb5e3b6e9047d7e0597b41196720f8256",
      "tree": "56b2997a2c2b1d66676b9fb473f19eacc0cceb05",
      "parents": [
        "0615b1549d79fcac67c4574591899f7566850924"
      ],
      "author": {
        "name": "Aryan",
        "email": "aryankrishnan4b@gmail.com",
        "time": "Wed Sep 09 10:59:43 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Sep 09 10:59:43 2026 -0700"
      },
      "message": "Add tests for Brotli /DecodeParms\n\nThis CL adds a test for BrotliDecoding with decode params. The .in file\nwas generated by an AI-generated script which was then edited by the\nhuman.\n\nBug: 550512275\nChange-Id: Idc2ed08f8a92695eeabebdca9f2404917dce2209\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/156210\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": "0615b1549d79fcac67c4574591899f7566850924",
      "tree": "cf421245aa4a95a22101c57b15d9d01e3d87cfce",
      "parents": [
        "d00fbeba2c97fd2e6faabfc4247ef3f7565b1fa5"
      ],
      "author": {
        "name": "Aryan",
        "email": "aryankrishnan4b@gmail.com",
        "time": "Wed Sep 09 10:24:47 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Sep 09 10:24:47 2026 -0700"
      },
      "message": "Extract and validate decode parameters using a helper function\n\nThis CL adds GetAndCheckDecodeParams() to parse and validate decoding\ndictionary parameters into a structured DecodeParams struct.\n\nThis replaces duplicate parameter extraction and validation logic in\nCreateFlateDecoder() and FlateOrLZWDecode() and allows for the similar\ncodepath to be used by BrotliDecode.\n\nBug: 550512275\nChange-Id: Iec23f657303121d8530b04d174b8c42417a670f6\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/155992\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": "d00fbeba2c97fd2e6faabfc4247ef3f7565b1fa5",
      "tree": "b55ca43e9b39b837251eda735692174934d736b0",
      "parents": [
        "9ce259a0864fd113eff0aa27ccca7dabdcc885f4"
      ],
      "author": {
        "name": "Nico Weber",
        "email": "thakis@chromium.org",
        "time": "Wed Sep 09 10:16:24 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Sep 09 10:16:24 2026 -0700"
      },
      "message": "Several minor huffman-related cleanups\n\n- In jbig2_context.cpp, rename nTemp to temp as requested in\n  https://pdfium-review.googlesource.com/c/pdfium/+/156810\n- Move HuffmanAssignCode() from jbig2_context.cpp to\n  jbig2_huffman_table.cpp, as it\u0027s only used there after recent\n  changes (pure code move, no behavior change, no edits)\n- Move JBig2HuffmanCode to jbig2_huffman_table.h as it\u0027s no\n  longer needed in jbig2_context.cpp after the previous bullet\n- Add noexcept to CJBig2_HuffmanTable default ctor, move ctor,\n  and move assignment operator\n\nNo behavior change.\n\nBug: 555145149\nChange-Id: I5c832e2e0fb7e1b0c3782082a0440818ca092ace\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/157190\nReviewed-by: Tom Sepez \u003ctsepez@chromium.org\u003e\nCommit-Queue: Nico Weber \u003cthakis@chromium.org\u003e\nReviewed-by: Nico Weber \u003cthakis@google.com\u003e\n"
    },
    {
      "commit": "9ce259a0864fd113eff0aa27ccca7dabdcc885f4",
      "tree": "724b3bd70da372dfd31c0fb18685ef412489d382",
      "parents": [
        "99cdcffd27600d3e5eb5d4a64cfec834fb1abf50"
      ],
      "author": {
        "name": "Nico Weber",
        "email": "thakis@chromium.org",
        "time": "Wed Sep 09 10:15:23 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Sep 09 10:15:23 2026 -0700"
      },
      "message": "Rename SBHUFFRDX to SBHUFFRDXRDY\n\n`pHuffmanDecoder-\u003eDecodeAValue(SBHUFFRDX.get(), \u0026RDYI)` looked like\na copy-paste error to me. It\u0027s correct, as both RDXY and RDYI are\njust read with built-in table 15. Let\u0027s rename the table name to\nmaybe make this a tiny bit clearer.\n\nNo behavior change.\n\nBug: none\nChange-Id: Id8b3d5a77edc511f81e901df0da7fdc5dc9ae919\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/157211\nReviewed-by: Nico Weber \u003cthakis@google.com\u003e\nCommit-Queue: Nico Weber \u003cthakis@chromium.org\u003e\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "99cdcffd27600d3e5eb5d4a64cfec834fb1abf50",
      "tree": "d3c245736efa48097fa849fe0dac00feab9b10ff",
      "parents": [
        "435dbc5dffcb79a7fd698fbd081d335a99fc1f45"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Wed Sep 09 08:53:34 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Sep 09 08:53:34 2026 -0700"
      },
      "message": "Avoid compiling libjpeg when pdf_enable_rust_jpeg is true\n\nWindows continues to include jpeg_common and //third_party:jpeg for\nJpegModule::JpegEncode (used for EMF printing).\n\n-- Remove skia -\u003e zune setup since PDFium calls directly.\n\nTAG\u003dagy\nCONV\u003dc3f50f4d-d4bd-4291-82fb-209ee1c19248\n\nChange-Id: I7168228367222a97fd1657fdb041fddf4c8e3f85\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/157010\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "435dbc5dffcb79a7fd698fbd081d335a99fc1f45",
      "tree": "a50bd02a8407ce6782d8c273075b78d73b537fec",
      "parents": [
        "742b9d01e6c16806133aaa127a57ba658858e864"
      ],
      "author": {
        "name": "Nico Weber",
        "email": "thakis@chromium.org",
        "time": "Tue Sep 08 19:07:31 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Sep 08 19:07:31 2026 -0700"
      },
      "message": "Remove another duplicated jbig2 huffman code reading loop\n\nFollow-up to https://pdfium-review.googlesource.com/c/pdfium/+/156810,\nimplements CJBig2_TRDProc::DecodeHuffman() in terms of\nCJBig2_HuffmanDecoder::DecodeAValue().\n\nCJBig2_HuffmanTable becomes movable, CJBig2_TRDProc::SBSYMCODES\nbecomes a CJBig2_HuffmanTable.\n\nNo behavior change.\n\nBug: 555145149\nChange-Id: I41b16ed44bcc78dd57e90c86c7943ada2f3402e3\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/157070\nCommit-Queue: Nico Weber \u003cthakis@chromium.org\u003e\nReviewed-by: Tom Sepez \u003ctsepez@chromium.org\u003e\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "742b9d01e6c16806133aaa127a57ba658858e864",
      "tree": "700da687424305bc47727da5e998f59204d0fc8d",
      "parents": [
        "af688e0959a68dfe393de7da89b652ef131fd4dd"
      ],
      "author": {
        "name": "Aryan",
        "email": "aryankrishnan4b@gmail.com",
        "time": "Tue Sep 08 18:47:56 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Sep 08 18:47:56 2026 -0700"
      },
      "message": "Move Flate predictor functions to standalone files\n\nThis CL extracts the PNG and TIFF image predictor implementations from\nflatemodule.cpp into dedicated image_predictors.h and\nimage_predictors.cpp files in core/fxcodec/.\n\nAdditionally, this CL consolidates the predictor functions so they can\nbe reused across different decoders (such as Brotli). Update build\ntargets in BUILD.gn and includes in flatemodule.cpp accordingly without\nchanging existing predictor behaviour.\n\nBug: 550512275\nChange-Id: I6d3401b2fc7ab34c6bafc15ebea69403ea31bb63\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/155991\nReviewed-by: Andy Phan \u003candyphan@chromium.org\u003e\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Aryan Krishnan \u003caryankrishnan4b@gmail.com\u003e\n"
    },
    {
      "commit": "af688e0959a68dfe393de7da89b652ef131fd4dd",
      "tree": "39483660783e1c48ae9d1e969f91fd687a257358",
      "parents": [
        "482ed62233d7fde7e3bd35a26a0af26f03e228b9"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Tue Sep 08 17:03:08 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Sep 08 17:03:08 2026 -0700"
      },
      "message": "Rename confusing bSkipImageTypeCheck argument.\n\nCall this `skip_fallback_type_detection` to clarify that it controls\nwhether fallback image format auto-detection is attempted when\ndetection for the specified format fails.\n\nNo functional change intended.\n\n-- Remove Hungarian notation while at it.\n-- Remove use of \"we\" in comment.\n\nTAG\u003dagy\nCONV\u003daf1738d4-cc84-4bef-92c8-dd9803dee032\n\nChange-Id: I81fac5f9c39e9c19681a9a69f9b41ff368a22aaa\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/157130\nAuto-Submit: Tom Sepez \u003ctsepez@chromium.org\u003e\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "482ed62233d7fde7e3bd35a26a0af26f03e228b9",
      "tree": "90cb6b26dbd93d173b9d79f7df55af87b135ea33",
      "parents": [
        "91f5419bdf57b026872830040d0daa2c66f4cba0"
      ],
      "author": {
        "name": "Miklos Vajna",
        "email": "miklos.vajna@collabora.com",
        "time": "Tue Sep 08 16:54:21 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Sep 08 16:54:21 2026 -0700"
      },
      "message": "Add FPDFPageObj_GetRenderedStrokePattern() API\n\nThis allows getting the rendered bitmap of a stroke pattern of a page\nobject.\n\nChange-Id: I4603be175bfe8721d4e11500afcc2be8c2c9f760\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/154910\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nReviewed-by: Tom Sepez \u003ctsepez@chromium.org\u003e\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "91f5419bdf57b026872830040d0daa2c66f4cba0",
      "tree": "cdc8fedac42a6e2ffe2c493b7d0a8de7ca530492",
      "parents": [
        "0edc2c51443c64b3589c2a919a0c1076c9d5547b"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Tue Sep 08 16:19:41 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Sep 08 16:19:41 2026 -0700"
      },
      "message": "Reject unsupported component counts in JPEG progressive decoder\n\nValidate that the number of JPEG color components maps to a supported\nformat in LibjpegJpegContext before proceeding with detection or\nscanline decoding.\n\nAlso defensively validate format and dimensions in\nProgressiveDecoder::PrepareScanlineResampling.\n\nTAG\u003dagy\nCONV\u003d2f13cec2-82c1-41b9-a78e-6ce7e8e5db88\n\nBug: 557471999, 557634284, 557634759\nChange-Id: Ia1b8d4d4a3b4eb222fc8f182f18ddd48f89910e4\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/157110\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "0edc2c51443c64b3589c2a919a0c1076c9d5547b",
      "tree": "fa6c1aeb2abc03ca83f3432e03e12d7e06c516e7",
      "parents": [
        "2329b18f6235e56496741ab5528a3062a09fb769"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Tue Sep 08 15:45:50 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Sep 08 15:45:50 2026 -0700"
      },
      "message": "Improve error handling in libjpeg encoding\n\nAvoid ignoring fatal errors during Windows JPEG compression by using\nlongjmp to catch failures in libjpeg C wrapper functions, matching the\ndecompression architecture.\n\n-- use modern memory ownership model.\n-- avoid array of [1].\n\nTAG\u003dagy\nCONV\u003d2e125a78-6471-43e2-9eed-d2106f60cbec\n\nBug: 556853443\nChange-Id: I2e5eadc41d277f2098ebc91be91d67578c10301f\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/157030\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "2329b18f6235e56496741ab5528a3062a09fb769",
      "tree": "3dc6ad1a05e83042fb575d379a6506563845cd3e",
      "parents": [
        "cae4b1b6b08628f43d3dcfe8d722cbea8f9064b0"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@chromium.org",
        "time": "Tue Sep 08 15:30:36 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Sep 08 15:30:36 2026 -0700"
      },
      "message": "Revert \"Remove PDF_ENABLE_SKIA_TYPEFACE_CHECKS and dead parity assertions\"\n\nThis reverts commit a0a39c3020260a189c2a066366ffa5487ace2dbc.\n\nReason for revert: Reverted too much code.\n\nOriginal change\u0027s description:\n\u003e Remove PDF_ENABLE_SKIA_TYPEFACE_CHECKS and dead parity assertions\n\u003e\n\u003e These checks were temporary debugging scaffolding to verify parity\n\u003e between FreeType and Skia/Fontations, but are now obsolete and\n\u003e divergent on edge cases. Eliminating them simplifies CFX_Face methods\n\u003e to direct return statements and removes unused Skia header inclusions.\n\u003e\n\u003e Change-Id: I6d03431be951ee856bd2dcde3dcfdb0d115a3183\n\u003e Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/156970\n\u003e Reviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\n\u003e Commit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\n\nTBR\u003dthestig@chromium.org,tsepez@chromium.org,pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com\n\nNo-Presubmit: true\nNo-Tree-Checks: true\nNo-Try: true\nChange-Id: I587788e995165d887e7d9c95aadb3976102c79c3\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/157111\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\nBot-Commit: rubber-stamper@appspot.gserviceaccount.com \u003crubber-stamper@appspot.gserviceaccount.com\u003e\n"
    },
    {
      "commit": "cae4b1b6b08628f43d3dcfe8d722cbea8f9064b0",
      "tree": "2b745556b3bd483b9d5be05cf71f74a71b32d730",
      "parents": [
        "a0a39c3020260a189c2a066366ffa5487ace2dbc"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Tue Sep 08 13:35:07 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Sep 08 13:35:07 2026 -0700"
      },
      "message": "Copy MCC record count in OpenJPEG tile setup\n\nIn opj_j2k_copy_default_tcp_and_create_tcd(), copy m_nb_mcc_records\nfrom the default tile coding parameters along with m_nb_max_mcc_records.\n\nTAG\u003dagy\nCONV\u003da534277b-a66b-488e-ab0a-8833cb8e63ea\n\nBug: 541707261\nChange-Id: Ic9b58719dd662e067751e141782d629e93149bc6\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/157011\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\n"
    },
    {
      "commit": "a0a39c3020260a189c2a066366ffa5487ace2dbc",
      "tree": "395eeb74abbc7317a4993560321d37fe9ecb4cc3",
      "parents": [
        "4a36628222bb647c23b4ef3b8f3fc64e93e1dd3b"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Tue Sep 08 13:19:38 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Sep 08 13:19:38 2026 -0700"
      },
      "message": "Remove PDF_ENABLE_SKIA_TYPEFACE_CHECKS and dead parity assertions\n\nThese checks were temporary debugging scaffolding to verify parity\nbetween FreeType and Skia/Fontations, but are now obsolete and\ndivergent on edge cases. Eliminating them simplifies CFX_Face methods\nto direct return statements and removes unused Skia header inclusions.\n\nChange-Id: I6d03431be951ee856bd2dcde3dcfdb0d115a3183\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/156970\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "4a36628222bb647c23b4ef3b8f3fc64e93e1dd3b",
      "tree": "b1d2f4d8803c73968bc65a5c89782115c6cba6cd",
      "parents": [
        "f91ca5a72358bb0b00b4da9481b21fe668157614"
      ],
      "author": {
        "name": "Tom Sepez",
        "email": "tsepez@google.com",
        "time": "Tue Sep 08 11:52:29 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Sep 08 11:52:29 2026 -0700"
      },
      "message": "Ignore re-entrant form calls during passive FFI callbacks\n\nPassive FFI callbacks (e.g. FFI_OutputSelectedRect, FFI_Invalidate)\nare notifications invoked during internal operations such as painting.\nEmbedders must not re-entrantly execute form actions or load/close\npages during these callbacks.\n\nTrack passive callbacks using CPDFSDK_FormFillEnvironment\u0027s\nin_passive_ffi_callback_ flag, and early-return from entry points\nsuch as FORM_OnAfterLoadPage, FORM_OnBeforeClosePage, and\nFORM_Do*Action when invoked re-entrantly.\n\nActive retrieval callbacks such as FFI_GetPage remain unflagged, as\npage loading is expected in those paths.\n\nTAG\u003dagy\nCONV\u003d9e87637a-cb01-4106-9c04-ad4da437fc61\n\nBug: 556535630\nChange-Id: Id892141ce082cc8895b4ed5dc66af3edaf5ef740\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/156913\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "f91ca5a72358bb0b00b4da9481b21fe668157614",
      "tree": "b160fa72c146d482883bbeb5f457690e7fccb915",
      "parents": [
        "d13ede8e6034ed7a65c4cbd0ab7b76211a63a600"
      ],
      "author": {
        "name": "pdfium-autoroll@skia-public.iam.gserviceaccount.com",
        "email": "pdfium-autoroll@skia-public.iam.gserviceaccount.com",
        "time": "Sun Sep 06 21:46:54 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Sun Sep 06 21:46:54 2026 -0700"
      },
      "message": "Roll Zlib from c5cc9edf8992 to 285e94b8fa95 (4 revisions)\n\nhttps://chromium.googlesource.com/chromium/src/third_party/zlib.git/+log/c5cc9edf8992..285e94b8fa95\n\nIf this roll has caused a breakage, revert this CL and stop the roller\nusing the controls here:\nhttps://autoroll.skia.org/r/zlib-pdfium\nPlease CC akall@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: akall@google.com\nChange-Id: I92895061d92445e2d0da2f2cb23c712efe552eba\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/157090\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": "d13ede8e6034ed7a65c4cbd0ab7b76211a63a600",
      "tree": "7ac69658c996670193c49a5b6896159c0c7f4811",
      "parents": [
        "a4914364994ba99e65711945a86d357747fed390"
      ],
      "author": {
        "name": "Nico Weber",
        "email": "thakis@chromium.org",
        "time": "Sat Sep 05 14:08:24 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Sat Sep 05 14:08:24 2026 -0700"
      },
      "message": "Remove one duplicated jbig2 huffman code reading loop\n\nThe motivation is that I\u0027d like to optimize the huffman symbol\nreading loop that\u0027s currently repeated in\n1. CJBig2_HuffmanDecoder::DecodeAValue()\n2. CJBig2_Context::DecodeSymbolIDHuffmanTable() (for reading `runcode`)\n3. CJBig2_TRDProc::DecodeHuffman() (for reading `IDI`)\n\nI mostly care about optimizing the last one, but it seems nicer to\ndedupe them first.\n\nThis implements the 2nd in terms of the 1st; the 3rd is for a future CL.\n\n* ParseFromStandardTable() becomes ParseFromTable() and receives\n  a HuffmanTable instead of an index. This simplifies the\n  CJBig2_HuffmanTable(int) constructor a bit, which used to\n  load each built-in table in the ctor, and then again in\n  ParseFromStandardTable(). This requires moving `struct HuffmanTable`\n  to the header. (It\u0027s still an internal type, but as it\u0027s used by\n  private functions, we have to move it over. If we wanted, we could\n  put it inside the class, in the `private:` section.)\n\n* Add a constructor that builds a CJBig2_HuffmanTable from just\n  code lengths.\n\n* Call that from CJBig2_Context::DecodeSymbolIDHuffmanTable()\n\nWhile here, add a comment over `lines`, and fix\n`RANDELEN` -\u003e `RANGELEN` typo.\n\nNo intended behavior change.\n\n(Linked bug vaguely related: I want to bump some limit, but things\nare currently very slow with high symbol count, even with the current\nlimit.)\n\nBug: 555145149\nChange-Id: If29d5d11951a47cf7b32f61d6147054f3fffd684\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/156810\nCommit-Queue: Nico Weber \u003cthakis@chromium.org\u003e\nReviewed-by: Nico Weber \u003cthakis@google.com\u003e\nReviewed-by: Tom Sepez \u003ctsepez@chromium.org\u003e\n"
    },
    {
      "commit": "a4914364994ba99e65711945a86d357747fed390",
      "tree": "9b8123f47cf3d7cf6c88c1a293cc164361993730",
      "parents": [
        "272ef3633b0f05896edfdc702d0328ed924e984e"
      ],
      "author": {
        "name": "Andy Phan",
        "email": "andyphan@chromium.org",
        "time": "Fri Sep 04 12:40:05 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Sep 04 12:40:05 2026 -0700"
      },
      "message": "Refactor FX_ParseDateUsingFormat() (2/2)\n\nReplace cascading lookahead checks with direct token length counting:\n- Previously, token lengths 1 to 4 were determined by cascading\n  lookahead conditions with duplicated switch statements for each\n  length.\n- Count consecutive identical format characters up front to determine\n  token length directly.\n- Group lengths 1 and 2 together, since month, day, hour, minute, and\n  second tokens share identical up-to-2-digit integer parsing logic.\n  Only year (\u0027y\u0027 vs \u0027yy\u0027) and AM/PM (\u0027t\u0027 vs \u0027tt\u0027) require length checks.\n\nThis is a pure refactoring with no behavioral changes.\n\nTAG\u003dagy\nCONV\u003df96089b4-cb0a-43a3-8bf4-16d4c0790cb3\n\nBug: 555848528\nChange-Id: I5ae5017f5a90829e55ccba5579ab7c29f0a9aba8\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/156911\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Andy Phan \u003candyphan@chromium.org\u003e\n"
    },
    {
      "commit": "272ef3633b0f05896edfdc702d0328ed924e984e",
      "tree": "219521aa93e28ad793d52cbd71a3f3bcc0074d61",
      "parents": [
        "871067e2f31486095217ccc90f4d294873d008a5"
      ],
      "author": {
        "name": "Andy Phan",
        "email": "andyphan@chromium.org",
        "time": "Fri Sep 04 11:39:10 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Sep 04 11:39:10 2026 -0700"
      },
      "message": "Refactor FX_ParseDateUsingFormat() (1/2)\n\nClean up legacy Hungarian notation and single-letter variable names to\nfollow the style guide. Also use pre-increments and const consistently.\n\nThis is a pure refactoring with no behavioral changes.\n\nTAG\u003dagy\nCONV\u003df96089b4-cb0a-43a3-8bf4-16d4c0790cb3\n\nBug: 555848528\nChange-Id: Ic47035b5d3a4ac9b60e1907a8634bd3ee02ffc3f\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/156910\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Andy Phan \u003candyphan@chromium.org\u003e\n"
    },
    {
      "commit": "871067e2f31486095217ccc90f4d294873d008a5",
      "tree": "5159d2e6c8d99c843e3205f054c996cfca680826",
      "parents": [
        "a043bed4a0d729e474494a5f28c3d1457e06af8e"
      ],
      "author": {
        "name": "Jeroen Bobbeldijk",
        "email": "jerbob92@gmail.com",
        "time": "Fri Sep 04 11:01:44 2026 -0700"
      },
      "committer": {
        "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Sep 04 11:01:44 2026 -0700"
      },
      "message": "Speed up PngPredictLine: hoist row boundaries, carry Sub in registers\n\nEvery neighbor is read through GetLeftValue() / GetUpValue() /\nGetUpperLeftValue(), each of which does a span bounds check plus an\n`i \u003e\u003d bytes_per_pixel` or `empty()` branch, per byte and per filter.\n\nSize the row views once up front and hoist the two special cases out\nof the loops: the first bytes_per_pixel bytes of a row, where the left\nand upper-left neighbors are zero, and the first row of the image,\nwhere up and upper-left are zero. On the first row the Paeth predictor\nalways selects the left neighbor and on the lead bytes it always\nselects up, so those reduce to the Sub and Up filters. The Up filter\nwalks its three rows with fxcrt::Zip(), as do the lead bytes of the\nAverage and Paeth filters.\n\nThe Sub filter gets dedicated loops for 3- and 4-byte pixels that walk\nthe row as fixed-size pixel structs and carry each byte channel in a\nlocal. Its channels form independent additive chains, and the generic\nloop re-reads dest_span[i - bpp] a few iterations after storing it,\nwhich serializes on store-to-load forwarding.\n\nBug: 549230311\nChange-Id: I97629d99f412c2d93bf7961aec00a93bd4d90ac8\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/155510\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"
    }
  ],
  "next": "a043bed4a0d729e474494a5f28c3d1457e06af8e"
}
