NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #370 most downloaded on PyPI
Python bindings to PDFium
Last release today
04 Oct 2026
Ships fairly regularly
a new release about every 2 weeks
Nearly every release is documented
notes for 60 of the last 60 stable releases
3 versions withdrawn
withdrawn after publishing
5 years old
131 releases · first in 2021
One column per quarter.
…safety enhancement and not actually a vulnerability, since under valid cirucmstances we do not envisage a situation where readinto() would fall short…
Runtime
PdfDocument.get_identifier(): Fix a blunder that caused one byte too much to be chopped off.PdfDocument and PdfImage.load_jpeg(): With byte stream input, in the _buffer_reader callback, check that the number of bytes read into the buffer is no less than the buffer's size, otherwise indicate error.@Stjorn filed a security ticket that triggered this change; however we consider this more of a theoretical safety enhancement and not actually a vulnerability, since under valid cirucmstances we do not envisage a situation where readinto() would fall short on data. It's clear enough that it is invalid to modify a file while bound by an object handle, and an attacker being able to do that would imply an already heavily compromised system. No exploit from the heavens. Updated documentation.readinto() raises an exception if it could not consume enough data to fill the buffer.)PdfBitmap, unconditionally call FPDFBitmap_Destroy() when the bitmap is closed/finalized, i.e. including bitmaps created from a native, pdfium-external buffer (the default). The API does not affect external buffers, but assumably should still be called to release the FPDF_BITMAP shell itself.PdfBitmap.close() now warns about being a potentially unsafe operation, since it frees the C-side buffer. Set .warn_on_close = False to silence the warning, if you have made sure your usage is safe.AutoCloseable, avoid assigning self to an instance attribute. This should result in improved GC behavior. Many thanks to James Barlow for pointing this out.PdfAttachment: .{get,set}_desc() to read/write attachment descriptions, and .get_subtype() to obtain the MIME type.PdfBookmark.get_style() and PdfBookmarkStyle.Builds
7913 to 8076.
gn-dist from 2407.3 to 2540.0 (the 2501 build passed unused by pypdfium2).FT_Load_Glyph() somehow corrupting the heap. It seems that this addresses the previously encountered crashes/freezes; however, the exact cause remains elusive. Anyway, many thanks to Hood Chatham for this finding.
Setup
README.md for integration instructions. This also made Python 3.6 compatibility straightforward to restore after all, aligning to a common baseline with pypdfium2 and gn-dist.PYPDFIUM_MODULES={raw,helpers}) and the system-generate target, which had been introduced for pypdfium2's own conda packaging (see below).pyproject.toml migration, since the [project] table does not allow for name to be specified dynamically. This means we could not retain a first-party dynamic setting much longer without impairing the project's progress. Instead we suggest that you simply patch the project name / module include rules (possibly via some kind of automation) if module splitting is needed. This change does not affect the module layout in src/ which upholds the logical separation.26_0 to 17_0 thanks to an upstream contribution. (We have not released any iOS wheels yet, but it is handled in setup.)Conda
Removed pypdfium2's own conda packaging (pypdfium2-team channel), following thorough consideration.
Upstream pdfium-binaries (bblanchon channel) followed suit and removed conda packaging as well, since pypdfium2 was the only known dependent.
anaconda.org that leave maintainers with tradeoffs between release frequency and platform inclusion vs. sustainability.This release was made with the following build strategies:
[macosx_arm64, macosx_x86_64, win_amd64, win_arm64, win32, manylinux_x86_64, manylinux_i686, manylinux_aarch64, manylinux_armv7l, manylinux_ppc64le, manylinux_mips64le, manylinux_mipsle, android_arm64_v8a, android_armeabi_v7a][][manylinux_riscv64, manylinux_loongarch64, manylinux_s390x, musllinux_x86_64, musllinux_aarch64, musllinux_armv7l, musllinux_i686, musllinux_ppc64le, musllinux_s390x, musllinux_riscv64, musllinux_loongarch64, pyodide_wasm32]Caution
The following builds are experimental and affected by, or prone to, major stability issues (e.g. endianness bugs, memory corruption):
[manylinux_s390x, musllinux_s390x, pyodide_wasm32]
Caution is advised when using these builds, as they are not considered production ready.
Commits between 5.14.0b1 and 5.14.0 (latest commit first):
21f85e27 [autorelease main] update 5.14.01a9a921f Code style: change some var == 0 checks to not var46be6578 PdfImage.extract(): improve implementation's code styleb2d146c2 PdfDocument.get_identifier() fix: avoid chopping off a byte too muche856c86a Add an errcheck to PdfAttachment.get_name()080d459a sbuild: fix macOS wheel tag (version)…safety enhancement and not actually a vulnerability, since under valid cirucmstances we do not envisage a situation where readinto() would fall short…
Warning
Due to an oversight, macOS wheels are wrongly tagged for 12_0 in this pre-release, but they actually require 13_0 or later.
Runtime
PdfDocument and PdfImage.load_jpeg(): With byte stream input, in the _buffer_reader callback, check that the number of bytes read into the buffer is no less than the buffer's size, otherwise indicate error.@Stjorn filed a security ticket that triggered this change; however we consider this more of a theoretical safety enhancement and not actually a vulnerability, since under valid cirucmstances we do not envisage a situation where readinto() would fall short on data. It's clear enough that it is invalid to modify a file while bound by an object handle, and an attacker being able to do that would imply an already heavily compromised system. No exploit from the heavens. Updated documentation.readinto() raises an exception if it could not consume enough data to fill the buffer.)PdfBitmap, unconditionally call FPDFBitmap_Destroy() when the bitmap is closed/finalized, i.e. including bitmaps created from a native, pdfium-external buffer (the default). The API does not affect external buffers, but assumably should still be called to release the FPDF_BITMAP shell itself.PdfBitmap.close() now warns about being a potentially unsafe operation, since it frees the C-side buffer. Set .warn_on_close = False to silence the warning, if you have made sure your usage is safe.AutoCloseable, avoid assigning self to an instance attribute. This should result in improved GC behavior. Many thanks to James Barlow for pointing this out.PdfAttachment: .{get,set}_desc() to read/write attachment descriptions, and .get_subtype() to obtain the MIME type.PdfBookmark.get_style() and PdfBookmarkStyle.Builds
7913 to 8076.
gn-dist from 2407.3 to 2540.0 (the 2501 build passed unused by pypdfium2).FT_Load_Glyph() somehow corrupting the heap. It seems that this addresses the previously encountered crashes/freezes; however, the exact cause remains elusive. Anyway, many thanks to Hood Chatham for this finding.
Setup
README.md for integration instructions. This also made Python 3.6 compatibility straightforward to restore after all, aligning to a common baseline with pypdfium2 and gn-dist.PYPDFIUM_MODULES={raw,helpers}) and the system-generate target, which had been introduced for pypdfium2's own conda packaging (see below).pyproject.toml migration, since the [project] table does not allow for name to be specified dynamically. This means we could not retain a first-party dynamic setting much longer without impairing the project's progress. Instead we suggest that you simply patch the project name / module include rules (possibly via some kind of automation) if module splitting is needed. This change does not affect the module layout in src/ which upholds the logical separation.26_0 to 17_0 thanks to an upstream contribution. (We have not released any iOS wheels yet, but it is handled in setup.)Conda
Removed pypdfium2's own conda packaging (pypdfium2-team channel), following thorough consideration.
Upstream pdfium-binaries (bblanchon channel) followed suit and removed conda packaging as well, since pypdfium2 was the only known dependent.
anaconda.org that leave maintainers with tradeoffs between release frequency and platform inclusion vs. sustainability.This release was made with the following build strategies:
[][macosx_arm64, macosx_x86_64, win_amd64, win_arm64, win32, manylinux_x86_64, manylinux_i686, manylinux_aarch64, manylinux_armv7l, manylinux_ppc64le, manylinux_mips64le, manylinux_mipsle, android_arm64_v8a, android_armeabi_v7a][manylinux_riscv64, manylinux_loongarch64, manylinux_s390x, musllinux_x86_64, musllinux_i686, musllinux_aarch64, musllinux_armv7l, musllinux_ppc64le, musllinux_s390x, musllinux_riscv64, musllinux_loongarch64, pyodide_wasm32]Caution
The following builds are experimental and affected by, or prone to, major stability issues (e.g. endianness bugs, memory corruption):
[manylinux_s390x, musllinux_s390x, pyodide_wasm32]
Caution is advised when using these builds, as they are not considered production ready.
Commits between 5.13.0 and 5.14.0b1 (latest commit first):
3859503f [autorelease main] update 5.14.0b135304ab2 Prepare for a beta releasef9859d3d cli/toc: drop now-unnecessary pdfium version checkd7ab55ea Fix weird changelog wording5bc61b0a Windows SDK install: OptionId.DesktopCPP${ARCH} is now required18e6d92a build_toolchained: Try to fix PORTABLE_MODEd94ce103 Update changelogbe922fb9 Update GNe3a10e81 Apply just update-actions98878bb2 CIBW: fix mac buildc9f6ad82 Try to fix windows build75b41cc7 CIBW: bump manylinux-armv7l-image to 2_3988eaad9f Update lock/distcheck.txt7c8921df Update in-house builds to PDFium 8076aa7cccd9 Fix codespell findings74c4fd8a Changelog clarification4165645d Add PdfAttachment.get_subtype() APIa98751c1 Add changelog entry for _buffer_reader enhancement60cb51c7 Revert the _buffer_writer change & update documentatione72f610d Add size checks to _buffer_reader / _buffer_writerf7e5fa69 docs: update some notes around ctypesgen9c05f47e test suite: fix TOC testcase with python < 3.11e3e150f2 cli/toc: try to fix compatibility with earlier python versions6968a4bd PdfBookmarkStyle: use Flag rather than IntFlag after all.c6f549e3 Fix just check6edd2179 Drop some legacy PDFium version checks5be47af5 Integrate new API FPDFBookmark_GetStyle() (#484)5f874afa Make build_native.py compatible with current pdfium 80708112f9bf Fix bindings caching by resolving the version properlye4411fe1 Check in the data/ directory687469d5 justfile: fix tab vs. space inconsistency again988c35aa Bar invalid version strings & add attestation trusted root checkef7c7794 CLI: import pypdfium2 directly, not pypdfium2._helpersa79b32eb style nit: normalize fR to rfe760cbda Apply just update-all-pinscbb5656b Apply zizmor help[self-repository] rule auto-fixesd71af776 Clean up unwanted modules from caller-facing namespacead5f7684 Misc nitse04e9af8 Add some protection around FPDFPageObj_GetType()de6c0552 Prettify PdfObject constructor impl12cef98f changelog/comment/check nits again7d6fd423 utils/craft.py: remove now-unused tmp_replace_ctx4ded8cf7 Let autoflake lint utils & remove an unused import therein1f05c656 Inline min pdfium version into system_pdfium.py779178f8 test_attachments: exercise {get,set}_desc() APIsdddb2496 continue on changelogc05d9227 cli: $DEBUG_AUTOCLOSE: fix wrong default3ec77181 Comment nitse46bcf67 CLI: proper env var reading4efb5217 justfile: fix what is the first command1762d65e build_native: add a note how to re-vendor ICU after a non-vendored build46062fb0 ninja: build in verbose modeb700fc38 stl/keydefaultdict: use multi-assignmente69da4af bitmap doc nitsc672b62c PdfBitmap: only warn on foreign bitmaps by default618061f1 Add changelog entries for AutoCloseable and ctypesgen6b6d13b0 Rearrange upcoming changelogc5f2fb04 cli: better action="extend" backward compatibilityc850bfd7 Rework ctypesgen integration (#483)5cd92eb7 Tweak bitmap and autoclose machinery1887ae2d bitmap: update comments on buffer scoping with adapters96b737d5 Test attachment description through CLI2b493166 fix: PdfAttachment.get_desc(): remove trailing NUL82986878 Reiterate on bitmap docs502c40b5 PdfBitmap: add some more warnings around explicit closing5e098340 PdfBitmap: always call FPDFBitmap_Destroy(), including on native bitmapsba565e58 changelog: ack new attachment APIs1945bc5e pyodide: drop debug symbols, enable pypi upload, update docs2cee7c66 changelog: add a note about module splitting92802b25 pyodide: patch freetype load flags873f26b8 Mark justfile as non-executable9475f40a justfile: fix all sorts of template expansionsdd9ccc1d utils/misc/*.sh: fix shellcheck findingsf768bdc6 Make autoflake happierf70f4cd6 Once again revise the changelog68261318 Integrate new attachments APIs into CLIb605d79e Bind pdfium's new attachment description APIs66c64d38 Rework changelogd12fbc5c justfile nit1a3a434c Continue on justfile6fe20f3a changelog: remove mention of conda-pypia647251f Drop conda packaging, module splitting and system-generate target (#481)abd57cbf justfile updatesf8d794af Reflect lower iOS min version570cdefc Readme: update conda footnote to acknowledge CEP 20b04bef2f Minor comment + justfile improvementsCommits between 7999 and 8076 (latest commit first):
8ca5b735d Rank matching fuzzy suppressions by predicate specificity1ab0e0ffe Fix uninitialized memory read in GetChecksumFromTT()be5ba31f3 Add a GetCachedTTCFace() test case with a large TTC size41d4b344f Add LCD padding and 5-tap filter to stateless CFX_Face::RenderGlyph()124abbcc3 Add Skrifa support for Type 1 fonts in CFX_Face926f032fe Fix a typo in fx_coordinates.h7a8bed496 Update test expectations for Intel Macs with macOS 1540ecb4f46 Add static CFX_GEModule::IsFontations() and IsSkiaRenderer() helpers58d357aac Further improve RTL /ActualText handling in CPDF_TextPage981ffcd82 Turn on normal font hinting in Skia24091288c Implement stateless outline rasterization in CFX_Face::RenderGlyphdb6d9750c Add fallback for fonts without SkTypeface in CFX_SkiaDeviceDriver7dfadb98d Add Fontations glyph rendering pipeline using Skrifa hinted outlines554fa4412 Premultiply alpha when comparing BGRA bitmaps in EmbedderTestf36ba935e Add and use fxcrt::CeilDiv()da9d8c430 Fix form fill environment lifecycle crashes in XFA716607c75 Add find_performance_steps.py to detect CI performance step functionse66f9000e Narrow GDI diff suppressions to gdi_skia for surprise passes43b6ec25c Remove stale mac_x86 Skia diff suppressionsc1092013d Improve test runner suppression handling and failure reportingc2dfc74bf Roll goldctl from c7c91b4c709a to 63df9e9df52eb60996c4a Roll Instrumented Libraries from d15c278eed5d to 423262e4438b (2 revisions)4a9b3d668 Run XFA embedder tests in isolate-per-document mode3f30d5dca Enable isolate-per-document mode in pdfium_test when XFA is enabled1442e4fe0 Add disabled embeddertests for form fill environment lifecycle crashesd793a0ddc Create a per-document v8::Isolate for XFA documentsa5e00c61c Remove the pdfium_diff --fuzzy option and its tolerance parameters1d3371aa4 Remove the pdfium_diff --metrics parity checkb79f4d518 Add --metrics mode to pdfium_diff and shadow-validate in pngdifferbb1f9f71e Remove stale suppressions format_custom_format.pdffc46361ce Remove core/fxge dependency from core/fxcrt/css221fc40e5 Look up the JS runtime in CFXJSE_Engine rather than caching it3dd328a6b Delete duplicate test expectations in testing/resources48af8b610 Fix JS triggered on load bypassing user gesture requirement67e899575 Add some JavaScript tests for textboxes17cf94b52 Revert "Fix mixed-direction line extraction"3e9b2c24c Add FPDFPageObj_GetRenderedFillPattern() API39f22bcdf Update license field in third_party/llvm-libc/README.pdfium644461c3a Convert named action test to embedder test80bccb870 Add FPDFTextEmbedderTest.Arabic regression test6da3530ea Add unit tests for PostScript EMF DC clip box clampinga0ad2ce08 Remove redundant size check in FindBit() in faxmodule.cpp13817c3ff Add operator<< for FX_RECT in fx_coordinates_test_support.h3bd3091c2 In fax decoder, replace kOneLeadPos with countl_zerofa2e5fc21 Process 4 bytes at once in the fax codec's FindBit() routine3f86f877e Expand 1bpp rows to bytes before stretching them horizontallyecbfc062a Consolidate the three suppression files into one4ef1e1b47 Use a standalone cppgc heap for the XFA fuzzer process state862f692af Add font engine and action columns to the suppression files8dff61f33 Remove unused variable in pdfium_test.ccac60fa3da Move core/fpdfapi/edit/cpdf_contentstream_write_utils.cpp to fxcrt.bc80bbdd1 Increase jbig2 limits and roll jbig2 testing corpusf3635dd0d Fix O(n^2) behavior when decoding G4 fax data7a1904397 Remove usage of checkout_wpr_archives gclient var5fe6c25b2 Update BrotliDecoder::Decode() to return FX_INVALID_OFFSET on failuref8ad3e849 Revert "Fix clip box calculation in CFX_PSRenderer::SetClip_PathFill()"9270224a1 [sbom-quality] Switch to abs file paths for License File pathsc929c947c Support DecodeParams in BrotliDecoder9bd9ac2ea Plumb FXGC_Heap through XFA in place of cppgc::Heap5f6ecb0cf Reduce JBIG2 Huffman reading work per bit from O(n) to O(1)72fca0181 Fix BrotliDecode buffer expansion check5fcdcb8be Fix dangling span in ~RustJpegScanlineDecoder()96d91c206 Ignore control characters typed with unhandled modifier chordsc7071596b Roll Memory Tools from 8d3182bb3c86 to 0732f7097d06 (2 revisions)5266b2b9f Roll Depot Tools from 732902ab86f8 to 36a8df4ad006 (122 revisions)506c994cd Revert "Roll Instrumented Libraries from d15c278eed5d to 51898bc68243 (1 revision)"379fa9283 Roll libpng from 6d5341764ef4 to 0179a807421c (1 revision)8943614bf Roll Instrumented Libraries from d15c278eed5d to 51898bc68243 (1 revision)6c8196a14 Make later ToUnicode mappings supersede earlier ones93466ec40 Add FPDFAttachment_GetAFRelationship() API88c60350e Add FXGC_Heap wrapper and CppHeap support for per-document heape30162ad3 Fix punctuation check in CPVT_Sectiona32bca6be Demonstrate CPVT_Section line breaking bug with prefix currency symbols7720c8b5e Convert much of CFXJS_Engine to use google_style local names2e017ed40 Fix clip box calculation in CFX_PSRenderer::SetClip_PathFill()a5a708923 Add unit test for CFX_PSRenderer::SetClip_PathFill()eca6654bf Provide shared CFX_V8ArrayBufferAllocator instance44742cbf1 Make FXJS object definition IDs constexpr constants.25a20ec8b Consolidate predictor switching into image_predictors83cc01697 Better document FPDF_GetMetaText() behavior902614110 Move engine refcount from global state into CFXJS_PerIsolateData96fade8f9 Use CFX_Point in CFX_GlyphBitmap49026973e Add m_IsolatePerDocument to FPDF_LIBRARY_CONFIG for version 7b2dd3c4e6 Fix strict deps violation for pdfium.551d27e7f Fix 12-hour time parsing in FX_ParseDateUsingFormat()6ef00856d Add test cases for 12-hour time parsing in FX_ParseDateUsingFormat()937a50f41 Use readNBits to read N bits in CJBig2_SDDProc::DecodeHuffman9af929acc Move default global object template into CFXJS_PerIsolateDataf67ab2734 Remove Skia typeface checks in CFX_Face while keeping Fontationsb08002108 Extract a CeilLog2() helper, use it in jbig2 codedbe0a5f4c Extend the JPEG BGR decode to ICCBased color spaces with sRGB profiles32d5e1d51 Decode 3-component JPEGs straight to BGR when the DIB wants BGRf0118f1eb Add tests for Brotli /DecodeParms0615b1549 Extract and validate decode parameters using a helper functiond00fbeba2 Several minor huffman-related cleanups9ce259a08 Rename SBHUFFRDX to SBHUFFRDXRDY99cdcffd2 Avoid compiling libjpeg when pdf_enable_rust_jpeg is true435dbc5df Remove another duplicated jbig2 huffman code reading loop742b9d01e Move Flate predictor functions to standalone filesaf688e095 Rename confusing bSkipImageTypeCheck argument.482ed6223 Add FPDFPageObj_GetRenderedStrokePattern() API91f5419bd Reject unsupported component counts in JPEG progressive decoder0edc2c514 Improve error handling in libjpeg encoding2329b18f6 Revert "Remove PDF_ENABLE_SKIA_TYPEFACE_CHECKS and dead parity assertions"cae4b1b6b Copy MCC record count in OpenJPEG tile setupa0a39c302 Remove PDF_ENABLE_SKIA_TYPEFACE_CHECKS and dead parity assertions4a3662822 Ignore re-entrant form calls during passive FFI callbacksf91ca5a72 Roll Zlib from c5cc9edf8992 to 285e94b8fa95 (4 revisions)d13ede8e6 Remove one duplicated jbig2 huffman code reading loopa49143649 Refactor FX_ParseDateUsingFormat() (2/2)272ef3633 Refactor FX_ParseDateUsingFormat() (1/2)871067e2f Speed up PngPredictLine: hoist row boundaries, carry Sub in registersa043bed4a Replace Skia JPEG decoder with direct Rust FFI (zune-jpeg)2621636d3 Fix reversed channel order when loading transfer function array8794e9c27 Clamp transfer function sample values to [0, 255]017295ab7 Implement 50-year pivot for two-digit year parsingb39aa638b Fix weekday formatting in CJS_Util::printd()c60c84f5b Fix leap year calculation in fx_date_helpersf03fe6144 Rename Format::kRgb to Format::kBgr in progressive decoder764f7f917 Return std::optional<uint16_t> from FaxGetRun()d6ac256e9 Bound run lengths in FaxG4GetRow()91d9efc52 Fix typo that prevented LargeImageDoesNotRenderBlank from being disabled5f5ad2c21 Roll back blanket fuzziness in light of better image comparison toolsa4a480f6e Decouple Fontations from Skia to support standalone AGG buildsa75db0dda Enable large window mode for Brotli decoding047ef29f0 Bound the run length in FaxGet1DLine()addccaa23 Add windowed MSE verification to EmbedderTestd2a51d207 Consolidate pixel comparison loop into CalculatePixelsDifferenta4f9c3c5d Introduce DiffOptions aggregate struct for pixel comparisons92afb5664 Support windowed MSE and custom parameters in image differ32b941f74 Update android_ndk_version to 2@30.0.1613853123dc93db4 Update siso_version to efbbe7f1892211b5e9512576843a3c247b6a6d7ccfe3a2413 Update gn_version to 150a9d6ba0aa7f407aa4feeabc5f03ce9aa7e04b297182c08 Roll third_party/clang-format/script/ 6eddfb5ec..705100819 (1 commit)8e247564a Remove inactive owner73b7ef7fc Roll third_party/rust/ 7c4e7d9b0..4dec6f65b (81 commits)0ba187014 Roll testing/scripts/rust/ 6712dc59f..ead1c91bc (1 commit)083f2178c Roll v8/ caa723ab9..df65d5c8f (603 commits)1d751dab3 Roll buildtools, absl, libc++, libc++abi, and llvm-libc52b8727dc Rename variables in flatemodule.cpp to follow snake_casedea29fef3 Clean up flatemodule.cpp74d47ee7f Add tests for ToUnicode mapping precedence59b9c0ae5 Roll third_party/libunwind/src/ ec7ac638d..45120ee23 (3 commits)b56125da4 Roll build, clang, and rust6f6c0a80b Roll third_party/skia/ 7ef86a5b0..5549c93c9 (380 commits; 91 trivial rolls)732796e6e Roll base/allocator/partition_allocator/ 29013c81d..89615a645 (48 commits)6239caf35 Roll tools/win/ 45843c2c1..13cb6e5d2 (1 commit)4f8659541 Roll third_party/freetype/src/ 656cb7777..4800589f7 (10 commits)64af343ea Roll Harfbuzz and icuaed37f0ae Roll Code Coverage from f2c64929fbd5 to e1878fbb1ff7 (4 revisions)f9a8ad16a Roll Catapult from e4d1a01c96de to 50c971fc0958 (10 revisions)6f2272e1f Make third_party/libpng an optional dependency in DEPSb1c9c9c06 Add FPDFBookmark_GetStyle() APIad5bc1361 Add Rust PNG codec backend for testing and remove Skia PNG encoderb1e25a915 Unify PNG codec API under namespace png_codecb132d1cde Add tests for the 24bpp default-decode scanline translated42d3e097 Make recursion variables unsigned in CPDF_SyntaxParser0f6645c0b Reinterpret CStretchEngine destination spans as pixel structs0a809f87c Composite opaque BGR rows via Zip() and skip per-pixel alpha division187ec5a25 Use CPDF_SyntaxParser::kParserMaxRecursionDepth in CPDF_StreamParser921adfa17 Reorganize testing/ directories and PNG codec structure679c5ca48 Fix annoying Clippy warnings in Rust codec and font code9a7ad119f Fix Rust BMP/PNG build rules for embedders463e0c5a0 Move PNG implementation files to testing/utils2089ec148 Fix unit_test broken in prior commit.813359800 Replace Skia BMP decoder with direct Rust FFI (image crate)5dd9f2f27 Add still more unit tests for BMP progressive decoding1458c54bc Add unit tests for BMP progressive decoding edge casescd0673cc5 Roll build/ 617bbaced..299066ef2 (3 commits)98f454243 Replace Skia PNG decoder with direct Rust FFI (png crate)bd682d8a6 Add unit test for PNG decoding with gAMA chunkc9def552a Speed up CStretchEngine: Zip() the tap loops, interchange StretchVertd0f00ac9c Keep annotation AP BBox when resizing3cbcab325 Split up CPDF_StreamParser::ReadNextObject()5c96edb22 Use Google C++ style in CPDF_StreamParser::ReadNextObject()162c9521f Roll goldctl from 61fc12903d68 to 9379dad302e0e2fba6a92 Change CPDF_StreamParser::GetNextWord() to return a bool7af613683 Make fp16 DEPS entry conditional on checkout_v8784a524dd Add FPDFPath_GetBezierControlPoints() API2ca2e91de [DEPS] replace internal python3 usage with DEPS provided one.277d0d8b2 [DEPS] Add CPython CIPD package for hermetic Python toolchainc7a22e110 Simplify various STL operationsec7ac67b6 Replace C-style casts with checked_cast for uint8_tce456f5e2 Replace C-style cast with FX_SAFE_UINT32 in scanline decoder5a20d8eca Roll build/ 06f91b7a8..02e5d563d (55 commits)c623d3113 Reduce TIFFFaxTabEnt size to save .rodata space2e7f123a9 Roll build/ 0d8b711d9..06f91b7a8 (1 commit)78adc7c30 [DEPS] update gn and siso version.24765cea6 Remove temporary pdf_enable_rust_jpeg override in pdfium.gni7aac65de9 Support Skia/Rust-based JPEG decoding in ProgressiveDecoderd62a2d01f Harmonize test image suffix order and rename local pixel expectations4f3ac49ce Replace or remove some C-style casts in basicmodule.cpp9ce000987 Use Dragonbox to format floating-point numbers in content streams29fe6d617 Add unit tests for CPDFContentstreamWriteUtils5e7f267e0 Expose Rust decoder features and enable fuzzy matching in test runnere7961d624 Add dual max delta and MSE criteria for image fuzzy matchingae277bf21 Fix crash on invalid object numbers in xref tablee186963a5 Roll base/allocator/partition_allocator/ 2723da2d1..29013c81d (35 commits)365a1414e Make jinja2 and markupsafe DEPS entries conditional on checkout_v82beaa88f1 Roll abseil, buildtools and libc++5da3e7254 Replace DCHECK() checks with DCHECK_NE()28d2c7aee Add missing include in cfxjse_formcalc_context.cpp4dfa7d73c Replace CHECKs() in png_encode.cpp with CHECK_GE()ec4f56e97 Roll Memory Tools from a7e928b8bb8d to 8d3182bb3c86 (1 revision)4b1d0e020 Roll Depot Tools from 1709e20d5ca2 to 732902ab86f8 (81 revisions)1348385bb Roll clang and rust09c945609 Roll build/ 73c0fa98c..0d8b711d9 (122 commits)875172eae Replace generic DCHECK checks with specific operator variants34cb5701b Enforce GN build constraints for pdf_enable_rust_jpeg in pdfium.gni04a05a5b8 Support Skia/Rust-based JPEG decoding in JpegModuleacf52a0b0 Relayout and repaint text immediately in CPWL_EditImpl::SetTextDirectionfd771362e Implement SkiaScanlineDecoder for JPEG decoding via Skia3a5305301 Support Ctrl+Y for Redo in CPWL_Editfb291235a Handle SelectAll and Undo/Redo in CPWL_Edit::OnKeyDownInternal()bf68edf7b Add baseline embedder tests for OnKeyDown shortcuts3efbe60cf Extract LibjpegScanlineDecoder from JpegModulea178a0ebe Move jpegmodule.cpp to libjpeg_scanline_decoder.cpp6d6af7512 Handle CFX_BidiResolver failure in CPVT_Section694c027e9 Add unit tests for JpegModuled6eec1265 Add unit test for CPVT_Section::OutputLines() on an empty section6f8882cc2 Remove per-codec pdf_enable_xfa_ GN arguments and macros78ba1465f Migrate PNG decoder to ProgressiveDecoderDelegate and evacuate state3abda657c fxge: fix missing windows include in cfx_renderdevice.h17c6f449c Use LoadScopedSavedPage() in embedder testsc36f3d81f Migrate JPEG decoder call into ProgressiveDecoderContextDelegate2ba254b6a Roll Zlib from 8b3aa8a1cd75 to c5cc9edf8992 (2 revisions)a53429a5 Avoid deprecated practice (direct CLI use of pypdfium2 module)
pyemscripten_2026_0_wasm32 (Pyodide) build support added. However, the resulting builds are flaky at runtime and subject to various types of random crashes. Freezes on shutdown have also been observed.cached_property since 5.8.0. (Earlier versions that did not make extensive use of cached properties might work but have not been explicitly tested.)functools.cached_property and the faulty functools.lru_cache() based backport with our own, backward compatible cached_property implementation along with thorough documentation.setuptools 59). This had probably been broken for a long time. (A few non-breaking issues remain, e.g. for some reason we end up with a purelib directory, but it should be platlib.)>=3.8 at this time (3.6 compat not being a priority in that case), but you can install with --no-build-isolation and let the reference bindings be used, or try adding ctypesgen's src/ to PYTHONPATH to bypass setup, and see how it goes.pyproject.toml. That said, we are happy to restore compatibility at this point, and fix any unintentional breakage.MANIFEST.in missing Windows spoof headers, which resulted in subtly incorrect bindings when installing from an sdist on Windows, as seen in test failures. (Release wheels have been unaffected and passed the test suite, so this issue went unnoticed for a while.)gn-dist from 2407.1 to 2407.3. Made its setup python 3.6 compatible likewise (wheels should have worked before now). Changed versioning and release process so that CI no longer needs to push to the repository (may eventually become a blueprint for pypdfium2 itself). More documentation added, including manylinux2014 POC.*.egg-info/ and build/ before packaging, to avoid mad file inclusion bugs (ran into this while working on setup include rules).pyproject.toml).pip should be available to Python >= 3.9. For compatibility with older versions, feel free to use ./utils/misc/install_dep_group.py.pip install. Always use virtual environments in CI. Use lockfiles in sensitive areas (e.g. publish jobs).setupsrc/ and utils/.ubuntu-24.04.setupsrc/ share code from src/ through a pypdfium2_cfg._shared submodule that can be added to sys.path.This release was made with the following build strategies:
[macosx_arm64, macosx_x86_64, win_amd64, win_arm64, win32, manylinux_x86_64, manylinux_i686, manylinux_aarch64, manylinux_armv7l, manylinux_ppc64le, manylinux_mips64le, android_arm64_v8a, android_armeabi_v7a][manylinux_mipsle][manylinux_riscv64, manylinux_loongarch64, manylinux_s390x, musllinux_x86_64, musllinux_aarch64, musllinux_armv7l, musllinux_i686, musllinux_ppc64le, musllinux_s390x, musllinux_riscv64, musllinux_loongarch64, pyodide_wasm32]Caution
The following builds are affected by known, major issues (e.g. endianness bugs, crashes, freezes) and are NOT considered ready for production use:
[manylinux_s390x, musllinux_s390x, pyodide_wasm32]
Commits between 5.12.1 and 5.13.0 (latest commit first):
a4659102 [autorelease main] update 5.13.09094de35 continue on changelog/docsb89e367a git_net_additions.py: minor tweaks57157e78 readme: don't overdo admonitions033d5ce0 changelog: less waffle5afbd619 install_buildtools: use compat function for dependency group3282e363 Add zizmor to check step07b84aaa Progress changelog6ec38d2a git_net_additions: further improve fallbackb5cdd7c7 git_net_additions: fancier fallback for binary filese20491d3 git_net_additions: account for binary files11c67012 install_dep_groups: do fallback work only if neededfaf70d73 Further tweak & optimize git_net_additions.py73f2fb95 Improve git_net_additions.py7f14c52b Add dev script to analyze net additions60b897d2 justfile: rename some targets58928321 multitest: fix archprefix not being propagatededab09b0 Improve pip install integration (again) (#478)85156e5e fix_venv.py: style nit: align *_exe variables62c070ba Minor justfile/dependabot correctionsbc5a0e0d Update lockfiles via just refresh-all-pins71e3d01c justfile(refresh-conda-lock): comment out version pins99ccdee2 Add scripting to re-generate conda lockfilese50deb68 justfile improvementsd6c0dfe0 justfile: update pip lockfile as well092e4782 justfile: add pinacta0043773 Add lock/distcheck.in50e50027 Create lockfiles for conda (#477)3a054ba3 Update actions with pinact07ae3f12 tagging.py: avoid macho vs. mach_o ambiguity811faae7 Rename simplebase.py to shared_base.pyb9c6ed5c Move utils/misc/update_pip_cool.py to utils/update_pip.py289c74c8 Move get_matrix.py from utils/strategy/ to just utils/84bac78a Move strategy/ into utils/b6d05ef1 Fix reuse lint complianceb7156467 Indicate that pypdfium2_cfg's shared submodule is private6934bc14 Rename setupsrc/spoof_headers to setupsrc/include with Readme4d925fbb incver.py: extract utility for targets formatting after allb25c5505 incver.py: warn about flaky targetsfecb7ea3 Bump gn-dist to 2407.34bc44e32 Continue on changelog87803ef9 Make symlink_py.sh slightly more ergonomic at the call site15096c1d Clarify the changeloga4bf5d75 justfile: pyodide args passthrough1d03d3c0 platforms.rst nits020377f7 Fix footnotes enumeration once againcd6f5dd1 pyodide: use -O2 optimizations after all4e92b51d platforms.rst: improve legendcbc6d4f8 Minor pyodide cleanupse565182e get_matrix.py nit: share inference object across strategies43fb92d4 pyodide: try mild optimization314f4ff5 pyodide debug build4bc45cae pyodide: refrain from explicit symbol collection for now4c62ebc3 Minor pyodide tweaksd66a86ce docs/platforms: order footnotes left->right, top->bottom1f3e3d48 Downgrade i686 build jobs to ubuntu-24.04 base (#476)cb629ae2 pyodide tweaksace3c16b fix buildtools fallback installation9f8970b6 sbuild_one: let gn-dist be implicitly installed if needed0aba4c1d container_driver: fix target inference regex628921a4 fix blunder: add missing pip install prefix393bfdcb readme: drop two notes132782ba justfile: better script recipesc4e1d803 Reactivate conda_raw scheduleb5da824d Fix craft_conda_pkgs.py1dd59832 trigger_conda_raw: add task to reinstate scheduleca4d04a8 sbuild_one: fix: don't pass 'false' as a package namedec52a8f platform.rst: pyodide updates9bce06c0 platform: add a nostalgic footnote about android native build1543e335 pyodide: automate python version alignmentbc5d858a Some build_native.py changes35ea0c16 utils/misc: fix adding setupsrc/ to sys.path7e8cd0ae Fix pyodide test suppression1ebd1efb Move the lesser utils into a misc/ subdirectorye11cecec cibw/pyodide: improve possible test failure suppressionab1c0675 Update changeloge593bfc3 enforce_install.sh needs to be bash after allfd7a270e Add pyodide handlers for cibuildwheel88b27374 Move craft.py and incver.py to utils206e8298 docs/platforms: record pyemscripten64e03bd9 Outsource pyodide build helpersf6019281 Split out pyodide support functions44b8f3e3 Improve pyodide integration2193f3b5 justfile: use tabs after alld0a17a3d build_native(pyodide): improve flags integration0c1d6d37 container_driver: stop handling outdated debian buster91f45aa2 justfile/pyodide: use python -m2ba76300 justfile: consistently use spaces (not tabs)811043c6 build_native: drop an unused parameter8aa1c60d Experimental pyodide build support (#474)23498b3b main.yaml(publish): mention another reason for permission88b1b365 Don't use ubuntu-slim for publish job after all4c3ca8b6 container_driver: target inference95dcc8dd git: ignore-whitespace and ignore-space-change are aliasesbe03b457 pip: require wheel405102f4 Add ref to setup-python issueba0630cc container_driver: add a task0ae55ac5 enforce_install: use sh for musllinux compatibility4fb1615e container_driver: make enforce_install integration nicer2328b425 platforms.rst clarificationcb60fa0e Drop a pointless castb9ea4ce3 Clarify wording174ac185 Continue on container_driver3ffa4089 Adjust dependabot config2be41858 justfile: add venv-create recipeda07e67d Continue on container_driver.py94c1d34f update_pip_cool: limit to python >= 3.6c75fa5d0 Again improve update_pip_cool.py integration2df8f7de container_driver: let caller override the image version18ec175e Further improve update_pip_cool.pya18a7b69 update_pip_cool: python < 3.8 compat fix9072da7b Changelog nitsad217840 update_pip_cool: add hash checking via lockfiles549f4b7e Rename bootstrap_cool_pip.py to update_pip_cool.pya7bfb0a5 Limit bootstrap_cool_pip.py to the calling interpreter8d952524 Properly update pip with cooldown0a839be7 Start writing changelog for next release97d5bac2 Move keydefaultdict to pypdfium2 STL & inherit dict directly244edf4b collect_licenses.py: minor fixcc85f369 On behalf of utils/*.py, extract a simpler subset of base.py3bd8e96c platforms.rst nit764515ab install_step: move comments so they don't impair readabilityf098be87 setup.cfg: update comment on dependency group migration37a18b84 cibw: enable test suite on windows arm6431dd0ad3 Honor cooldown with lockfile6dd46a97 Move zizmor config into .github/54bf7c9c Make lockfile installation nicera5bc3670 REUSE.toml: always pass lists to the path argument53582633 Lock publish requirements707fee16 Replace requirements files with PEP 735 dependency groups (#469)b3f73b6f Add a few tasks & correct whitespace7e69a0ab CI: restore py_vers default to fix sdistdeb7c5bb setup-python: don't set pip-version input after all2f2775e9 get_matrix: improve --py-vers integration6514343c Use 2-step pip update to ensure cooldown where possiblef04169a2 Change pip ecosystem cooldown interval to 7d64ce2dc3 Refrain from hard dependency freeze dates2f881e7a Pin the initial pip version where we can easily144f315d At least try to subject pip itself to a (short) cooldown6354ecd7 CI: improve pip install integration (venv + dependency cooldown) (#468)47677e59 Restore accidentally deleted tests/output/ dire47599c8 tests: remove an outdated commente45c2b5e Merge pypdfium2_stl into pypdfium2_cfgfa35a83f build script nitsa53429a5 Avoid deprecated practice (direct CLI use of pypdfium2 module)822d85bb Make container_driver.py more powerful (#467)840ff1e6 base.py: align PdfiumBinariesMap order48ab1da8 Improve clean_platfiles(), proper cleanupa9d07cb4 Continue improving setup.py879f072b setup.py: remove commented-out bits74882daf Further rework MANIFEST.inba0e5ba5 Continue on MANIFEST.in4f7cebed conda.yaml: be even cleaercbb1ec21 pbin_one: no docker testing for linux_mipslef38ec745 main.yaml, conda.yaml: be clearer about publishing status41645163 More setup corrections26eaa4e4 setup.py: fix broken PYPDFIUM_MODULES={raw,helpers} install2eb9f479 docstring nit950aeb49 Update a gist reference613e6ac7 cross-platform-actions/action doesn't seem to like ubuntu-slimce1eb802 CI: Try changing base runner image to ubuntu-slim116b02c5 Further polish incver.pyddb2779e incver.py: inline a utility function164f5e45 Refine cached_property docse97a7031 incver: move config writing to other function2ecb13e6 incver.py: fix questionable side effect on prev_helpers243c8f5d Overhaul incver script (#466)521537c1 Remove an unused step idb02f4d0a Rename autorelease.py to incver.pyd23632b5 autorelease: make pdfium history opt-in1249fbed changelog.md: take out some excess whitespace3cc3236e Simplify cached_property side note about lru_cachec6513368 Fix native_build.yaml workfloweee6613c pdfium-binaries mipsle builds have arrivedd26f4150 cached_property: add some links6f552008 Python 3.6 compat fixes (runtime & setup) (#465)48189c93 setup.py: use getattr() for editable_mode after allb6b41d18 Simplify _parse_ver_file() and use cached version56b49622 Fix an incorrect if-check in update.py123799da readme: ack conda-pypi230ad8ac Python < 3.8 is broken, this needs to be fixed397216d5 Document 5.12.0 yankCommits between 7947 and 7999 (latest commit first):
e9fc01804 Migrate GIF decoder to ProgressiveDecoderDelegate and evacuate statef13ead992 Remove unused frame parameter from ProgressiveDecoderContext7029ca54e Modernize CFX_BidiResolver unit tests with ElementsAre0d5aa7a65 Validate input boundaries for CFX_BidiResolver line extraction6aee90ba4 Optimize CFX_BidiResolver initialization and restrict inheritance9b6f23989 fxcrt: fix building against system ICU in cfx_bidi_resolver45f7ebce0 Calculate absolute right edge for CPWL_EditImpl selection bounds38f15eb83 Refactor CPWL_EditImpl to use GetWordRect helper7e7198b48 Add pixel tests documenting CPWL_EditImpl selection behaviore3af2d1ea Remove display gamma of 1.7 for Apple devices.68fccd354 Roll third_party/libc++abi/src/ 8f11bb1d4..14cefa839 (41 commits)fa60d89a3 Roll android_ndk_version to 2@30.0.1572963840ac5b5dc Migrate BMP decoder to use ProgressiveDecoderContextDelegate024e42f42 Roll third_party/skia/ 3ba832f86..7ef86a5b0 (378 commits; 68 trivial rolls)900371dc6 Handle NextWord() failure in GetLineCaretX()9a8834cd9 Introduce ProgressiveDecoderContextDelegate header and Format enum7e9f284d5 Roll third_party/rust/ 9bcbc5767..7c4e7d9b0 (62 commits)07c180eae Update siso_version to 7bc9a0bfe050ef97e1712ff61c6f11952799e951f36d5ea2c Update gn_version to 3fd3b0624d8cba16927853600130b2c33d4e79285471608dd Handle bidi_resolver failures in CPVT_Sectionc9918d04d Roll third_party/llvm-libc/src/ 9a821f4e5..6622df0b6 (140 commits)ce16e247b Roll v8/ 7ed96d92b..caa723ab9 (635 commits)eccf09283 Refactor CPVT_Section layout tests to parameterized tests2cbb87156 Add CheckNoIOStreamInHeaders() to PDFium's PRESUBMIT.py2870fa924 Roll Catapult from 2cdd33999350 to e4d1a01c96de (23 revisions)0d5ebf0d5 Roll Code Coverage from 88b5286372e2 to f2c64929fbd5 (9 revisions)d1c7b62ce Roll Instrumented Libraries from e8cb570a9a2e to d15c278eed5d (1 revision)f4facdd26 Introduce CPDF_TextPage::CharType::kActualText for /ActualText684a26afd Roll third_party/harfbuzz/src/ 511df88b8..28f4dc622 (15 commits)f5834bf8f Remove JPEG decoder wrapper and inline progressive decoder helpers915d2b5fa Rename CJpegContext to LibjpegJpegContext and rename files1125be286 Remove TIFF decoder wrappers and inline progressive decoder helpersf1d22ed2e Fix an OpenJPEG double-free on early OOM return9a27bcf2e Roll third_party/libunwind/src/ 1b601b7f0..ec7ac638d (19 commits)5ad8815a6 Rename CTiffContext to LibtiffTiffContext and rename filesad20fa017 Roll third_party/freetype/src/ 12f5eb32a..656cb7777 (6 commits)8ef577df1 Rename variables in CPDF_TextPage::ProcessInsertObject()9463d8224 Avoid overloading CPDF_TextPage::ProcessTextObject()1fd06281b Update CFX_FileAccess_Posix::Open() to use a Bytestringe9eb7171f Remove PNG decoder wrappers and inline progressive decoder helpers18ff8a271 Rename CPngContext to LibpngPngContext and rename fileseac6fea52 Remove skia_bmp_decoder wrapper and inline progressive decoder helpers6e6558c5b Avoid a nullptr dereference in CPDF_TextPage::ProcessTextObjectItems()a4a2d6706 Expose SetTextDirection through public FPDF FormFill APIdd0c5caed Plumb text direction through PWL Window widgets88d59d9f6 Fix live editing overlap for LTR text following RTL text3542e384a Add embedder tests for mixed-direction live editing8ac51c983 Remove obsolete static wrapper methods across progressive decoders3e58f283c Add boolean entries to pieceinfo test filesff4f3a3e5 Add fflush calls in pdfium_test to prevent buffered output truncation993cbfa9f Move progressive decoder contexts to separate files.e98309f29 Fix out-of-bounds index in CFXJSE_FormCalcContext::IsIsoDateFormat66f87ccf7 Update formatting in bitmap and gif decoders4f73137e2 Convert 2 to To in core/fxge/dib/cfx_dibbase.cpp8dbb801d5 Use Zip() in remaining variable stride DIB conversionse2ae6fb05 Use templating and Zip() in ConvertBuffer_Rgb2Gray()5c8ffedbb Virtualize DecodeImage in ProgressiveDecoderContext9ca3ca629 Collapse 5 context members into context_ in ProgressiveDecoder727cfce5c Add test PDFs containing /PieceInfo dictionaries05f523a53 Virtualize ProgressiveDecoderContext and add decoder factory methods3f1af4f68 Set opaque alpha on BMP palette entries and unify palette resamplingb84b57fa1 Unify progressive decoder Status return types59e5ffd2c Improve memory and type safety in CPDF_DIB::GetScanline()2a9bb984e Fix color key masking for images with > 8 bits per pixel3255b0618 Add class comment to CPDF_DIB6394ddee3 Add pixel test for 16-bit grayscale masking513b246bf Roll goldctl from f88222fee08c to 42a268cbf8f71ed609f4f Document CFFL_InteractiveFormFiller::Get*PageView()65db36888 Make embedder test delegates fixture-owned17c6d8dae Fix mixed-direction line extraction62c123004 Add Rust-based BMP decoder2f7a54a92 Partially fix RTL character and line reading order in CPDF_TextPage8f3e90282 Give CFX_BidiString a way to turn off auto-orderinga9e3314a8 third_party/agg23: mark as a fork7bdfa2308 Refactor CPDF_TextPage::ProcessTextObjectItems() to return boolean2c1f4f898 Change CFX_BidiString segment tie-breaking to favor LTRd0d349d9a Rewrite CPVT_Section layout using ICU UBA1f3472191 Add unit tests for empty CPVT_VariableText caret positioningb42527ff6 Add MaybeOwnedDataVector and use in CJBig2_Image668c52076 Add unit tests documenting existing CPVT_Section layout behavioree62d3b91 Introduce TextDirection enum in CPVT_VariableText4403278d5 Introduce CFX_BidiResolver for ICU paragraph layoutb324040a4 Clean up CPVT_Section::OutputLines() implementation16aaf1c51 Fix some looming linker issues with rust codecs8f72ac4dd Add test case for literal Hebrew text preceding /ActualText span5875ad4c3 Remove CPDF_ICCBasedCS::cache_47449e897 third_party/bigint: add the missing README.pdfium file882b7bf23 Add pdf_enable_rust_bmp GN argument and preprocessor macro9e66a384f Rename Hungarian notation in CPDF_DIB::GetScanline()eb68153d4 Reject XFA-only pages in FPDFPage_Flatten()d30ae3ebd Move parts of hebrew_mirrored.in into .fragment files2d60cb9c0 Clean up CPDF_TextPage::SwapTempTextBuf()a55ed9ccf Refactor CPVT_Section::GetWordRangeSpan()45773719c Add /Length1 to hebrew_mirrored.pdf font stream6856a016b Refactor CPVT_Section layout alignment calculationa62f5c48c third_party/NotoSans*: attach bug number to Static98aefa3af Modernize Alignment enum in CPVT_VariableText4fdbe5b53 Refactor ICC color space translation and caching245aaadf7 Extract BmpDecoderDelegate to its own headeraa4c85cd5 Add /FontWeight support to CPDF_Font::GetFontWeight()fd03d98b5 Add seek/position methods and BMP offset clamping to CodecMemorySkStreamb18d018b2 Add pixel test for SMaskInData value 2 in JPXDecode images4485e7ae2 Extract CodecMemoryStream into core/fxcodec/codec_memory_sk_stream.h63649a67d Add more /ActualText cases with LTR text and mixed text19144abc3 Add more /ActualText cases for more LTR vs. RTL variationsd77801fc1 Fix font metrics and loading discrepancies in Skrifa wrapperd2423027e Upgrade libtiff from 4.7.1 to 4.7.2094d98cce Avoid NOTREACHED() in CXFA_TextLayout::LoadText()c33f1f7e2 Roll Depot Tools from 7d99ed58dd53 to 1709e20d5ca2 (88 revisions)3492e7a8f Prevent integer overflow when reserving JPX inline datae3e6ccb31 Add additional parallel validation checks in CFX_Face.510ad85d9 Modernize FX_BIDICLASS, FX_BREAKPROPERTY, and FX_CHARTYPE namesff9b68054 Add parallel checks for additional CFX_Face methods.b6f34c7ce Add test for FPDFImageObj_GetRenderedBitmap() with clip path6ed53b8e0 Pass glyph index to CFX_Face::GetGlyphTTWidth() and GetGlyphBBox().dd3583292 Rename CPDF_Type3Cache::LoadGlyph() to LoadGlyphBitmap().bc71c4432 Test mirror chars with rtl in /ActualText3359b4ad2 Test mirror characters in /ActualText2a6edafd1 Improve V8 embedder data type tag hygiene across FXJS and FXJSE240781b0a Refactor fx_bidi_unittest to use constexpr and kStrb44968594 Fix UBSAN float-cast-overflow error in CPDF_PSEngine::PopInt()bc3c0e2cd Fix unsafe buffers in CompositeRow_Rgb2Mask().5cebac774 Reland "Decode JPEGs at reduced size via libjpeg scale_denom"bedff876b Convert CFX_GEModule::user_font_paths_ to pdfium::span.daa1a5da6 Fix FPDFAttachment_SetStringValue() encoding problemf51ce035d Demonstrate FPDFAttachment_SetStringValue() encoding problemdae75842f Add APIs to read and write attachment descriptionsc040cf961 Roll Zlib from 3246f1b60849 to 8b3aa8a1cd75 (1 revision)Fix missing mkdir call in bindings build (blunder). This particularly matters for PDFIUM_PLATFORM=system-search / fallback setup.
PDFIUM_PLATFORM=system-search / fallback setup.This release was made with the following build strategies:
[macosx_arm64, macosx_x86_64, win_amd64, win_arm64, win32, manylinux_x86_64, manylinux_i686, manylinux_aarch64, manylinux_armv7l, manylinux_ppc64le, manylinux_mips64le, android_arm64_v8a, android_armeabi_v7a][manylinux_mipsle][manylinux_riscv64, manylinux_loongarch64, manylinux_s390x, musllinux_x86_64, musllinux_aarch64, musllinux_armv7l, musllinux_i686, musllinux_ppc64le, musllinux_s390x, musllinux_riscv64, musllinux_loongarch64]No pdfium-binaries update, still at 7947 . Additional builds may use various other versions of pdfium.
Fix missing mkdir call in bindings build (blunder). This particularly matters for PDFIUM_PLATFORM=system-search / fallback setup.
Important This release has been yanked from PyPI. 5.12.1 is a drop-in replacement and fixes a setup blunder. Wheels are valid and effectively identica
Important
This release has been yanked from PyPI. 5.12.1 is a drop-in replacement and fixes a setup blunder.
Wheels are valid and effectively identical to 5.12.1, but the sdist in this release is faulty & may fail depending on which target is chosen.
Requirements
13.0+ is now required for current PDFium (declared in upstream config and confirmed with dylib header inspection). Updated wheel tags accordingly.build_native.py now expects git >= 2.49.0 so we can use modern git clone --revision features.gh is installed, gh >= 2.47.0 will be required, as we now assume availability of the gh attestation subcommand without consulting gh --version.Packaging / CI
Largest CI/workflows rework yet ("Strategic builds"). Many testing gaps filled (see the updated platform support table).
build_toolchained.py, cibuildwheel/build_native.py). This means releases can now be made using any selection of targets/strategies, configurable through workflow inputs on a per-run basis.arch -x86_64 prefix).pypdfium2, gn-dist and the ctypesgen fork. Tightened permissions. Replaced superfluous actions with built-in gh CLI. Use exact commit hash rather than branch name to transfer state between jobs. zizmor compliance (with a few intentional suppressions).Setup
This release was made with the following build strategies:
[macosx_arm64, macosx_x86_64, win_amd64, win_arm64, win32, manylinux_x86_64, manylinux_i686, manylinux_aarch64, manylinux_armv7l, manylinux_ppc64le, manylinux_mips64le, android_arm64_v8a, android_armeabi_v7a][manylinux_mipsle][manylinux_riscv64, manylinux_loongarch64, manylinux_s390x, musllinux_x86_64, musllinux_aarch64, musllinux_armv7l, musllinux_i686, musllinux_ppc64le, musllinux_s390x, musllinux_riscv64, musllinux_loongarch64]Commits between 5.11.0 and 5.12.0 (latest commit first):
38fa93b9 [autorelease main] update 5.12.0d60dbb66 fix: reactivate release environment0be3571f Take out --fail-on-no-commits8b94bcc1 main.yaml: fix loss of $NEW_VERSION2c6259ed autorelease.py: annotate an assertiond3da667f Slightly tweak doc wording987967da autorelease.py: less wafflef1468d83 Record strategies in release notes + fixes (#464)9c2afb22 platforms.csv: align mips64le strategy with profile(default)c38af5d2 pyproject.toml/cibw: env vars should be stringf659f91d platforms: add another explanatory noteb6acbb03 Add initial handlers for mipsle pdfium-binariesbe9ddbd5 Slightly tweak changelogd5151c5e update.py: remove --robust option9c04f5b4 profiles(default): get mips64le from pdfium-binaries4da40886 trigger_* workflows: unlock actually_publishb3df7d51 Strategic builds (#461)c89bf790 Update changeloga3ca5201 Remove input from trigger job after all92b014aa Debug anaconda permissionsafe61cac trigger_conda_raw: unlock actually_publishc7d2a836 Early merge conda workflows from dev branchcd53ce26 Inhibit conda_raw schedule9df9188b conda: use same python executablee19f2992 test suite: now require FPDFBookmark_GetColor() to be present1bd120aa platforms.rst nit03a91080 platforms.csv: mips64 pdfium-binaries are now availablef9723807 test suite: correct a skipif reasonCommits between 7920 and 7947 (latest commit first):
d3e62278d Replace buggy CompositeRowBgraPremul2BgraPremul() with Skia calls599295ae3 Move GetSkiaBlendMode() to fx_dib.hf58005661 Add ScanlineCompositorTest cases for Soft Light blend modeb73691864 Add more ScanlineCompositorTest cases for non-separable blend modes1ad5c0f15 Add ScanlineCompositorTest.CompositeRgbBitmapLineBgra(Premul)Screenfb09d84c5 Revert "Decode JPEGs at reduced size via libjpeg scale_denom"afaf7ae5a Added missing include in cpvt_sectionc57dd61d2 Replace PNG_ERROR_SIZE with a constexpr134c35728 Refactor CPWL_Edit::SetEditCaret() and related codeea8bd0f2f Replace FWLTHEME color and capacity defines with constexprbf829f047 Caret calculation for RTL text in CPWL_Edit802019eec Add CPVT_VariableText layout unit test for GetLineCaretX408c4f675 Interactive UI drawing fixes for pure RTL textd80d2aa7b Add LTR and RTL pixel tests for interactive form textfields009b91d9d Decode JPEGs at reduced size via libjpeg scale_denom446882bdf Support visual rendering for pure RTL text4cac16af7 Add is_rtl boolean to CPVT_WordInfo462748e67 Support pure RTL text in form field through CPVT_section143618f45 Add FPDFText_GetText() embeddertest for RTL /ActualTextfb5c19488 Support brotli in pdfium_test387944dec Add configuration option to control Brotli decoding3cc9dd492 Roll v8/ 0c6c73eea..7ed96d92b (664 commits)65adfd887 Roll tools/win/ faefd1b6f..45843c2c1 (1 commit)af5f76033 Update siso_version to 24b80aff540b202a88417f9f93b0dc86229eca7ad94c34e6e Roll third_party/skia/ e4281d5a7..3ba832f86 (344 commits; 55 trivial rolls)e58f9ca24 Roll third_party/libunwind/src/ d6c7a21e9..1b601b7f075ebd811f Roll third_party/icu/ 3859e64ee..d578f2e8b (2 commits)19456935a Roll third_party/harfbuzz/src/ d639197ed..511df88b8 (28 commits)a9768c56c Consistently use IS_APPLEd84126151 Roll Catapult from a6e9d089883c to 2cdd33999350 (9 revisions)cd8588ace Roll Code Coverage from 06dcbbe49e67 to 88b5286372e2 (6 revisions)2ae8165bc Roll third_party/freetype/src/ b08a2eb0d..12f5eb32a (11 commits)c2c971ad6 Update gn_version to 1d86777e7f2562a86ecea77d1809ac4f82bb5bfe64a68ffb7 Roll base/allocator/partition_allocator/ 390c4b91f..2723da2d1 (31 commits)a35cdcf49 Roll third_party/fp16/src/ 3d2de1816..782eea126 (1 commit)0be884dff Remove -Wc++11-narrowing build rule9b4032ab0 Roll third_party/cpu_features/src/ d3b2440fc..81d13c496c56d58254 Roll third_party/fast_float/src/ 05087a303..34164f547 (29 commits)d904b6b89 Turn on -Wctad-maybe-unsupportedf99384fc1 Roll build, buildtools, clang, rust, and llvm-libc33a499ea1 Use CPDF_Document::New() instead of pdfium::MakeRetain()fc8a4a63a De-templatize StringPoolTemplate into concrete ByteStringPoolb6d9fc615 Add text_form_multiline.in pixel testd8f644d45 Roll third_party/abseil-cpp/ 5e42a36a8..d8e483edd (25 commits)1b2d68ca4 Optimize JBig2ArithCtx size to 2 bytes (75% savings).21770e33d Change TextCharPos::font_style_ to is_cid_font_.9a7fab33f Refactor AP generation loops for reuse and readabilitya618cfef9 Encapsulate font variation and emboldening logic in CFX_SubstFonta6be8be9a Use CFX_RenderDevice static factories across codebase53a619295 Replace GIF defines with enums and constants9ed958ede Introduce static factory CreateFor... methods on CFX_RenderDevice6d6b8fa24 Fix CFX_Color operators to only affect active components3331cbd83 Replace ISLATINWORD macro with a helper functionfc790866b Consolidate CFX_RenderDevice and remove CPDF_WindowsRenderDevicec01585b18 Allow FPDF_SetPrintMode() to be called before library init.369773216 Roll goldctl from 5f1b700481b1 to 39511f7e42628ab68bca0 Use in-header member initializers in CTextOnlyPrinterDriver89ff9f2c3 Refactor CPDF_TextPage::CloseTempLine() to use spans and fxcrt::Zip()c17642b42 Use std::vector instead of std::deque for CPDF_TextPage char lists42cf0f61d Change struct CFX_BidiChar::Segment to have size_t fields3c5d22d25 Move PostScript encoder registration to CFX_GEModule1456fe804 Move WindowsPrintMode to CFX_GEModule64f69426a Add timezone offset to new document creation date58fb450a4 Use form_flags constants in GenerateTextFieldAP()75a5afb45 Change CPVT_Section::OutputLines() to work with spans25b0697af Modernize a for-loop in CPVT_Section::OutputLines()2caf51538 Refactor CPVT_Section::Clear*Words()9649ecb12 Add some unit tests for CPVT_Section89df31707 Document Clear*Words() methods in CPVT_Sectiond77a12a45 PA: Use Alloc() (not inline)8cc4f2174 Encapsulate and rename one CPVT_Section::SearchWordPlace() overloadEdit (2026-07-17): Added the above yank notice, and labelled this release as non-production ready.
5c4d7921 Address a pytest deprecation warning
7891 to 7913.PdfBookmark.get_color() helper added. This is based on upstream's new FPDFBookmark_GetColor() API. Integrated get_color() into pypdfium2 toc CLI. Thanks to Aryan Krishnan for the upstream part.
pypdfium2 toc will not attempt to call get_color() with older pdfium.)manylinux_2_17_{mips64le,mipsle} wheels added to release.
build_toolchained.py is now capable of building these, based on upstream's mips64el and mipsel targets (with minor patches). This took a great deal of tinkering, however.loongarch64, PyPI does not accept MIPS wheels (yet), so they are only released to GitHub.pip actually rejects our wheels because MIPS is not officially part of the manylinux standard and thus not contained in pip's internal whitelist. This can be remedied by re-tagging with wheel locally to match the host's sysconfig.get_platform() value. See pip ticket #14095 for more info.mipsle build is untested (apart from file showing the correct target signature), for lack of a container image and binfmt handler.macholib, which actually runs cross-platform.iOS min version to 26_0. (We do not currently publish iOS wheels but it is handled in setup.)windows.h.pypdfium2_raw, which was broken by setup changes in 5.10.PYPDFIUM_MODULES=raw now requiring a pre-generated version file remains, though.sbuild_one.yaml now also tests Linux targets in Docker, to make sure cross-compiled builds actually work.ubuntu-26.04 runners. Some workflows intentionally stick with ubuntu-24.04 for the time being so we can keep testing older Python versions.get_cross_deps.py: Use GCC 16 on ubuntu-26.04, and GCC 14 on ubuntu-24.04.Commits between 5.10.1 and 5.11.0 (latest commit first):
0168561b [autorelease main] update 5.11.0f601fae5 Fix typo criticized by codespellba507254 Fix blunders in trigger_main.yaml13132a8f Skip test_toc_colorized on windows1f7ea467 changelog: add note concerning conda8c2d9efa conda: implement rebuilds for pypdfium2_helpers7edd3a3b Cherry-pick setupsrc/base.py changes from dev branchc0b0fb2b Update changelog6523086c Cherry-pick TOC bw compat from dev branch into maindc663597 build_native nit: no longer need to pass reset to libpng fetch593b30d7 Update macOS tags in sbuild.yamlaed54d55 Enable augment_sbuild in publish needs653f0926 readme nit4a031ea3 Formenv doc polishing again1d7aa937 Platform detection: check endianness for all linuxese1fb8e72 Improve formenv docs style83e3b969 Align ppc64(le) detection with mipsc28a88fb Add mips tagging handlersb0f98af6 Err out about hardcoded vs. detected version mismatch on CIf7e6adff Slightly tweak auto-tagging integrationaa92ea2c setup.py: swap buildpy_factory() and bdist_factory()0b5bbb6c Reinstate auto-tagging for macOSe63fcd0e install-static-clang: style improvements, prefer space over tab70d8e7bc Drop now-deleted patch from REUSE.tomlb6ca2617 Minor doc polishing4bd5801f Add PdfBookmark.get_color() API (#454)f285769f Rebase bigendian patch for pdfium 791303db64e4 Bump pdfium pins to 791336f6e8bf changelog: ack updated pdfium pinb2ea53b8 Readme: Add another individual to Thanks section & rearrange7ac9333f update.py: IWYUa0076761 android: reveal API levelef675f20 setup: add handlers for upcoming MIPS pdfium-binaries17d720c7 Add "comming soon" indicator to pdfium-binaries mipse89602c2 Refactor clang install (#452)4380293a Effectively revert previous commit45f56308 install-static-clang: use sigstore for attestation verificationc06225d5 sbuild: skip docker test for mipsle85d16103 Bump pdfium pins to 79113728e4ab Update changelog4ab648b8 Slightly update PR templatee2754003 Fix dirty code in build_pdfium_bindings()bb85646e docs/platforms: use different emoji to indicate crosscompe4c61cea Slightly rework conda_raw fixd98adaf5 PLATFORMS.csv: minor correction3d21aab6 REUSE.toml: patches/gcc_cross.patch no longer exists578e6731 readme: link platform support page630dcb88 Reorder PLATFORMS.csvfb5e2796 docs/platforms: add condab87fb267 Continue on platforms docsff02d8a0 Continue on changeloga3ae7a45 mips: improve wheel installation workaround345d7345 main.yaml: fix: set docker_test to false for mipsel2ddb81b9 Make just check happier8306c670 sbuild_one: add taska517282b install-static-clang: add attestation verification1d6d3d35 Slightly improve previous commit, other nits84e4af75 Add MIPS 32-bit little endian to release67e643f9 build_toolchained: again improve mips integration5c3f57ab docs/css: finally, properly style both tablese2a3b20a Continue on platforms.rst CSV75217bcb continue79826629 Add missing version identifiers to windows-sdk-install actionc9fe5dfb Pin some less well known actions to commit hash115d40ed Continue on platforms.rsta65bdb05 Move table CSS back into platforms.rst2c316cc2 Start adding legend. Expand just the table but wrap text.d1e698d2 Continue on PLATFORMS.csvcc0ce644 conda_raw: actual workaround19cf2b93 Revert "See if conda.yaml works with ubuntu-24.04 or if it broke before"064d2526 Try to fix conda_raw packaginga78729da Pin ChristopheLav/windows-sdk-install to commit hash0fe43836 See if conda.yaml works with ubuntu-24.04 or if it broke beforeefb779d1 craft_conda_pkgs: update a comment7402c57a Downgrade more workflows to ubuntu-24.046b14bf72 Update changelog.b06bd3b2 main.yaml: downgrade some targets to ubuntu 24.04a99f7a59 Update changeloga985b509 PLATFORMS.csv: move down mobile platforms691e8dab platforms.rst: expand table to full page sizef428d9a2 Continue tweaking PLATFORMS.csv77d66f5f just docs-open: open browser in background78fb3fc3 Continue on PLATFORMS.csvf4cea189 Determined iOS minver 26.0 using macholibf482a004 PLATFORMS.csv add setup-only platforms3fae49b4 PLATFORMS.csv: correct windows arm64 testing status9b839f86 Improve No AI policy integration6a2875cb PLATFORMS.md: merge version indicator into Release columnf1febf2d Embed PLATFORMS.md into landing page of documentation1ace8074 PLATFORMS.csv: add pdfium version indicator1b854786 PLATFORMS.csv: add color indicators to MinVeredd814db Add PLATFORMS.csv6aa53ffb Slightly update changelog2a09b7e9 document.py/ObjectHolder: use slots8863bffc Minor PdfSysfontListener improvements4d657550 Make reuse lint happyf76a5f33 container_driver refinements1ae41bd4 Downgrade some targets to ubuntu-24.048b7b55c4 patch: add missing toolprefix for linux x86 and ppc64d1aa0c91 build_toolchained: apply gcc_toolchain patch on prefer_gccef11902f CI: use ubuntu-26.04(-arm), windows-11-vs2026-arm, GCC 161dd79eba sbuild(toolchained): give GCC another tryaef596af Debug progressive render final status4777dd1e MIPS build integration improvementscbd4cd95 test_in_docker.sh: add set -exuo pipefail27eb2cfc mips64: suppress a testsuite failure7da5cc20 mips64(le) try to make q&d hack less dirtya9821faa mips64(le): force wheel installation in docker86b60504 add task640c4de0 sbuild: move test targets to avoid distractione3159f1f Add mips64(le) wheel to build matrices and releasea0762983 sbuild: add docker testing3a7fd0b0 Let python script operate the container directly7981bbf2 Changelog correction1173847c Prepare get_container.py for mips64le90e1c22d mips64le -> mips64el124c9757 mips64el build (#450)df3a0db9 build_toolchained: simplify handle_cross() structure4cc36e10 build_native: add MIPS sysroots0609643b Add No AI policy84447518 Relax ctypesgen warning739dee98 Try using spoof windows header on windows itself5c4d7921 Address a pytest deprecation warning32c1e0e1 Restore ability to use pdfium-binaries licenses4a0479ce readme: simplify disclaimer2672ecfe Change bsd.yaml's visible namec9cb0630 main.yaml/test: use req/test.txt69e7b5e3 Aftermath of windows test failure investigation (#448)b0efe105 Fix formenv docs9095492a Fix up changelogcf907296 Add secrets: inherit to conda publish in main.yaml as wellCommits between 7891 and 7920 (latest commit first):
2bb2bde14 Replace FWL_STYLE_WGT defines with WidgetStyle enum and Mask85efaba16 Refactor font mapper logic61c94a7d3 Replace CFX_StandardFont::kNumStandardFonts sentinel with std::optional.86b32b04a Add BrotliDecode filter support for PDF 2.0 streamsefde8a2f1 Be stricter about CFX_StandardFont::Index.5e6d1de50 Rename CFX_StandardFont::StandardFont to CFX_StandardFont::Index.5b0f6c0bb Simplify CFX_StandardFont standard font lookupe326d47e3 Refactor CFX_FontMgr and CFX_FontMapper to break circular dependency41d707e3e Move standard font data and accessors to CFX_StandardFont811f9acf2 Replace FWL_STATE defines with WidgetState enum and Mask64e7c4610 Move StandardFont enum and utilities to CFX_StandardFont.3b97dee7f Replace FX_NUMSTYLE defines with NumStyle enum + Mask49701ff07 Add FPDFBookmark_GetColor public API899e8b210 Replace BOM macros with constexpr constants1b01c2c13 Clean up CPVT_VariableText573758fe2 Pass CFX_FontMapper to SystemFontInfoIface::MapFont5810a9fb1 Refactor CPVT_Word caret calculations28a1fe006 Pass CFX_FontMapper to CFX_FolderFontInfo methods.cc07152b7 Refactor manual font table parsing in CFX_FolderFontInfo21137351b Cleanup CPVT_WordInfo constructors9f7cfd777 Refactor Skrifa integration to use member methods.d5176a442 Remove unused nTotalWord field from struct CPVT_LineInfof00c4b926 Fix exponent parsing in CFGAS_StringFormatter::ParseNum backward loop12159a27c Add -Wlifetime-safety-permissive flag and fix CPDF_DIB lifetime warning.db41668af Rename CPVT_Word member variables to follow Google C++ style75ea0a73e Roll Depot Tools from ed3a6fdd519a to 7d99ed58dd53 (49 revisions)7053128ea Encapsulate CPVT_Wordba7957210 Replace FXFONT_USEEXTERNATTR define with constexpr kFontUseExternAttrb0fd1c328 Make CPDF_Font and CPDF_PageObject Is*() methods wrap As()* methods.3422572b1 Remove flattened fields from AcroForm650083ef0 Make CFX_Face::GetSfntTable() private.fd64125e2 Deduplicate virtual methods for page objects and fonts.c07ab04ab Remove unused getter methods.7f161f017 Make StringViewTemplate constexpr-compatible67d066e39 Combine CPDF_TextPage::AddCharInfoBy*Direction()95cc31594 Use more Google C++ style in CPDF_TextPage91afa2051 Refactor CPDF_SimpleFont hierarchy to introduce CPDF_FaceBasedSimpleFont.6e15aaa4d Defensively protect form fields and dictionary objects.c1b9d163e Implement CFX_FolderFontInfo::GetFontCharset09517ef21 [Android] Rewrite Skia Font Manager in CFX_AndroidFontInfo59f2ef487 Make CPDF_ReadValidator a final class.6c2005b25 [v8] Stop using soon-to-be-deprecated V8 Apis1059f4f0d Add unit tests for CFPF_SkiaFontMgr.d961a56af Add /AGENTS.md and /GEMINI.md to .gitgnore441532108 Refactor/modernize CPVT_Word and CPVT_WordInfo structs9677db7e8 Address post-landing review comments for CL 148813.2fc6b6529 Add one-line comments about what CPDF_ font classes represent.0a4b8de78 Replace the EM_ADJUST macro with a functionee47c0ef8 Clear more object bindings in CFXJSE_Engine destructor.ec2d9a2ae Replace FX_LB short-alias defines with constexpr constantsccfc0838c Split and move Skia font tables to CFX_AndroidFontInfo3e968165f Prepare CFX_FolderFontInfo for Android Refactoringb4bd770b6 Roll Memory Tools from 66b0df34a721 to a7e928b8bb8d (1 revision)a8ad8374d Roll Zlib from 5c1dfd53066b to 3246f1b60849 (1 revision)e1157f05b Roll libpng from 8a5b4ace0c2a to 6d5341764ef4 (1 revision)We are aware that, technically, this is an API-breaking change, but it has been decided not to increment the major version, given that PdfFormEnv 's p…
5.10.0. Due to tag protection from immutable releases, 5.10.0 cannot be deleted.Dependency updates
build_toolchained.py PDFium pin from 7191 to 7891. Despite the gap, this turned out fairly straightforward.build_native.py PDFium pin from 7841 to 7891.gn-dist from 2385 to 2407.1, to match the revision specified in upstream's DEPS file.4.1.0.install-static-clang.sh use latest.build_native.py with GCC, as this mode needs few patches.musllinux_{x86_64,i686,aarch64,armv7l}. Let's see how this goes.pdfium-binaries for some musl targets.Packaging
12_0, as determined by vtool -show-build. (Upstream config no longer specifies a deployment target.)riscv64 wheel's glibc requirement from 2_38 to 2_34 by using upstream's sysroot.API changes
Fixed a long-standing issue concerning formenv autoclose logic.
PdfDocument stores the formenv, but PdfFormEnv referenced back to the parent PdfDocument including in the formenv's finalizer, forming a reference circle / indirect self-reference. This is illegal with weakref.finalize().
Addressing this issue properly required some changes to the public API:
PdfFormEnv: The pdf attribute and parent alias have been removed. Since pdf is created on the caller side, it is expected that callers would access their object directly rather than through the formenv.PdfDocument.PdfFormEnv.close() has been deprecated and is now a no-op. It is superseded by the new PdfDocument.close_forms() API.PdfPage.parent now always points to a PdfDocument, not sometimes a PdfFormEnv.PdfDocument, not sometimes on PdfFormEnv.We are aware that, technically, this is an API-breaking change, but it has been decided not to increment the major version, given that PdfFormEnv's pdf and parent attributes are insignificant to most callers, and removing them helps fix a real issue.
The exact consequences of this self-reference are yet unclear to us, but memory leaks (due to finalizers not being called) and/or corruption seem possible. Thanks to @noxthot for a report that triggered this investigation.
Setup, Build scripts & Workflows
pip install by deferring data files generation into build_py, as suggested in cibuildwheel FAQ. Also, make the DLL path available to the tagging stage.build_toolchained.py: Significantly improved code style. In PORTABLE_MODE, added ability to use a sysroot and/or clang (requires passing --clang-path ...). Fix install_buildtools() by calling it before any depot_tools wrappers are added to PATH.build_native.py changes to make updating a bit more feasible:--no-legacy-gn option have been removed; recent GN is now required.--clang-as-gcc mode is implicitly enabled.build_native.py is now more focused on producing builds with cibuildwheel; maintainability and easier updates are prioritized over excess compatibility with older dependencies. Basically, we will require what pdfium requires.build_native.py is now capable of using a sysroot. With our current cibuildwheel config, this can be used to lower the glibc requirements of manylinux_{ppc64le,riscv64,armv7l} (opt-in via USE_SYSROOT=1).secrets: inherit to trigger_conda_raw.yaml to hopefully fix a publish issue caused by the change to reusable workflow calls.git instead of GH API to get the ctypesgen revision. Drastically speed up attestation verification by sharing the trusted root.Commits between 5.10.0 and 5.10.1 (latest commit first):
88613fe0 [autorelease main] update 5.10.1c66e6cca Fix up the mess and prepare for new releaseee592847 Return trigger_main.yaml to workflow-dispatch actionCommits between 5.9.0 and 5.10.0 (latest commit first):
3873ced0 [autorelease main] update 5.10.0407a1f1c Bump PDFium pins to 7891 to match the pdfium-binaries9e059c3e Bump gn-dist to 2407.119431293 manylinux-armv7l-image: use latest182d1990 android/termux: don't silence checkout FETCH_HEADad89fad0 Remove close wrapper improve formenv teste26fca34 Prevent double deletion when obj.finalizer is called unprotected1df605d7 formenv: use property getter & setter after all3135635c Tighten formenv checka8c19a80 formenv management: slightly enhance theoretical safetyd93fc487 document.py: again tweak formenv_close caller info4ed01e55 Host.platform: also detect armv8l as arm32c9880059 cibw.yaml: make sysroot_level 2 default9e72153f readme: note GN version requirements more clearly5423abca Bump cibuildwheel to 4.1.01dfbbacf cibw.yaml: rename use_sysroot_level to just sysroot_level86810163 Update changelog7182cb81 build_native/cibw: add ability to use sysroot90456b42 Minor build setupsrc improvements292147cb Simplify get_helpers_info() impl7d62c82f Reorder build_helpers members5a88d3e7 setup.py: _resolve_platname() style nit625327a3 Change PDFium 7889 to 7890af20bee7 Drastically speed up verifying multiple attestations8408dd75 build_native: make checkout phase more readable1d6d67a8 Bump sbuild pins to pdfium 7889ac9ca28f Merge bigendian_test.patch into bigendian.patch after all719dae07 craft.py: don't get pdfium version in --sdist only mode43a0fdde hotfix: prevent sdist from getting +dirty suffix120b2e86 Slightly tweak changelog1da4372f build_tc: more docsca7fe8be sbuild_one: also run vtool (on macOS)d31c29bd build_tc: use_sysroot actually does work with GCC on GHA6ae35ca7 setupsrc/base.py: clean up excess whitespaceef260a13 sbuild: correct a tag58cc1e1e Take out macholib from req/setup.txt after allbd94c989 build_toolchained: honor --clang-path without --use-sysroot80d2f751 Fix another typo not caught by codespellbacab3e1 Revise tagging integration89f66460 Update changelog0967d074 craft.py: get ctypesgen hash using git rather than GH APIed23acad main.yaml: on macOS, run vtool (informational)1fda1001 Reorder changelog8131959f Fix formenv integration (#447)b19617be install-static-clang: use latest31d31a6d install-static-clang: bump version & make checksums auto-update8680c86a Setup refactor (#443)65278006 build(deps): bump loong64/cibuildwheel from 3.4.1 to 4.0.02ed55ee3 Bump min iOS requirement to 151e4557df Update comment on min macOS versioncff95ea8 Rename android patches9ef13a2e Exercise PdfSysfontBase as welled0c8b83 Fix reuse lint, remove a non-essential patch1095cd1e Exercise default-fonts CLI in test suite, with sysfont listenera8861084 sbuild_one: condition nit115ed073 sbuild: fix blunder: it's inputs.pdfium_ver, not inputs.version1b8d00a4 build_toolchained: change checkout_configuration back to minimal10cc8fbf sbuild.yaml: fix optional boolean param0d89d7b9 sbuild: add back classical portable mode testtarget287d431e sbuild: better targets control96064412 sbuild/linux_arm64_native: fix: pass matrix arguments to job5f4dd5ed build_toolchained: extract helper functions from mainc9362f6e sbuild: attempt to use sysroot for linux aarch64 native685acf5f build_toolchained: make PORTABLE_MODE more powerfuldc05dd4e Align libpng patch with our upstream CL (#441)48470f7b cibw_one: extract docker test script60098138 autorelease: add a disclaimer regarding release pdfium versionsf3cb1838 autorelease: refrain from logging sourcebuild versions8b31ed09 Improve changelog_staging74a8917b Update toolchained sourcebuild (#440)1314b2b5 build_native: increment 7878 to 7880 (same commit)c7a0ccb8 Continue on docs/helpa36d96cd cibw.yaml: add an input for the pdfium version5aa994ad Prepare changelogc9532e91 build_native: improve --version helpf523edd0 utils/color_tohex: take out a needless length check1ffc91fb musl autopatch: confirm there have been substitutionsc121558e build_native: remove version check around gcc_toolchain.patchd44ee964 Amend v5.9.0 changelogbb4f3ff2 cibw: PDFIUM_VER passthrough fixes41125de0 build_native: bump pdfium pin to 7878ebf0f43e fix: honor $PDFIUM_VER when build_native is called through setup59b47c50 main: make augment_cibw matrix more readable by adding ws7bebc602 cibw/main: try to track latest for GCC targets9cc50244 cibw: make pdfium version configurable (passthrough)77bdff88 build_native: cut down patches, make updating more straightforward (#439)42922066 build_native: fix gcc build with pdfium >= 5563ca5 (next tag: 7873)9edccc2e readme: some enhancements570cd4e6 Try to fix trigger_* workflowsd4207586 build_native/android: be more explicit about using the sysroot526d27b9 Add taskCommits between 7869 and 7891 (latest commit first):
eee437573 Make CFX_FolderFontInfo file-reading helpers static methods.e878c9636 Update Chrome security bug reporting location30d9aedac Correct Johab mapping and add Vietnamese/OEM supporta07c51256 Include missing charsets in CFX_FolderFontInfo from OS2 table.0c1627a24 Define global FX_CharsetFlag and use it in font managers.dba25aa51 Replace XFA_FWL_PSBSTYLEEXT defines with an enum class.85b0d00e1 Add missing FXSYS_ToLowerASCII().2ae413aca Add simple tests for Brotli compression7c53431c7 Reduce object churn in CPDF_NameTree::GetNodeLimits.3a1c2bfe5 Add hash-to-string mapping to CFPF_SkiaFontMgr.ab1e18865 Declare several FXSYS_ functions as constexpr.d319f7487 Add unit tests for CPVT_VariableTextd83824a61 Avoid invalid tiling pattern rangesd97216b41 Replace FXMATH_DECIMAL macros with constexpr in cfgas_decimal.cpp823f1c205 Fix return value in CFX_AndroidFontInfo::GetFontCharset().9ac7285a0 Unconditionally check out simdutf4f41484a3 Rename FX_LINEBREAKTYPE to LineBreakType7be64fd48 Replace JBIG2_MIN_SEGMENT_SIZE with a constexprefbbe3320 Roll Code Coverage from 74d04576e893 to 06dcbbe49e67 (4 revisions)96fbc7801 Roll Catapult from 9fd976b2695e to a6e9d089883c (22 revisions)91b9d569b Make mt-constants private to FX_Random.ad0e47cfe Add span-based I/O wrappers as core/fxcrt/span_io.h3acf17e6e Bring FX_Random into conformance with the usual mt19937 constants.fa8088d69 Add constants for ISO 32000-1:2008 spec, table 2867b15b1a6 Add brotli build override7ff443d29 Add build_overrides/crubit.gni to PDFium tree1ca37e1f4 Enforce unsafe_buffers in testing/image_diff/ directory.4fab2ee66 Opt more testing/ sub-directories into unsafe buffers.be0931a4a Start list rearrangement at requested item535784726 Update PDF 1.7 spec references to ISO 32000-1:2008.9b3f8817c Roll base/allocator/partition_allocator/ fafdd4c9f..390c4b91f (23 commits)e7482b58e Update gn_version to 3357c4f51b1a9e676378c695dd9c7e9911c35ee62dcb53e64 Fix logic botch in cpdf_nametree.cppb9772f493 Update siso_version to b18cb0f263cfcc2f17a925cb211972a32dc211f6282b9cff5 Roll third_party/skia/ d10ea850c..e4281d5a7 (283 commits; 48 trivial rolls)1ceb726c0 Roll third_party/libunwind/src/ 71192be15..d6c7a21e9 (1 commit)32c10a11b Roll tools/win/ d16e6b55b..faefd1b6f (2 commits)4273e5edc Roll third_party/clang-format/script/ 08cce2b81..6eddfb5ec (2 commits)8b22dc146 Roll clang+rust29a752045 Roll v8/ 8e10f842e..0c6c73eea (692 commits)1bdd27515 Replace c-style casts in cfgas_decimal.cpp with static_casts5a484d789 Roll third_party/rust/ dbc491d22..19243287c (57 commits)4fa128c50 Prevent import hang on circular page parents5563ca558 Roll build, buildtools, libc++, and llvm-libc313421d38 Roll third_party/nasm/ 358842b6b..525a09a81 (4 commits)ea73c48b2 Roll third_party/libjpeg_turbo/ d1f5f2393..640f254ad (2 commits)d904fdadc Roll third_party/freetype/src/ 6d9fc45fc..b08a2eb0d (29 commits)8e035e655 Roll Harfbuzz and icud438a4e61 Roll third_party/brotli/ 143b119f4..803ac7166 (1 commit)0978254b5 [Android] Nest font metadata privately in manager3c0ff8b59 Roll third_party/brotli/ aaafc7036..143b119f4 (2 commits)6b534415e Roll goldctl from 3df8f33fc497 to ac4d1516c500Description edit: Manually added commit logs from 5.10.0
6570b33b build_native: cherry-pick openjpeg security fix
7191 to 7841.gn-dist project providing recent builds of GN (generate-ninja) for Linux (glibc and musl, full set of architectures).gn-dist rather than outdated distro packages of GN.gn-dist.build_native.py, patches for legacy GN are still included and enabled by default for now, but you can pass --no-legacy-gn to skip them.workflow_dispatch and workflow_call inputs using YAML anchors & aliases (available on GHA since 09/2025).benc-uk/workflow-dispatch action with reusable workflow calls.if-conditions through an input parameter to the called workflow, because (unlike jobs) matrix entries have no built-in conditionality.3.14 (mostly). Simplified test matrices to probe just a few Python versions (e.g. 3.8, 3.11, 3.14).mara004, the author and so far only active committer of pypdfium2, now is (and will remain) sole owner.mara004's personal project. The existing userbase will not be handed over to another maintainer.Commits between 5.8.0 and 5.9.0 (latest commit first):
f4b4032a [autorelease main] update 5.9.0073a8730 Add another note to the changelogfbcf26ce bulid_native: make --version main work (in gcc mode)22530e39 Prepare changelog for next release3628a5a0 fix typo 'pouplar' (to 'popular') (cf. #436)1838acb1 build_native.py: ack //build/toolchain/linux/unbundle6570b33b build_native: cherry-pick openjpeg security fixce1f0f77 android: set use_mold to false53c58228 justfile: open browser in background71568ff6 AutoCloseable style nitaf847562 correction: negative crop does not actually workf729f447 pyproject.toml: align order of commented-out system libs2044a804 Make autoflake happy1da966ec Drop gn_build.patcha6d1ee6a cibw/loongarch64: fix GN version9cae361a Improve gn-dist integrationca980469 build_toolchained: rework GN task, call honor_gn_dist()767bd0f9 Bring recent GN to sbuild/sbuild_native workflowsababbbd6 cibw: move down gn-dist handlers57f496cd cibw: spell out list of CPUs instead of using || true96f527b7 cibw: fix loongarch64 not getting gn_dist binary4cb251ee Use gn-dist (#432)65641ce4 Bump SBUILD_NATIVE_PIN to 78417febaf1f build_native: minor optimization166633df Bump SBUILD_NATIVE_PIN to 7835413d13b6 sbuild update instructions: mention CIBW workflow6015a0cf ci: deduplicate inputs, replace benc-uk/workflow-dispatch with reusable workflows (#431)c4a186f6 PdfPage.render(): acknowledge negative cropc08ab357 main.yaml: add taskb830eeeb nit: fix a minor whitespace inconsistency79255e61 Polish req/setup.txtea71a567 CLI: improved disclaimer64691b9e ci: always update pip firstd6abcb1f Bump SBUILD_NATIVE_PIN to 78312ad0b232 Revert dubious DEBUG_AUTOCLOSE check15ade1df Rename cibw_class to cibw_os304c2edc ci: deduplicate cibw, sbuild and sbuild_native workflows using matrices (#430)23716a59 Update static clang again62d1a72d Set use_cxx23 to False in build config84ebcbda readme: add harfbuzz (and simdutf) to dependency lists5c8995d9 Fix musl_fix_libclang_rt_finder patch3c7d86f7 build_native: style nitf23a93e0 pyproject.toml: use --no-legacy-gn in cibw configd40c52c6 Make legacy GN patches opt-outcf669d96 Update GN version (source build fallback)5be6bf77 Bump SBUILD_NATIVE_PIN to 782823e6388f cibw: on linux (glibc) with static clang, use the vendored libc++ (#429)ba746a8f Opt for the much leaner libpng ppc64 fix after allf4af8b67 build_native: update pdfium from 7191 to 7827 (#428)6082a1ca CI: update cibuildwheel python version alsof22d80cb CI: reduce number of python versions to test009f1999 CI: Add and update to Python 3.14b286844d Slightly tweak autoclose-related logs that don't need os.write()Commits between 7825 and 7869 (latest commit first):
80fccd755 [Android] Remove unnecessary CFPF_SkiaDeviceModule singleton1029a965b Create FDPFPageObj_AddExistingMark()7e1dd12c2 Rename core/fxge/apple/ files to match their classes9bfb3a58a Introduce CFX_DIBitmap::PopulateFromSpan() and PopulateFrom1bppSpan()00b52f79b Move font substitution arrays and helpers to CFX_SubstFont54f0e7ac4 Make FX_Random::Fill() the only entry point to FX_Random.0a23e6f43 Use slightly better random numbers for GenerateFileId().bea414c80 Remove some kTable* constants from the global namespace.994e1f365 Tidy CPDF_FontSubsetter1178e9ae6 Move TT Name Table parsing down to fxge/ layer.27701c3bb Move guts of CFX_CTTGSUBTable creation to CFX_Font.1efc5bb8d Clean up legacy CFX_ prefixes and move font table parser108063f61 Move CFX_CTTGSUBTable to core/fxge2a6e4f02e Remove obsolete import of //build/config/chromeos/ui_mode.gni2f8e2ce0d Add FPDFTextObj_SetFontSize() public APIa5dce0851 Add CFX_Font::GetCharBBox() helper methodb3a943e3d Encapsulate more of CFX_Face in CFX_Font498e8ddb3 Add still more fontations equivalents to cfx_face.cpp4daa8ec3a Continue adding fontations equivalents to cfx_face.cppcc5fcec45 Add coverage for invalid bfchar CIDs77f980f7f Use GetFileContents() to simplify fx_skrifa_unittest.cpp8a52b4df0 Simply rust Slice construction in CFX_Face.5c422dfb1 Add fontations equivalent for CFX_Face::GetCharCodesAndIndices().f0393b98f Roll Depot Tools from 64b2927117d0 to ed3a6fdd519a (54 revisions)6308a8b36 Add fontations calls and checks to CFX_Face::GetGlyphBBox()c291784f6 Add additional Fontations calls to CFX_Face.630e0b8d1 Add fontations code for CanEmbed().204bd1660 Add Fontations support for CFX_Face::GetOs2CodePageRange().000a55e9e Call skrifa APIs in parallel in CFX_Face::LoadGlyphPath().3fbf45d47 Fix missing use of fontmetrics when checking skia bounding boxes.ba3a65ac5 Remove isolate argument from JSGetObject().29dcd7e9c Rename CFX_V8 to CFX_IsolateWrapper5d170ba40 Refactor dynamic property adapters to avoid nested ifs.51a7cf784 Use v8::Local<> in DynPropGetterAdapter()52eaf3272 Rename CidSet enum entries8a02e3f08 Collapse std::unique_ptrv8::Global to v8::Global in XFA.11439fe4c Remove CFXJSE_Value wrapper in favor of v8::Globalb66c914fb Fix width calculation under skia in CFX_Face.ceb1b50ff Make CJBig2_GRDProc::DecodeArithOpt3() templated78cd1a294 Make PDF_ENABLE_SKIA_TYPEFACE_CHECKS a GN build argument.efe3f3028 Add missing config to //testing:test_support targete30fc3988 Fix cffl_formfield.h reference in some commentsa8814376b Replace some static_casts with fxcrt::to_underlying()276f8f0bd Remove dead code from CFXJSE_Value.63d9c7846 Do not access form_fill_env_ until after last re-entrant JS call.65c78d072 Patch CVE-2026-6192 in libopenjpeg49c25b603 Make equivalent Skia calls in CFX_Face under Fontations builds.09704940d Verify document in CFXJSE_Engine::ToXFAObject()8542da7f2 Roll Zlib from 89921383f1f5 to 5c1dfd53066b (1 revision)6b69de71d Roll Memory Tools from b635f27e9323 to 66b0df34a721 (3 revisions)55f03afc8 Do line fetching inside CJBig2_Image in bulkc9513f398 Add CJBig2_Image::stride32()fa5db8d55 Fix variants of prior CJS_Field::set_display() issue.937e95063 Add big scary term "Reentrant" to fxjs methods that enter JS.de011a269 Make several CJBig2_Image methods private9f6089d4d Avoid order-of-evaluation issues in CJS_Field::set_display().159b66453 Encode property names when generating a page.2d2d4fabd Git ignore .jetskicli files.9095044e2 Roll third_party/skia/ 163dfdf50..d10ea850c (329 commits; 49 trivial rolls)ef2d0f9c5 Move fx_dib.h into namespace fxge7d87ed1f2 Use GetWritableScanline() in more places inside CFX_DIBitmap423b6b376 Roll third_party/cpu_features/src/ 936b9ab55..d3b2440fc (88 commits)3f09d85ad Roll third_party/nasm/ 452528587..358842b6b (507 commits)9c682beaf Roll abseil, android_ndk, build, buildtools, clang, libc++, and rust362640c04 Rename array name in CRYPT_SHA1Finish()adc87eca6 Roll third_party/libpng/ 367bb5ca4..8a5b4ace0 (1 commit)e39b9c0e9 Cache data size in CJBig2_Image012b9390d Mark CFX_DIBBase::FlipImage() as Windows / XFA-only8ec61de5a Change FXDIB_ALPHA_MERGE() from a macro to a function1e0bc3f15 Rename functions in fx_crypt.cpp to follow UpperCamelCased4380f36c Rename SHA functions to follow UpperCamelCase9ef2ca7d9 Upgrade to lcms 2.192f77b38fe Rename JBig2 files to have lower case, snake_case names6845db4c1 Add FxDibTest.AlphaMergef65c52aac Roll Catapult from 7343182d94b7 to 9fd976b2695e (71 revisions)50fd77b49 Roll Code Coverage from f9e72c2a3ad1 to 74d04576e893 (4 revisions)260318838 Make some fxge code Windows / AGG-onlyf8cec29fc Fold CFX_DIBitmap::ConvertBGRColorScale() into ConvertColorScale()97ac10a61 Simplify CFX_DIBitmap::ConvertColorScale() and ConvertBGRColorScale()041bf3782 Make CFX_RenderDevice::Get{Horz,Vert}Size() Windows-only8c9ab07d4 Remove more CFX_RenderDevice getters21c5df09b Remove RenderCapAlphaPath()8197a684b Roll third_party/harfbuzz/src/ a243dcb5c..e6741e220 (406 commits)2e0601854 Roll third_party/harfbuzz/src/ 4fc961392..a243dcb5c (261 commits)518d500c0 Clarify FPDF_NewXObjectFromPage() return value's lifetimebf13a74ba Update gn_version to 1740f5c25bcac5a650ee3d1c1ec22bfa25fcd75658a1b4ad2 Clarify C++ standard in .clang-format096d774ab Cherry-pick openjpeg changes to speed up jpeg2000 decoding on arm374edcd2b Fold 0035-opj_image_data_free.patch into 0022-jp2_apply_pclr_overflow.patch4d59a7129 Persist FPDFPage_InsertObjectAtIndex() ordering on save11b7e080a Rename AdobeCMYK_to_sRGB() and AdobeCMYK_to_sRGB1()5d0010027 Roll v8/ f9659283a..8e10f842e (749 commits; 1 trivial rolls)180b3353a Roll third_party/llvm-libc/src/ 2a826f2fd..ada036045 (124 commits)eab440015 Roll third_party/brotli/ 8e1083278..aaafc7036 (1 commit)2bc6a5b1c Replace some char pointers with ByteStrings in embedder testscde520d12 [v8] Migrate from deprecated setter/definer callback signaturesdd02d6dc6 Roll third_party/freetype/src/ 99b479dc3..6d9fc45fc (39 commits)1089bfab1 Update siso_version to 8629cde6728d25cde0f6fc1e6ae6b5886e0ebe41b5b3947e6 Roll third_party/clang-format/script/ c2725e062..08cce2b81 (4 commits)393b3b71e Roll base/allocator/partition_allocator/ 8013b1e0c..fafdd4c9f (16 commits)067b877a1 Roll third_party/fast_float/src/ cb1d42aaa..05087a303 (178 commits)b22924e7d Roll third_party/highway/src/ 84379d1c7..2607d3b5b (227 commits)2ced62c09 Roll third_party/libunwind/src/ 6ca46ff28..71192be15 (5 commits)9e85458bd Roll tools/win/ bfff5550e..d16e6b55b (1 commit)5e5ca5c02 Roll goldctl from 308286ffe9c4 to 745819ef1cfaUpdated pdfium-binaries from 7825 to 7869 . Native and toolchained sourcebuild use pdfium 7841 and 7191 , respectively.
Finally updated native sourcebuild from pdfium 7191 to 7841 . Updating the script & patches, and tracking down any issues that cropped up, adding new patches to fix them, turned out to be a great deal of work.
Created gn-dist project providing recent builds of GN ( generate-ninja ) for Linux (glibc and musl, full set of architectures). Updated pypdfium2’s cibuildwheel config and workflows accordingly to use gn-dist rather than outdated distro packages of GN. Scripting to build GN from source previously included in pypdfium2’s setup has moved to gn-dist . In build_native.py , patches for legacy GN are still included and enabled by default for now, but you can pass --no-legacy-gn to skip them. To make updating more straightforward, this mode will be made default and the patches will be removed in the future.
In cibuildwheel config, pass -xn to the build frontend to make before-build usable to install PyPI dependencies such as gn-dist (which we do not want to have in the main pyproject.toml [build-system] requires ).
Workflows overhaul.
Deduplicated workflow_dispatch and workflow_call inputs using YAML anchors & aliases (available on GHA since 09/2025).
Replaced benc-uk/workflow-dispatch action with reusable workflow calls.
Deduplicated series of individual jobs by switching to matrices. Handle if -conditions through an input parameter to the called workflow, because (unlike jobs) matrix entries have no built-in conditionality.
Updated to Python 3.14 (mostly). Simplified test matrices to probe just a few Python versions (e.g. 3.8, 3.11, 3.14 ).
Limited who has maintainer access to the repo and project sites. mara004 , the author and so far only active committer of pypdfium2, now is (and will remain) sole owner. Inactive co-maintainers no longer have access, but are welcome to submit PRs. In the event of the author being unable to pursue this project further, it can be forked and a new maintainer may build their own trust, but given the risks inherent to maintainer changes, it has been decided that pypdfium2 will remain mara004 ’s personal project. The existing userbase will not be handed over to another maintainer.
Encapsulate finalizer state in a mutable object.
ObjectTracker added (objects are grouped by type and remove themselves from the tracker on finalization likewise). This may allow to destroy and re-initalize the library during a session.PdfDocument.page_as_xobject() now registers the XObject as a child of dest_pdf rather than self.PdfObject) as untracked.PdfPage.parent now points at the formenv..parent property should be seen as purely an autoclose hook and not something to use for other purposes._detach_finalizer() instead of _finalizer.detach().DEBUG_AUTOCLOSE to hold a loglevel rather than just a bool. This lets us distinguish between noisy debug messages and actual warnings. The default level is now logging.WARNING.PdfPage.get_objects(): Added textpage passthrough parameter. This is required for PdfTextObj.extract(). Raise a meaningful exception if the textpage is missing. Demonstrate .extract() in pageobjects CLI.PdfFont.get_base_name(), .get_family_name(): decoding errors option added, now defaults to "replace".PdfFont.load_standard(), .STANDARD_FONTS and PdfDefaultTTFMap added.PdfPage.get_rotation(), .insert_obj() and PdfUnspHandler.setup().pypdfium2 fonts and default-fonts). Optional dependency tabulate.setup_logging(): Fix warnings to be shown by removing an incorrect logging.captureWarnings(True) (that would require configuring the py.warnings logger or root logger). Instead, use just warnings.simplefilter("always") for now.DEBUG_SYSFONTS being a boolean option. Share streamhandler across loggers.Commits between 5.7.1 and 5.8.0 (latest commit first):
9a41bfc [autorelease main] update 5.8.0a2da0a1 Make just check happy9272319 Polish changelog0aa747a CLI/fonts: don't bother with standard fonts60f1c20 Share streamhandler across all loggersa25cbc9 continue on changelog828baed DEBUG_AUTOCLOSE: distinguish between debug and warning messages2d4035d Continue polishing the changelogb4a4c5d docs: add back |br| template for rst docs42382c2 sysfontinfo nitse400ccc changelog: fix a typo found by codespelld87ad30 Autoclose machinery improvements, objects tracker, new helpers (#426)d9d8ad4 RTD: update to ubuntu-26.0407608ad Remove tabulate from req/docs.txt after all55564a0 build(deps): bump conda-incubator/setup-miniconda from 3 to 4885f9ff Fix unused import reported by autoflake8783f53 Continue on CLI dispatcher95639af Add new errchecks to get_rotation() and insert_obj()cc2ba43 shell_api.rst: drop example commands after all987d8cd CLI: lazy dict: use different approach77e9ae0 CLI: use lazy dict for imports, cache version also60f9bef CLI: implement task from previous commit660bf52 CLI: add task97f1c71 CLI: improve main description9980d8e PdfPage.get_objects(): add ability to pass through textpage4b4f1b9 PdfFont.get_*_name(): be more tolerant of encoding errors7440675 PdfTextObj.extract(): raise meaningful error on missing textpage93b4f1c Continue on Fonts CLI3a71e01 Map fonts by memory address rather than base name4e73b66 Rework get_posconv() and underlying private APIc72f1f9 Shell API docs: add two examples2e4c2f5 fix: tabulate doesn't like empty input6caea6b Add log message if tabulate is not installed9320230 get_view(): add ability to use tuple for view_pos79596ea Acknowledge optional dependency tabulate8d35f24 cli: reorder some membersb333380 cli: improve pagenums_ranger() implementation8b79326 cli: add experimental pagenums_ranger()10ce18b cli/fonts: assume only one family name9841ac8 cli/fonts: try to make output more informativecd173f4 cli/fonts: drop commented-out argument666e99f Add experimental fonts CLI1e9aa51 sysfontinfo: expose pdfium's default TTF map1dab24f Add ability to hide initial sysfonts enumeration6aa5fe9 Do NOT set logging.captureWarnings(True)Commits between 7802 and 7825 (latest commit first):
d5960c827 Add experimental FPDFText_SetPositions() API55d86a5a9 Add 2 subsetted versions of NotoSans-Bengali font416923eca Add helper functions to verify rectangle coordinatese1decb6e4 Embed a font in vertical_text.pdf6d88cd21f Fix crashes in FPDFText_SetText() and FPDFText_SetCharcodes()7a847da65 Do more testing in FPDFTextEmbedderTest.TextVertical8f9c566f2 Roll Depot Tools from f5c816648d94 to 64b2927117d0 (57 revisions)e54ae3a36 Remove UNSAFE_BUFFERS in fx_crypt_sha.cppe14569d58 Fix potential UAF in CFFL_CheckBox::OnChar().363134af3 Replace form filler style defines with Styles enum9e5d491ff Add second form of GetForegroundTaskRunner() override.cbc803d99 Add CFXFontMapperSystemFontInfoTest for external font substitutiondf3e2a600 Do not truncate /Limits array for lookup-only operations346ee6bbd Mention FPDFPage_GetRotation() returns -1 on errord39027e3b Refactor CPDF_Page::IsValidPageDictLoose()dcc3dc6e7 Validate CPDF_Page's page dictionary input3fe931553 Fix page/pages dictionary confusion in CPDF_Document::TraversePDFPages()c342bfb35 Add CPDF_Page::IsValidPageDictLoose()390975894 Move page dict validation code to cpdf_page.cppaf723b98f Make FPDFPage_InsertObject() return a bool4421fc646 Build example skrifa_cxx bridge in PDFium.72c48203a Take .rustfmt.toml from Chrome repository8161cecbe Improve CID TrueType font detection5fb91098a Roll third_party/rust/ 847ac6aa3..d403e286a (17 commits)86997ba89 Make CFX_Face::GetPixelSize() and GetCharMapEncodingIdByIndex() private5553c7425 Keep persistent mapping in CFXJSE_Engine::NewNormalXFAObject().43d7e7335 Observe CPDFSDK_Annot across RenderWidget() call.c7dec2a90 Reset CFWL_Caret timer at mark time, not sweep time.c98f828d9 Roll Zlib from b80f1d1e5256 to 89921383f1f5 (2 revisions)1ecd0e6 Fix internal use of deprecated API
FPDFText_GetLooseCharBox() / PdfTextPage.get_charbox(i, loose=True) results introduced in the previous release. (Since conda pdfium-binaries are updated only once a month, this release downgrades to pdfium 7713 on conda)pypdfium2.__init__ to run before preparation after all. This had regressed shortly before the previous release. DEBUG_AUTOCLOSE=1 pypdfium2 -h should now show Initialize PDFium at first.memoryview and codecs.decode() instead. Also, we now create buffers of the expected type directly to avoid casts, and convert number of bytes to units via ceil division where needed. Updated the Readme's raw API examples accordingly.PdfTextPage.get_text_bounded() no longer unconditionally calls page.get_bbox() each time. Instead, call it only if needed, when at least one of the boundary values is None.get_text_bounded() is called many times on given rectangles, like from PdfTextPage.get_rect(). Though the API probably is not meant to be used this way.PdfPage.get_objects(filter=(FPDF_PAGEOBJ_TEXT,)) and textobj.extract() as a possible alternative.PdfFont.is_embedded property.Commits between 5.7.0 and 5.7.1 (latest commit first):
8980e64 [autorelease main] update 5.7.16f9d5d4 Update static clang images to 22.1.3.025efe1b just check: skip htmlcov dire50ba09 Readme: Update raw API output strings examples570a437 Prepare changelog62e3b97 Mark next release as humble (minor cipher update)8cd9947 get_text_bounded(): defer get_bbox() and point out whye0570ff nit: use == 1 rather than bool()fa866df Add PdfFont.is_embedded propertyc67d34c Simplify _ENC_ERRHANDLER passing717999b Improved coverage reporting8cde38c Rework output strings: use memoryview and codecs.decode, avoid casts (#425)a6705a3 fix: don't import from pypdfium2 before logging setupc07697b tests: forward rather than wrapd765528 cibw: update comment on windows arm95e7211 get_text_bounded: avoid cast, create c_ushort array directly8e5f396 build(deps): bump actions/upload-pages-artifact from 4 to 500e729e build(deps): bump cross-platform-actions/action from 0.32.0 to 1.0.01ecd0e6 Fix internal use of deprecated API7fcf2a5 nit: use iterator comprehension241673b Minor doc updatesCommits between 7776 and 7802 (latest commit first):
2558d5d97 Bound FPDFText_GetLooseCharBox() top/bottom by /FontBBox02318a973 Add test for FPDFText_GetLooseCharBox() behavior with bad ascent value237fcde80 Add a test to demonstrate a PDF flattening bugb28cdcbd7 Replace CHARSET_FLAG macros with CharsetFlag enum4e99d1542 Roll third_party/harfbuzz/src/ fa2908bf1..4fc961392 (694 commits)bd1864057 Remove XFA_ELEMENT_SUBMIT_ENABLED codea05c20f2f Avoid check in CPDF_SecurityHandler::GetUserPassword().a7a57805f Replace macro-based modifiers with WSTRModifiers enumf1993648a Use a result struct in CBC_TwoDimWriter classes.1cc96739e Remove CPDFSDK_FormFillEnvironment::GetFormFillInfo()1cd0c70c4 Update siso_version to 7bcc56206d234b3024df08ffd4ee6d40eea32623a2a7ceb05 Fix NULL-deref in CXFA_ViewLayoutProcessor::BreakOverflow()ee9b1a479 Remove FFI_ from CPDFSK_FormFileEnvironment::FFI_GetAppName().50905070d Patch another overflow in libtiff0dd0a31f9 Roll Code Coverage from 839c826036d4 to f9e72c2a3ad1 (7 revisions)200b8881c Roll Catapult from 6ea42cfd29b4 to 7343182d94b7 (50 revisions)f1ce6ba0d Change CXFA_TextProvider::GetEmbeddedObj() to take a string viewf1d868b94 Roll abseil, build, buildtools, clang and rust4e18cc00c Update gn_version to 6e8dcdebbadf4f8aa75e6a4b6e0bdf89dce1513aa3c2448b0 Convert some PDFium string indexing by [0] to Front()f0fde6136 Use fxcrt::Zip() in PDF_RenderStatus::LoadSMask().83c482053 Limit the maximum destination image size in CStretchEnginef1e179a5b Roll base/allocator/partition_allocator/ 2157c84d9..8013b1e0c (18 commits)bd341b245 Roll third_party/llvm-libc/src/ 044963a25..2a826f2fd (129 commits)3ac598f53 Roll third_party/libunwind/src/ db838d918..6ca46ff28 (5 commits)fec55db60 Roll third_party/icu/ a86a32e67..ff7995a70 (9 commits)f5142fa98 Fix length botch in CPDF_StreamContentParser::FindColorSpace()8536b4348 Convert some {Byte,Wide}String::Last() calls to Substr().6f48a06ac Roll third_party/skia/ 90b1d0b22..163dfdf50 (278 commits; 42 trivial rolls)bce2e6728 Use safe arithmetic in CFX_PSRenderer::DrawDIBits()7302d52cb Return fixed-size spans from CPDF_TransferFunc.d499e4dfc Roll third_party/nasm/ af5eeeb05..452528587 (2 commits)b76a7ae42 Roll v8/ b210c794d..f9659283a (531 commits; 1 trivial rolls)22ac3a9d0 Pass fixed-size span to GetBoundary().29ce50207 Avoid interleaved load/stores during pixel processing.ac42296ca Implement fxcodec::ReverseRGB() using Zip().07b7d6c49 Roll goldctl from 4a1223e49952 to a34d51fda106an own submodule. pypdfium2.__main__ and python3 -m pypdfium2 are deprecated. Use pypdfium2_cli.__main__ and python3 -m pypdfium2_cli or the pypdfium2…
PdfDocument: When encoding input filepath to UTF-8, use the surrogateescape error handler (except on Windows)..encode("utf-8") call would raise UnicodeEncodeError. Thanks to Filipe Litaiff for the report.buffer directly instead of buffer.raw. This might be more efficient.pypdfium2._cli to pypdfium2_cli, i.e. an own submodule.pypdfium2.__main__ and python3 -m pypdfium2 are deprecated. Use pypdfium2_cli.__main__ and python3 -m pypdfium2_cli or the pypdfium2 entrypoint instead.__main__.py implies its __init__.py, which gives us no chance to prepare before library init if __main__.py lives in the pypdfium2 module itself.PdfSysfontBase. Wraps FPDF_SYSFONTINFO and related APIs.PdfSysfontBase to inspect or alter the way PDFium uses system fonts.scyyh11 for related proposals, and especially a hint on passing the right pointer in callbacks.PdfiumWarning (subclass of Warning). A PdfiumWarning is now issued on XFA forms load failure, with programmatic error code info, rather than just a log message.pypdfium2_cfg, which can be imported before pypdfium2 for init-time configuration. The DEBUG_AUTOCLOSE setting has been moved to this module.pypdfium2_cfg may be extended to give callers control over how pypdfium2 initializes PDFium (e.g. custom font paths).pypdfium2_raw/version.py from pypdfium2/version.py, so that PDFIUM_INFO is now available from within pypdfium2_raw.build_native.py: When GCC is used, we now declare a custom_toolchain, with environment passthrough.
gcc and others an arch-prefixed variant.build_native.py more likely to work out of the box, relieving callers from the necessity to create symlinks, including our internal cibuildwheel callers.CC, CXX and TOOLPREFIX.--clang-as-gcc more straightforward to implement.CFLAGS, CPPFLAGS, CXXFLAGS and LDFLAGS are now honored in this build mode.cross-platform-actions), testing installation with libreoffice-pdfium.
mode=RTLD_GLOBAL to fix library load.Commits between 5.6.0 and 5.7.0 (latest commit first):
f2a5380 [autorelease main] update 5.7.077f58a1 Simplify sysfontinfo docs27c3a63 Align doc param name with actual param namee3cc95c changelog: break some lines3aefaa0 Reland "Try to give GH API request a token"46795ee Revert "Try to give GH API request a token"47dffe8 Try to fix macOS and python < 3.8de6a0d7 Try to give GH API request a token3ca4b06 Satisfy check-wheel-contents3d8423b Fix a typo that codespell didn't catchedaf6ab FPDF_SYSFONTINFO wrapper + other progress (#417)c085743 Move minitest script to utils/640e3b0 minitest: register exit handler only after successful library initb85072a build(deps): bump extractions/setup-just from 3 to 40bec727 Bump cibuildwheel to v3.4.171052f0 Simplify output string handling9445bb9 build(deps): bump actions/deploy-pages from 4 to 55c5a6d5 Fix unused import3466cab Slightly simplify test case18a012c Add a small test case for opening garbled filepatha2840db PdfDocument: use surrogateescape when encoding filepath121a560 Add warning about libreoffice-pdfium being incompletef5811b2 Continue on FreeBSD8c76348 run_ctypesgen: try loading the library if univ_paths are given95a6ea6 Suppress known test suite failure with libreoffice-pdfiumcb7f81c Simplify BSD detectiond474b8a FreeBSD CI: try to run actual test suite400c876 docs: PYPDFIUM_INFO firstcb286a8 Update changelogbbe9f63 Comment out debug prints93a7a43 Try for a better FreeBSD libreoffice-pdfium workarounddce7cbf FreeBSD CI (#411)ac3d5c4 Make most setupsrc scripts executablebd48336 REUSE.toml: don't use CC-BY for code - use BSD-style lic insteadad4665a Add a note on git_clone_rev()3aa6014 cibw_one: comment out docker label=disable074d8c1 Readme nits881bced build_native: use os.pathsep0c2fe98 build_native: inline _clang_as_gcc()75f40d8 build_native: condense android section7d54969 Extract two more env var utilitiesaa701d9 build_native: drop duplicate settings0cbd7d9 build_native: somewhat clean up the custom toolchain7094a3d build_toolchained: use env_{append,prepend}() utility functions67873a3 Update BUILD_LICENSES44be239 Drop ffp_contract.patch in favor of passing flags by envbd18d77 Continue on build_native.py703399f readme/cibw: ack podmanb18891e utils/get_cross_deps: comment out unused4e92aa8 build_native: refactor custom_toolchain integrationa9e73c6 build_native: fix CPPFLAGS not being set on second run (commented out)6b49c15 Revert part of the previous commit3da1b25 build_native: declare custom GCC toolchain (#409)3ce9d29 build(deps): bump docker/setup-qemu-action from 3 to 42879225 Bump cibuildwheel to v3.4.0Commits between 7713 and 7776 (latest commit first):
79d84a59f Add additional overflow checks to LCMS.fefe0007f Elide some indexing checks in ProgressiveDecoder::GifReadScanline()e9cd15772 Roll Depot Tools from 55659c2bf434 to f5c816648d94 (45 revisions)ca8a943c2 Patch an overflow in libtiffa697e197f Replace render caps with individual boolean functionsb067c3092 Add CPDF_Dictionary::IsEmpty()fc346b1d1 Move HarfBuzz from harfbuzz-ng to harfbuzz367407e92 Clang-format code68436e8e3 Enable is_wexit_time_destructors_defaultc8dde6544 Roll build/ c9202dd8c..d1cac3b4c (44 commits)237bc015b Patch an overflow in Little CMSbd0e14def Remove CPDF_Annot::DrawBorder().eced332c9 Return fixed-sized spans from CPDF_TextState::GetMatrix() and GetCTM().4079776dd Pass fixed spans to CPDF_Type3Char::InitializeFromStreamData()6ce50e4d2 Convert to fixed-size span in CPDF_IccProfile::Translate()2dddd2261 Fix bounds checks in CBC_CommonBitMatrix::Get() and Set().673e86511 Replace GetDeviceCaps with specific getter methods5ee52dc9c Add test for importing page with OCGs into new document88ea47c04 Remove remaining direct FPDFPageObj_Destroy() calls2d97de48a Tidy testing/resources/pixel/bug_491_*.ined07065f4 Roll Zlib from 7eda07b1e067 to b80f1d1e5256 (7 revisions)9ae6cb740 Roll third_party/freetype/src/ e3a0652b6..99b479dc3 (30 commits)09166ad55 Reland "Stop trying to destroy PartitionAlloc"b68f6ed42 Add no_exit_time_destructors config to googletest80066750f Improve bitmap comparison failure reporting in embedder tests4c1474eef Revert "Stop trying to destroy PartitionAlloc"eafe37dac Introduce helper macros for floating point comparisons in testsf8e0f0531 Stop trying to destroy PartitionAlloca3d2c050f Get rid of nullptr checks in fx_memory_pa.cpp StringDealloc()c62192d95 Refactor CPDF_TextObject::CalcPositionDataInternal()5b5a36f46 Make CFX_Face::GetData() take data directly from CFX_Face member.b06eb5e93 Rename CPDF_TextObject::CountChars() to CharCount()b441ec9f0 Rename CPDF_TextObject variables599979cb4 Restore desc_ member to CFX_Face7183fe842 Split kerning data out of CPDF_TextObject::char_positions_e9d09fe61 Add null checks to XFA layout processors to prevent crashes3b31a7ee8 Better separate CFX_Font from CFX_Face85d9274ec Rename CPDF_TextObject::char_pos_05e485825 Fix PDF generation not accounting for text spacingd7181f041 Roll Code Coverage from 9cb285b91bea to 839c826036d4 (4 revisions)743ad0aad Roll Catapult from e83a9c8a09df to 6ea42cfd29b4 (35 revisions)96be5176e Roll libpng from 172f83835c98 to 367bb5ca4af5 (1 revision)8947a4dd8 Add an embedder test for text spacing being lost when saving30ef797c5 Always parse fonts with skia when checks requested.fc9739a19 Add an embedder test for inserted text not saving correctlyea7a02d5e Roll third_party/skia/ 9a983f6c2..90b1d0b22 (382 commits; 37 trivial rolls)e9079ff7b Move renderer selection from CFX_DefaultRenderDevice to CFX_GEModule.08b577469 Remove EmbedderTest::UnloadPage() call in fpdf_edit_embeddertest.cppd9a5c8154 Remove FPDF_ClosePage() calls in fpdf_edit_embeddertest.cppe47ddeb73 Remove FPDFPageObj_Destroy() calls in fpdf_edit_embeddertest.cppab5a98e4b Roll third_party/libjpeg_turbo/ 6bb85251a..d1f5f2393 (2 commits)4d753679f Consolidate more font loading code.0adcb1f19 Roll tools/win/ baacfc6d5..bfff5550e (1 commit)c488ebd41 Roll third_party/libunwind/src/ ba19d93d6..db838d918 (3 commits)5a54cc8b9 Roll v8/ b3995dff9..b210c794d (681 commits)9126e0cd1 Roll third_party/brotli/ ac16a36bc..8e1083278 (1 commit)509da958a Roll base/allocator/partition_allocator/ baaa6670c..2157c84d9 (22 commits)fa78de8d3 Update gn_version to 129ce6b9af1a93143acd8f8dea6fb8c6cb65abc9ab5543c60 Remove CFX_Face::desc_ member.92c80bf19 Roll third_party/abseil-cpp/ 675d3d37e..2a7d49fc3 (9 commits)bc78f6790 Store CFX_ReadOnlyFixedSizeDataVectorStream in FontCacheEntry.a0a6f8d90 Unify CFX_Face::New and NewFromSpanStream.0464426e8 Roll build, clang, rust, siso, etcbc3c4f239 Add architectural documentation for core/ and core/fpdfapid8ea3169a Add regression test for yet another issue with zero width spacesb5dfa979f Remove CFX_{Face,Font}::HasFaceRec().d8757ed70 Make CFX_Face consistently use global CFX_FontMgr.7e1a51a67 Move skia font manager from CFX_GlyphCache to CFX_FontMgr.ca0f9d08e Move SkTypeface from CFX_GlyphCache to CFX_Face.2659055f3 Simplify logic in CXFA_FFNotify::OnValueChanged()3d62bf80a Add regression test for another issue with zero width spaces44bd32f90 Switch from std::pair to a struct inside CPDF_Document484e6b746 Remove OUTLINE_PARAM::coord_unit_4a2989615 Revert "Reland "Remove character width check from cpdf_textpage.cpp""cb755bbfe Roll goldctl from 8f3583f82450 to aa16da01ee4b23793f8cb Fix null de-ref in CXFA_FFNotify::OnValueChanged().03baf4f3d Reland "Remove character width check from cpdf_textpage.cpp"ff5e04acc Fix issue with extra tall FPDFText_GetLooseCharBox() resultsc0cf20cf9 Add FPDFTextEmbedderTest for FPDFText_GetLooseCharBox() height issuef99c21259 Replace TEXTPOS defines with a typed enumee83ca8ef Avoid mismatch between k8bppMask and 3 byte constant.f456c190d Spanify source data in CFX_Face::RenderGlyph()1765e514c Spanify more of CFX_Face::RenderGlyph().0c38b00a3 Roll Depot Tools from 6235028c6b18 to 55659c2bf434 (35 revisions)In our cibuildwheel workflow, all targets now exercise pypdfium2's test suite. This is implemented as a custom post-cibuildwheel step, using Debian 13
<details> <summary>pypdfium2 commit log</summary>
Commits between 5.5.0 and 5.6.0 (latest commit first):
ec956bb [autorelease main] update 5.6.0d9ce037 fix typo4545595 Update changeloga1ec5b0 build(deps): bump actions/attest-build-provenance from 3 to 43e46f46 build(deps): bump actions/download-artifact from 7 to 849fcb7f build(deps): bump actions/upload-artifact from 6 to 7b82a5ee Simplify previous commitd1924b9 cibw: q&d: suppress known test suite failureseb9ed99 Add post-cibuildwheel testing (#404)16bc5c4 Amend "cibw workflows: drop emulated property"248d2a4 sbuild_one_native: merge install steps477825b cibw: try enable pypdfium2's test suite on musl3f5071e cibw: merge linux_s390x into linux_clangcrossfc8e50b cibw workflows: drop emulated property64d72f6 cibw: try to reuse build params9c6e0fc pyproject.toml: all targets now use vendored librariesda7a887 build_native --clang-as-gcc: drop one more symlinkbaabc1e build_native --clang-as-gcc: take toolprefix into accounte49e534 build_native: --clang-as-gcc: remove unused tools, add task</details>
<details> <summary>PDFium commit log</summary>
Commits between 7690 and 7713 (latest commit first):
fcfdf1c3e Polish CPDF_FontSubsetter and its embedder testseeb8a196d Rename CPDF_Font's GetCharWidthF() to GetCharWidth()ede18738c Subset the /W array during font subsetting311845fbb Move and update CreateWidthsArray()546af275b Subset /ToUnicode streams during font subsettinge56a50934 Move and update LoadUnicode()c3c6a7474 Add text extraction tests for font subsetting054cb1f79 Modernize CFGAS_FontDescriptor::Rank comparisons.45df51327 Always create CFX_DIBitmaps before CFX_GlyphBitmaps.c6437c175 Use fxcrt::to_underlying() for FontAntiAliasingMode conversion40766c38d Nest CFGAS_FontDescriptorInfo as CFGAS_FontDescriptor::Rank65f4269f6 Remove FXFT_ prefix from actual freetype types.9b44fd149 Avoid crash in FPDFViewEmbedderTest.Bug2087.070e767b9 Rework CFX_UnicodeEncoding and CFX_UnicodeEncodingEx.e7bc1f3ec Update PDF objects correctly when subsetting OpenType CFF fonts1cf3a95a1 Use ToStream() and ToDictionary() in cpdf_fontsubsetter_embeddertest.cpp9d2f3a2f6 Create a fontations font mgr from Skia when pdf_enable_fontations.c9d3b7dd6 Add option to initialize PDFium with a font backend library3516ceb9c Add Length1 entry check to StreamSizeIsWithinRange matcher5fcdfffcd Clean up cpdf_fontsubsetter_embeddertest.cppf6f9031de Add a CPDFFontSubsetter test for standard fontsdd3d4a5fd Roll third_party/skia/ 39aa2a702..9a983f6c2 (1 commit)707d00c21 Fix build when pdf_enable_fontations=false and pdf_enable_rust_png=true855d3e571 Consistently use CPDF_Font::kInvalidCharCode in CPDF_TextPage919a875df Add fxcrt::to_underlying to emulate C++23 utilityf22a15d44 Use variadic template for Mask constructor18443ade1 Use canonical PA buildflags7ca77b11a Fix CFX_GlyphBitmap::GetBitmap() const correctness0162d3a80 Simplify CFX_Barcode54aa055d9 Remove one CBC_OneDimWriter::CalcTextInfo() out-param275f6d5ff Rename CFX_Font methods to highlight font/face distinction.9c97da0e4 Use better IV in PDF_CryptoHandler::EncryptContent().74b9f15f8 Remove CFX_EncodingEx::CharCodeFromUnicode().022291b51 Add a prefix to font subset name3f45d4135 Move and reuse MaybeRemoveSubsettedFontPrefix()4d0eb4d4c Introduce pdf_use_agg GN build argument.ea6447f88 Remove CFX_AggClipRgn arguments from non-agg code.541175f97 Remove CFX_AggClipRgn::type_.9dc28e76c Roll third_party/skia/ 356c7267f..39aa2a702 (108 commits; 15 trivial rolls)bbf3fd2cd Roll third_party/skia/ c497e689b..356c7267f (1 commit)b1d0ad85d Null out CFX_AggClipRgn::mask_ when converting to "type I".7abfef0c5 Roll Zlib from 980253c1cc83 to 7eda07b1e067 (1 revision)f1cba6f5d Add a regression test for FPDFTextObj_GetText() and space characterse8dad276c Remove CFX_AggClipRgn from CFX_DIBBase.770014b5c Abstract AGG behind RenderDeviceDriverIface::Continuation.141048614 Refactor RemoveSubsettedFontPrefix() and IsStrUpper()c3ef30982 Modernize FX_Random furtherf14e0f587 Remove MTContext5acca1edf Replace FX_Random_MT_.* functions with FX_Random class5af9ed18a Rename FX_Random_MT_GenerateMT()933f0aaa8 Update pixel test for rendering that depends on /ToUnicode4f046db1f Introduce CPDF_FontSubsetter to subset new fonts on PDF save1c8ab71da Refactor FPDFSaveWithFontSubsetEmbedderTest helper methodsc946468e7 Privatize OpenSavedDocument() family of methodsaf85f98ab Assume a value of 0 to prevent float-cast-overflow.49042621c Revert "Remove character width check from cpdf_textpage.cpp"248728011 Remove CFX_DIBitmap::TakeOver().a724d33ea Rename GetDeviceCache() to GetSkTypeface().b04d28fa5 Remove charposlist.{cpp,h}839264f97 Make two charposlist.cpp functions into class methods.08d0b996f Add FPDF_StructElement_GetExpansion()06358a865 Add embeddertest for bug 457855936beea56eb3 Add script to set up android test files up to new PathService.61a50d8be Remove unneccessary UNSAFE_BUFFERS() in cfx_face.cpp.d9b42e427 Fix Skia-enabled pdfium_embeddertests builds in Chromiumf9ca48e5d [skia] Delete reference to empty file96ebf0e24 Remove less-obviously-redundant SetPixelSize() call.f7b9e5491 Redo PathService's Chromium checkout detection methodf4a0be0df Roll third_party/freetype/src/ b91f75bd0..e3a0652b6 (12 commits)9d934152f Remove redundant SetPixelSize() calls.74940be9e Allow pdfium_unittests to execute to completion when misconfigured.fe3d48e14 Roll Memory Tools from 16429092be4b to b635f27e9323 (3 revisions)28e904061 Roll Code Coverage from fc75c61d3a98 to 9cb285b91bea (1 revision)69e297190 Roll Catapult from 8ce759d4b71f to e83a9c8a09df (5 revisions)</details>
Updated pdfium-binaries from 7690 to 7713 . Native and toolchained sourcebuild use pdfium 7191 .
In our cibuildwheel workflow, all targets now exercise pypdfium2’s test suite. This is implemented as a custom post-cibuildwheel step, using Debian 13 or Alpine 3 containers, respectively. Note, there are known test failures on s390x and musllinux_armv7l (but we still provide builds). In particular, on s390x, opening password-protected PDFs is broken. s390x is “use at own risk”; there is absolutely no warranty.
Other workflow and cibuildwheel config improvements.
`2908251a1` Deprecate existing FPDF_REMOVE_SECURITY entry
NullYing for an incentive to fix this.
Callers who want to use this API, note: it is strongly recommended that you ctypes.cast() the HDC object created on your side to our internal pypdfium2.raw.HDC before passing it into FPDF_RenderPage() to ensure compatible types regardless of how the bindings were generated.build_native.py improvements
--reset now does git restore . rather than git reset --hard. This may be significantly more efficient.--test is given, honor the unittests' return code. Suppress a musl-specific failure. Fixed pdfium_unittests not running on musl with clang by applying a build patch.--clang-as-gcc option to build with clang while pretending to pdfium's build system it were gcc. This mode is now used to build for s390x with static clang.21.1.6.0 to 21.1.8.1.<details> <summary>pypdfium2 commit log</summary>
Commits between 5.4.0 and 5.5.0 (latest commit first):
7c6b963 [autorelease main] update 5.5.0b7aff22 Update changelog againbd106ee readme: add another cibw example26b76ac s390x: suppress CPDFPageImageCache.RenderBug1924 unittest0318cbe Update changelog again1c814ee cibw: update commentd6ad1d1 Use loong64/cibuildwheel directly4ac48a2 Test s390x in --clang-as-gcc mode2efa4da build_native: add experimental --clang-as-gcc mode4b42bae Update changelog1be0f00 emplace: extend fallback sourcebuild14adbcc build_native: improve control flow0f870b3 install-static-clang.sh: add loongarch64 handlera1de585 Update static clange65a320 cibw: on loongarch64, GN is now provided by container9f52ee9 Update REUSE.toml1b227a8 Update changeloga2b5e56 build_native: suppress a musl unittest failure3e64497 Add some comments on the new patch3a286ea Apply clang_on_musl.patch and honor pdfium_unittests retcode2355545 Add draft clang_on_musl.patch08bd885 build_native --reset: prefer git restore over git resetfbe60af manylinux tag: switch back from template to function64a0243 Remove commented-out get_wheel_tag()2620d79 base: use dict for platform -> wheeltag mapping522f251 Another doc nit53a1ea5 version.py(docs): ack prefix5df0257 justfile: make docs-open browser configurable by env var0fbe8b6 Always enable windows-only members for windows targets129410b Honor WITH_WINDOWS_MEMBERS only for windows targets5445328 Add a note for aspiring users of the windows-only raw APIe8a3062 test_textpage: make a test case more tolerant3b4fe83 Fix windows test casec0d4990 spoof/windows.h: ack actual ctypesgen output on native hostba9d6b4 Add test cases to confirm windows API availabilitya00d851 Skip the windows-cross approach on native host, rename6f419aa Update changelogd9a0b3b Include windows members in windows wheels2ae3da7 Add ability to include windows-only members66835a1 run_ctypesgen: change probably-useless windows clause to comment</details>
<details> <summary>PDFium commit log</summary>
Commits between 7665 and 7690 (latest commit first):
7cfa57a91 Clean up fpdf_catalog_unittest.cpp0518cbcd0 Change FPDFCatalog_SetLanguage() to take a FPDF_WIDESTRINGcb0ac376f Fix FPDFSaveWithFontSubsetEmbedderTest rendering tests5f7145161 Add OpenScopedSavedDocumentWithPassword() method8d2b21d8a Update Load/Open SavedPage() calls to use Load/Open ScopedSavedPage()04c3f1d50 Add FPDFCatalog_GetLanguage()0455e822d Roll third_party/catapult/ 7b4ef239f..8ce759d4b (17 commits)af81ee924 Shorten the names for EmbedderTest::CompareBitmapToPng() and friends6b7f3c01e Remove EmbedderTest::CompareBitmap() and friends913208200 Replace remaining checksums with images in fpdf_annot_embeddertest.cppfd58998f5 Allow MappedDataBytesTest to pass on platforms without /tmp.eef195189 Replace remaining checksums with images in fpdf_edit_embeddertest.cpp32cfe9786 [android] Remove file-path FT_Open_Face calls.c4eeb683d Suppress compilation warning on write() syscallf003de830 Add third_party/harfbuzz-ng dependencyc414dac15 Update CPDF_Creator's public methodsa25c77d7d Update CPDF_Creator::Create() flags to match FPDF_SaveAsCopy() flags7771b0f69 Add FPDF_SUBSET_NEW_FONTS flag to FPDF_SaveAsCopy()632794087 Avoid hard CHECK() in CFX_CTTGSUBTable.3c18f1328 Create CFX_ReadOnlyContainerStream from MappedDataBytes.f70eb6dc7 Rename and expose CFX_CRTFileStream to CFX_FileAccessStream.182f77e02 Replace more checksums with images in fpdf_edit_embeddertest.cpp6dfb29647 Improve pdfium_diff to show the number of pixels differentd7b0759c0 Implement MappedDataBytes - Scoped Memory-mapped file for Posix.2908251a1 Deprecate existing FPDF_REMOVE_SECURITY entry39a605d58 Replace checksums with images in fpdf_formfill_embeddertest.cppb36037aa1 Allow fuzzy embedder test comparisons on macOS ARM as wellde02c6ade Roll simdutf from 93b35aec2925 to f7356eed293f (1 revision)1fdbfd6cf Consolidate several streams into CFX_ReadOnlyContainerStream<>.089df81ba Roll goldctl from 912157b9c9ed to f809b7407f828e533dd51 Roll corpus tests againb95898bd0 Add pixel test for missing round joinsaf8d69e6a Rename FontDesc to FontCacheEntry.a3459b0ac Fold CFX_FontCache into CFX_FontMgr.efbbd0fc9 Remove CFX_FontMgr::NewFixedFace().4d6672611 Roll third_party/skia/ 2e253c215..c497e689b (203 commits; 30 trivial rolls)d1f53e7cc Add expectation images for fpdf_progressive_render_embeddertest.cpp9a021665b Add images for CFWLEditEmbedderTest.FillWithNewLineWithMultiline13f853866 Ensure GetDC() succeeded in EnumGdiFonts()77ce05dc5 Fix some UNSAFE_TODO usage inside cfgas_fontmgr.cppa3b9c6390 Remove character width check from cpdf_textpage.cppb4361c5b1 Clean up EnumGdiFonts() parameters40e5a9350 Fix indexing in opj_j2k_read_sod()051cbf295 Make VerifyUnicodeForFontDescriptor() a CFGAS_FontDescriptor method.962fdef87 Add support for macOS x86 embedder test PNG expectations9b6e85a3f Roll abseil, build, buildtools, clang and rust247e9e8ad Roll third_party/llvm-libc/src/ 4d1d71696..603c24211 (76 commits)26c2a41e8 Update gn_version to bd3356ac13f411b521b16b11da12cec5150e917ca67af3321 Roll third_party/libunwind/src/ a726f5347..ba19d93d6 (2 commits)0ecb02083 Update siso_version to ed57223a0bd19f8f2767a01b24311e8843ea2890223b91d59 Make VerifyUnicode a method of CFGAS_GEFont.68283b258 Rename variables in fpdf_save.{cpp, h}3d8e01c98 Roll base/allocator/partition_allocator/ 9cce6259a..baaa6670c (24 commits)0609f7c58 Remove most direct CFX_Face usage from xfa/65e0f7a6d Roll tools/win/ 24494b071..baacfc6d5 (2 commits)22b46dbd2 Roll v8/ ce8c1a51c..b3995dff9 (493 commits)42dd4a068 Add new CFX_Font APIs wrapping CFX_Face.5f4c2cc31 Use existing CFX_Font API instead of CFX_Face in fpdf_edittext.cpp.00cfb9ac0 Use Zip() in CJBig2_Image689264195 Reduce number of span accesses in CJBig2_Image5959c7e2e Add text extraction tests for zero-width charactersd20ccc016 Roll Instrumented Libraries from 69015643b3f6 to e8cb570a9a2e (1 revision)601cd0fb5 Roll Catapult from 530794d005fb to 7b4ef239fd89 (22 revisions)0f2490547 Roll Depot Tools from a4318057fe1f to 6235028c6b18 (60 revisions)</details>
Commits between `5.3.0` and `5.4.0` (latest commit first):
<details> <summary>pypdfium2 commit log</summary>
Commits between 5.3.0 and 5.4.0 (latest commit first):
407f5d4 [autorelease main] update 5.4.072d9ef6 readme: clarify PdfDocument input typesf9d1f14 main.yaml: pass and enable test_pdfium8d96aa3 Fix TEST_PDFIUM passthrough for ppc64le,riscv64,loongarch64b9653ba cibw: add option to build & run pdfium unittestsc20cb8b build_native: filter zlib test only if not vendoredce120f5 Rename improper uses of 'bootstrap' to 'install' or 'build'5104524 build_native.py: use one-linereb60d34 build_native comment/help nitsdea41aa main.yaml: re-enable TestPyPI</details>
<details> <summary>PDFium commit log</summary>
Commits between 7616 and 7665 (latest commit first):
ea5b7c384 Use more unsigned values inside CJBig2_Imagec5e72d830 Remove CFX_FontCache::GetDeviceCache().28cdf14a3 CFX_FontCache only ever maps one external cache.6227987c5 Replace some checksums with images in fpdf_edit_embeddertest.cppd8496b024 Replace BitIndexToAlignedByte() with BitIndexToAlignedUint32()f647ef340 Remove CFX_GlyphCache::GetFace().1090ba547 In CJBig2_Image::SubImageSlow(), access data in uint32_t incrementse2033fbce In CJBig2_Image::ComposeToInternal(), access data in uint32_t increments418d620b0 Replace checksums with images in cpdf_security_handler_embeddertest.cpp99dc75917 Replace HelloWorldRemovedChecksum and TextFormChecksum with PNGs581748fd3 Remove CFX_TypeFace abstraction.2d0eb8533 Remove some UNSAFE_TODO() usage in core/fxge/win32aaa96b6c5 Fix botched refactoring in CJBig2_Image::ComposeToInternal()33882e45f Combine android-specific code in CFX_Faceafbd228a9 Avoid callback-based face loading when data already resident.c34335619 Fix typo for GetStrokeColorRef() in CPDF_RenderStatus.aff36f129 Use Zip() in CJBig2_GRDProc::DecodeArithOpt3()0829d5b6f Replace all crbug.com/pdfium/bug IDs with crbug.com/ids.e1889e22e Re-enable CFWLEditEmbedderTest.FillWithNewLineWithMultilinebba246e95 Replaces checksums with images in fpdf_flatten_embeddertest.cppb75b77c96 Replaces checksums with images in fpdf_thumbnail_embeddertest.cpp1c78362d2 Consolidate CJBig2_GRDProc code for per-line bytes/bits calculationsbe0be7a12 Remove ToPng from all method names in fpdf_view_embeddertest.cpp3d935411d Use images instead of checksums for cfwl_edit_embeddertest.cpp566d1ffb2 Add brotli dependency1fa48ccd4 Fix tools/roll_pdfium_deps_test.py expected outpute34416cc8 Add fuzzy matching support to all bitmap formats358e34f33 [Skia] Fix rendering text with the wrong x scalea53aee8a6 Make ScopedFontTransform private to cfx_face.cpp3bcede88b Replace Checksums with Images in fpdf_view_embeddertest.cpp9063b9dbd Fix comment for CJBig2_Image::{Get,Set}Pixel()a16260112 Remove some knowledge of FT_Library from CFX_Font and CFGAS_FontMgr.fd276cd4e Remove span::take_first_elem() usage in CJBig2_GrdProc744333092 Reduce CJBig2_Image::GetLine() calls in CJBig2_GrdProcaa6d960eb Change CJBig2_Image::CopyLine() to take spans instead of line numbersc5bb905ea Roll libpng from f63f5ef0e0ef to 172f83835c98 (1 revision)564a91f69 Roll Zlib from e00f7038713f to 980253c1cc83 (3 revisions)c561ed1a3 Replace some checksums with images in fpdf_annot_embeddertest.cpp5ac3decf7 Add fuzzy pixel matching to CompareBGRxBitmapToPng()97ffcdba4 Move MaxPixelPerChannelDelta() to testing util fileaf3496976 In CJBig2_GRDProc, only check LTP value if its value changes8c6da7c44 Combine nearly identical code in CJBig2_GRDProc7cc0a4a92 Roll simdutf from 75bea7342fda to 93b35aec2925 (1 revision)ddd71fe5c Remove UNSAFE_BUFFERS around atoi() and atof()e17668abc Remove UNSAFE_TODO() around strlen() and wcslen().24d38d475 Handle line 1/2 first in loops in CJBig2_GRDProc39c57bd55 Remove UNSAFE_TODO() usage in CJBig2_GRRDProc::DecodeTemplate1Opt()e59a2a5ca Refactor CJBig2_GRRDProc::DecodeTemplate1Opt()d0e750e25 Use std::iota() in CPDF_TrueTypeFont::SetGlyphIndicesFromFirstChar()85b300eb8 Remove UNSAFE_TODO() usage in CJBig2_GRRDProc::DecodeTemplate0Opt()8a098282d Refactor CJBig2_GRRDProc::DecodeTemplate0Opt()990624e50 Remove height-based CJBig2_Image::GetPixel() overload4b5f9a49c Remove height-based CJBig2_Image::SetPixel() overload9fb06635e Merge duplicate code in CJBig2_GRRDProc::DecodeTemplate1Unopt()a046bea02 Use line-based JBig2_Image pixel methods in JBig2_GrrdProcdb64c258f Remove some conditionals that never evaluate to true15de799be Use std::ranges::fill() everywhere instead of std::fill()4e6f809c8 Fix shared form XObjects mutating matrix valuesa1a1e12dc Output PNGs as data: URLs in embedder testsab124d69b Consolidate PNG encoding coded57977896 Use SkPathBuilder with FillPathWithPaint.dbf74efd6 Replace AnnotationStampWithApChecksum() with imagesad9ae06e7 Remove some UNSAFE_TODO() usage in JBig2_GrrdProc.cpp7342f90c5 Remove misc UNSAFE_TODO() usage in JBIG2 code6804f0238 Remove V8_ENABLE_SANDBOX macro usage from PDFium.34cf612a3 Remove check for pointer that is never null11e4b3332 Make XFA font enumeration lazy315b7e491 Add WriteBitmapToPng() calls in CompareBitmapToPng() util functions65a64001d Run optipng in testing/resources/pixel/b97b6fbdd Run optipng in testing/resources/embedder_tests/f4614c7cb Roll Memory Tools from d50025066836 to 16429092be4b (3 revisions)e5483aa63 Remove UNSAFE_TODO usage in cpdf_type3cache.cppa8cf22d61 Remove UNSAFE_TODO usage in cpdf_sampledfunc.cppc1cb9dec3 Replaces checksums with images in fpdf_ppo_embeddertest.cpp4689a8578 Add embedder test for shared Form XObject matrix state leakagef9972a08a Update fpdf_transformpage_embeddertest.cpp to use images instead of checksums624447c39 Replace md5 checksums with images for bug_896366be91e2c59 Replace checksums with images in fpdf_editpage_embeddertest.cpp0fd0e9dc4 Add Images to replace rectangles_and_triangle checksums9bdc1142d Update checksums to images for rectangles_multi_page864c56d5b Update fpdf_editimg_embeddertest.cpp to use PNGs instead of Checksums1af1a9b70 Fix botched refactoring in CJBig2_GRDProc::DecodeArithTemplate3Opt3()08f3c8a7a Check bitmap format is the same before/after progressive rendering5d520aead [Skia] Track premul state in fpdf_progressive.cpp20e0fc91a [Skia] Pixel test with alpha in the final imaged25c46aee Add roll_pdfium_deps.py58e7d0609 Limit bitmap memory usage in PDFiumFuzzerHelper in 32-bit builds85ccccb11 Create common helper functions for fx_coordinates_unittest.cpp25a40d539 Remove JBig2_Image::data()a2b4cfd17 Remove more UNSAFE_TODO() usage from CJBig2_GRDProccd7afcdd6 Store raw_spans in CJBig2_GRDProc8d9cd7308 Remove UNSAFE_TODO() in CJBig2_GRDProc::DecodeArithOpt3()cbd1e55dd Remove unneeded fx_memcpy_wrappers.h includese00e64992 Remove UNSAFE_TODO() in CJBig2_GRDProc::DecodeArithTemplate3Opt3()3c679253a Use continue in CJBig2_GRDProc::DecodeArithTemplate3Unopt()d3d9de4e8 Rename line variables in JBig2_GrdProc.cppa3977d2ff Simplify SKIP logic in JBig2_GrdProc.cpp7d983fbd3 Use std::array and pdfium::span more in JBig2_GrrdProc075686346 Use line-based JBig2_Image pixel methods in JBig2_GrdProc942a19057 Roll abseil, buildtools, and libc++e685011cc Reduce work in inner loops in CJBig2_HTRDProc9057c5eef Add and use line-based JBig2_Image::Get/SetPixel() overloadsb005ff432 Roll build, clang, and tools/rusta466a4ecd Roll third_party/rust/ 8b4e75b57..c45037002 (34 commits)ec186b1d1 Remove remaining UNSAFE_TODO() usage in CJBig2_Imagef55dfa933 Update siso_version to 1624786919608fb2140226f6468cd8d0b52fe3b5e6b53772b Update gn_version to 5550ba0f4053c3cbb0bff3d60ded9d867b6fa371b6a9c5fa9 Get rid of some UNSAFE_TODO() usage in CJBig2_Image::ComposeToInternal()3054b5148 Use switch statement in CJBig2_Image::ComposeToInternal()0bb75a12c Roll third_party/freetype/src/ 30e45abe9..b91f75bd0 (8 commits)6122b4f93 Roll third_party/dragonbox/src/ 6c7c925b5..beeeef91c (29 commits)288993610 Roll v8/ 5c1077b24..ce8c1a51c (293 commits)988ed1d86 Roll third_party/llvm-libc/src/ 03f822d2a..4d1d71696 (36 commits)41aaa0ba6 Roll third_party/skia/ 5a8d48036..2e253c215 (65 commits; 13 trivial rolls)5558f4d1e Roll third_party/libunwind/src/ ef486348f..a726f5347 (7 commits)d806734a5 Roll third_party/libc++abi/src/ 83a852080..8f11bb1d4 (3 commits)0782fc022 Roll third_party/libjpeg_turbo/ 6383cf609..6bb85251a (2 commits)ac74d5984 Roll base/allocator/partition_allocator/ e711e98fa..9cce6259a (5 commits)bd123da1c Reduce scope of UNSAFE_TODO() in CJBig2_Image::ComposeToInternal()dbf9c1b07 Start using spans in CJBig2_Image::ComposeToInternal()e0cf5f918 Get rid of some CJBig2_Image::GetLineUnsafe() usage8580b9b4a Delete CJBig2_Image::GetLinePtr()cfe5f8056 [PDFium] Prevent infinite loop in AGG with degenerate dash patterns9497f64ed Use span API for gradients143dc32e2 Update jbig2_embeddertest.cpp to use PNGs Instead of Checksumsfacbc8848 Use Comparison with PNGs for bug_8903228a0ce4c86 Replace checksums with PNG image expectations for rectanglesc2fc5b51f Use PNG-based comparison for 612x792 blank page7ab0fb116 Roll third_party/skia/ 279bb3648..5a8d48036 (106 commits; 15 trivial rolls)72521d1d1 Simplify JBig2IntDecoderState ownership model, remove TRDProc::SBSYMCODELEN298ef05b5 Use tighter bound for IDI in REFAGGNINST == 1 huffman caseed7df8f52 Consistently read JBIG2 combination operatord87dae68b Roll corpus tests againf0fa46532 Stop setting SBSYMCODELEN in REFAGGNINST > 1 arith case56de60a2a Fix reading refine-several symbols in huffman symbol dictionaries using refinement56af84d12 Roll corpus tests againf4f065c35 Roll Catapult from 0e07ae47d5e6 to 530794d005fb (10 revisions)8f795fc3c Roll Depot Tools from f8cc59a94be9 to a4318057fe1f (39 revisions)db61edb54 Roll goldctl from f1d8bd5336c2 to f09b414fc9a587ceb569a Roll Zlib from 63d7e16739d8 to e00f7038713f (2 revisions)a7ae2caad Roll Memory Tools from 27e942fcc0c4 to d50025066836 (2 revisions)c09bda129 Roll libpng from a79803bfd168 to f63f5ef0e0ef (1 revision)</details>
Updated pdfium-binaries from 7616 to 7665 . Native and toolchained sourcebuild use pdfium 7191 .
Fixed inclusion of loongarch64 build in GH attestation. This was an oversight in the workflow.
loongarch64 build in GH attestation. This was an oversight in the workflow.ppc64le (glibc) is now built at pdfium-binaries using upstream's tooling.
This means pypdfium2's conda builds now also support this platform.
Updated pypdfium2's setup/workflow accordingly to use the pdfium-binaries.<details> <summary>pypdfium2 commit log</summary>
Commits between 5.2.0 and 5.3.0 (latest commit first):
04b411a [autorelease main] update 5.3.0a34e0c0 resources.rc: set just the year, remove -presentdb1d891 Bump copyright year52a4689 build_native: order functions as they are called7e2f78f build_native: a few more enhancements67f4874 build_native: move legacy_libs_compat patch to proper place1ab4ce4 build_native: apply container compat patch only where necessary6967832 Drop now-unused patches5dbd1f2 get_cross_deps: map ppc649b87ea9 Patchless ppc64(le) build994125d Platform detection hotfixf5d3795 Bump pdfium pin to 7592 to make ppc64le workd0f4b03 ppc64(le): use the pdfium-binaries29b697b Somewhat simplify utils/get_gcc_prefix.pyb9bbab6 fix: include loongarch64 build in GH attestation32aa336 build(deps): bump actions/download-artifact from 6 to 735b4f4c build(deps): bump actions/upload-artifact from 5 to 6c983a6c another pyproject.toml/cibw correctionf60638e readme nit8ba2e9b cibw: fix dnf clean/makecache logic</details>
<details> <summary>PDFium commit log</summary>
Commits between 7568 and 7616 (latest commit first):
99b9fd3b0 Add new span versions of CJBig2_Image::GetLine()adab0df23 Rename CJBig2_Image::GetLine() to GetLinePtr()f3518ab0a Consolidate identical compose code in CJBig2_Imagecb05cb24e Use unsigned bit position in FaxModule::FaxG4Decode()83b6a77b0 Remove some UNSAFE_TODO() usage in CJBig2_Image31da67588 Loosen restriction on CJBig2_Image::span()74eeccad8 Add EmbedderTest::CompareBitmapToPng*() to check against PNGs8e788692d Get rid of remaining UNSAFE_TODO() usage in faxmodule.cppacff14385 Get rid of UNSAFE_TODO() usage in FaxFillBits()fc16d1902 Get rid of more UNSAFE_TODO() usage in faxmodule.cpp034ec4eda Add CJBig2_Image::has_data()67c76beb2 Clang-format code068862d16 Test ToUnicodeMap bfrange behavior when the dest code goes above 0xffff87fa82919 Remove a StringToCode() call in CPDF_ToUnicodeMap::HandleBeginBFRange()1012d41af Add the complete list of clang GCS entriesae78a837f Clean up some paths in testing/BUILD.gn41d163ef0 Make CPDF_ToUnicodeMap::ReverseLookup() faster01a17c1ce Turn off more raw-ptr bits when pdf_use_partition_alloc=false3b52741bc Stop reading arm_use_neonc62b86c55 Make UnownedPtr work with implicit ctorf75eb7b9b Reduce the scope of UNSAFE_TODO() macros in cstretchengine.cpp5cb9c7591 Get rid of UNSAFE_TODO() usage in FaxEncoder403e0e78b Roll third_party/skia/ a9e9573a3..279bb3648 (208 commits; 38 trivial rolls)b8c2e9a17 Do IWYU for stdint.h in //fxbarcode headers5ea29fc0d Change UnownedPtr's raw pointer ctor to be non-explicit8c7780d85 Use more scopers within EmbedderTest9823c4f57 Update RenderTransparencyOnWhiteBackground test49a2ab87d Remove out-parameters from testing/utils/path_service.h methods0a981f049 Switch to backticks in comments in testing/embedder_test.h750df1d21 Avoid direct raw_ptr use in fpdf_editpage.cppccb1bef3e Roll simdutf from acd71a451c1b to 75bea7342fda (2 revisions)23120ca1c Roll Code Coverage from 9e4876df273e to fc75c61d3a98 (1 revision)83bf49b9e Delete useless CFX_GlyphCache::RenderGlyph_Nativetext()d2b86b098 Remove unused enum FontAntiAliasingMode valuesdc836edce Merge nearly identical code into SkFontFromCFXFont()31fc45e3a Overwrite the timezone for JS/pixel/corpus tests on macOS48a78762a Handle multiple plus and minus signs in string to num conversionsdd9b48378 Update StringToFloatImpl() template class name757a4d855 Add tests for multiple leading signs for string to num conversions801ef71fa Roll third_party/icu/ f27805b7d..a86a32e67 (1 commit)f72e4722b Roll base/allocator/partition_allocator/ 2f4069fb8..e711e98fa (37 commits)10042915c Consolidate UNSAFE_BUFFERS usage in CFX_Face79d0cbc2d Roll build, third_party/rust, and tools/rust5532c7121 Roll libjpeg_turbo and nasm374dcd29e Update gn_version and siso_version3d0c353df Roll gtest and libunwindf03d6b4b8 Roll v8/ dd1717b9d..5c1077b24 (862 commits)0727290e5 Roll third_party/freetype/src/ fc9cc5038..30e45abe9 (16 commits)b952e5468 Remove remaining DCHECK(false) calls18782f48a Roll clang, libc++, libc++abi, llvm-libc, buildtools, and abseil-cpp7f4f29bdb Set use_siso=true by defaulte11956eeb Further tidy CFX_Face methods1af9b9a43 Split CFX_Face::GetFontStyleInfo() into 2 to avoid returning a structfbb415d83 Make CFX_Face::SetPixelSize() private7fb2ca6a1 Avoid using FreeType integer types in cfx_face.h19d2fdabd Override use_cxx23 to false in pdfium0143ce1ca Roll build/ 371ecb089..3c58005ad (62 commits)2d0a1fe82 Roll Catapult from 5b6dfc90097d to 0e07ae47d5e6 (36 revisions)416ad2423 Roll Depot Tools from 6f83fce8652b to f8cc59a94be9 (83 revisions)</details>
Updated pdfium-binaries from 7568 to 7616 . Native and toolchained sourcebuild use pdfium 7191 .
Fixed inclusion of loongarch64 build in GH attestation. This was an oversight in the workflow.
ppc64le (glibc) is now built at pdfium-binaries using upstream’s tooling. This means pypdfium2’s conda builds now also support this platform. Updated pypdfium2’s setup/workflow accordingly to use the pdfium-binaries.
Added new builds android_{arm64_v8a,armeabi_v7a}, {many,musl}linux_{ppc64le,riscv64,loongarch64} and musllinux_armv7l to the release process. This gre
android_{arm64_v8a,armeabi_v7a}, {many,musl}linux_{ppc64le,riscv64,loongarch64} and musllinux_armv7l to the release process. This greatly improves platform support. Loongarch is only uploaded to GH, as PyPI doesn't accept it yet. Replaced musllinux_{x86_64,aarch64,i686} with our own builds, as they are a bit smaller than the pdfium-binaries.s390x this once through emulated gcc, because static clang doesn't seem to produce working builds for this target. We may not be able to continue doing this.build_native.py: Added full dependency library vendoring abilities. This is now the default behavior on fallback setup. Integrated ninja/gn bootstrapping helpers.ppc64le, riscv64, loongarch64 (and theoretically s390x) using static clang that runs on the host architecture (even though from within an emulated container), while being pre-configured for cross-compilation to the target architecture. This is much faster than building with an emulated compiler. Many thanks to Matthieu Darbois (mayeut) of pypa/manylinux for coming up with this approach.<details> <summary>pypdfium2 commit log</summary>
Commits between 5.2.0b1 and 5.2.0 (latest commit first):
c774578 [autorelease main] update 5.2.0be30e32 cibw: attempt to make package install more reliable on RHEL-based imagesf5cc6af Temporarily enable s390x (emulated gcc) for v5.2.023efe69 Readme update (native sbuild / cibw)25213b7 sbuild.yaml: hardcode glibc, add legacy manylinux2014 tag5d47540 Slightly update main.yaml4270a1a textpage/docs: move note about line breaks6ef7916 sbuild_native: remove stale, unused input130fa06 Revert "Update changelog"1cce831 workflows: auto-adapt branch02f224a Update changelog760ac8e conda.yaml: add ability to set ref03c3f43 main.yaml/augment: fix emulated1b66381 main.yaml/augment: set fail-fast: false8904ad3 main.yaml: formatting / wsd92a097 main.yaml/augment: reorder targets2b2e900 sbuild_one: run apt-get updatef66cad2 main.yaml: attempt to deduplicate augment step2e9b9dd main.yaml: add s390x, commented outc11acd2 autorelease: clarify pdfium update message100ff5b Attempt to fix conda05f5006 Add explanation why TestPyPI is currently commented out6905727 ppc64le: add manylinux2014 tag356165f changelog correctionb557aa5 Put changelog in GH release desc after all, follow usual processd3716fa Manually fix changelog</details>
<details> <summary>PDFium commit log</summary>
Commits between 7557 and 7568 (latest commit first):
e3c8ca828 Remove some unused includes of cfx_font.cpp43df95591 Roll corpus tests againaccc1fb03 Add premultiplied alpha support to test_runner.py9a6d63b87 Add premultiplied alpha support to pdfium_test1aa30337f Improve pdfium_test --png implementation31a6ce372 Reduce the number of parameters in pdfium_test's WriteFoo() functions5a2aa46d0 Simplify static_assert() statements in fpdf_view.cpp3de86cb44 Simplify SetRendererType()a8882bc9d Unified GetFooParamValue() and SetFooParam() implementations62c90734f Remove some stray FreeType-related usage040aa1292 Use uint32_t for font face indices instead of size_tc122e190f Reuse InitializeFreeType() on Android97d1584ea Move FreeType code out of cfx_fontmgr.cppab91cd971 Remove FT_UInt usage in cfx_unicodeencodingex.cppa1229dedd [rust png] Fix handling of discard_transparency in EncodeBGRAPNG.287d53eaa [Skia] Handle odd-sized dashed line arrays correctlydc264b3b7 [AGG] Handle odd-sized dashed line arrays correctlyc8a09ecb0 Update pdfium_is_standalone description in README.md2edb4ecda Roll libpng from 84d676669166 to a79803bfd168 (2 revisions)44a06aa38 Generate build_with_chromium variable via //DEPS66c6bc409 Roll Skia and update serial proc return value42476eac4 Roll Zlib from 5aa617372945 to 63d7e16739d8 (1 revision)2c9001241 Roll goldctl from dcfa817da658 to 68c457e302c1</details>
Updated PDFium from 7529 to 7557.
7529 to 7557.android_{arm64_v8a,armeabi_v7a}, {many,musl}linux_{ppc64le,riscv64,loongarch64} and musllinux_armv7l to the release process. This greatly improves platform support. Loongarch is only uploaded to GH, as PyPI doesn't accept it yet. Replaced musllinux_{x86_64,aarch64,i686} with our own builds, as they are a bit smaller than the pdfium-binaries.build_native.py: Added full dependency library vendoring abilities. This is now the default behavior on fallback setup. Integrated ninja/gn bootstrapping helpers.ppc64le, riscv64, loongarch64 (and theoretically s390x) using static clang that runs on the host architecture (even though from within an emulated container), while being pre-configured for cross-compilation to the target architecture. This is much faster than building with an emulated compiler. Many thanks to Matthieu Darbois (mayeut) of pypa/manylinux for coming up with this approach.<details> <summary>pypdfium2 commit log</summary>
Commits between 5.1.0 and 5.2.0b1 (latest commit first):
c1e05fc [autorelease main] update 5.2.0b1221756a autorelease/config.json: unset humble, set beta6554cbc Tried to delete tags after alleb5e884 Attempt fix for augmented builds version blunder0bf7f1f Next issue6a47cee [autorelease main] update 5.3.047da5cd Fix blunder in publish step0b46c59 [autorelease main] update 5.2.030f86fd Improve changelog wording236e52c Add gh_only/ to .gitignore002ad34 pyproject.toml: add comment10308e7 Augment releases with our own builds (#398)063e40b main.yaml: set immutableCreate: truec376f7a Don't needlessly call platform.{mac,win32,android}_ver()5e8b20a Lean & reliable attestation verificatione285ceb main.yaml: add build provenance7482c55 build(deps): bump actions/checkout from 5 to 6 (#397)5c7eef8 bootstrap_buildtools(): logging8e45268 cibw: vendor dependency libraries, except on s390x654564b build_native: full dependency lib vendoring abilitiesf108424 Revert s390x again099b623 cibw/clang: generally do not vendor libc++50a7319 Test if s390x might work if we don't vendor the libc++8e2ade5 cibw/s390x: back to emulated gcc5820626 Update some commentsd637bf4 Update changelog616ad3f build_native: update another comment8683ca1 build_native: remove comment91f0f43 Fix typoa91a189 Fix needless f-strings again9f27f61 Don't system_libcxx_with_clang.patch if libc++ is vendored6c7a287 cibw.yaml: enable clangcross targets by defaultd90f886 build_native: update comment on --vendora6a215b Update CIBW workflow875d114 Don't vendor libc++ on musllinuxa808974 Apply avoid_new_clang_flags.patch only if needed778c830 Extend no_libclang_rt patch3a72eda Attempt static clang for ppc64le,s390x,riscv64,loongarch64016ebbf sbuil.yaml: add missing tag to macos_native_x64 testtarget08e6d66 readme/raw api: avoid leftover sized pointerdf00279 get_gcc_prefix: avoid needless f-string</details>
Updated PDFium from 7529 to 7557 .
See the beta release notes on GitHub here
`b2e300aba` Remove deprecated Skia SkPath API usage
textpage.get_textobj(), PdfTextObj and PdfFont.
These helpers currently just cover font info and object-level text extraction, but may be extended in the future.
For objects of type FPDF_PAGEOBJ_TEXT, PdfPage.get_objects() and the PdfObject constructor will now return PdfTextObj rather than just PdfObject instances.
Thanks to Mykola Skrynnyk for the initial proposal.
<!-- See #392, #391, #358, #325 -->musllinux tag from 1_2 to 1_1. This was erroneously incremented shortly before 5.0.0, but the pdfium-binaries do still run on musllinux_1_1, probably because they're statically linked.build_toolchained: Significant portability enhancements. Should now work on Linux CPUs that are unhandled/incomplete upstream (e.g. aarch64). Also, building on Windows arm64 natively may now work. Added ability to cross-compile ppc64le from x86_64. Removed --use-syslibs option (use build_native instead).build_native: Fixed Python 3.6/3.7 compatibility. Added --no-libclang-rt option.BUILD_LICENSES/ sub-directories. Added extra licenses for DLLs pulled in by auditwheel. This concerns sourcebuilds/cibuildwheel only. The wheels on PyPI are unaffected.sbuild.yaml workflow. This does not impact releases, which still use the pdfium-binaries.ubuntu-24.04-arm) for armv7l builds, which is much faster than with an x86_64 host. Added armv7l manylinux target (previously just musllinux).
This does not impact releases yet, but it may in the future.macos-13 to macos-15-intel.<details> <summary>pypdfium2 commit log</summary>
Commits between 5.0.0 and 5.1.0 (latest commit first):
46afdae [autorelease main] update 5.1.0d6d1ea5 build_toolchained: set config var regardless of sync1054d12 Update RTD build host0c2eef0 build_toolchained: update comment346bba0 build_toolchained: use PORTABLE_MODE on musllinux and androidedad47e main.yaml: add ref to upload-artifact bug24aea3c Update changelog again6bc04d3 main.yaml: propagate py_version28639a5 Add a comment5c93651 Readme: update sourcebuild section49404d2 Fix reuse lint7cb5bc0 Fix bootstrap_ninja()b4f2bc6 Extract non-split-related work from PR #394d839e2e Defer _get_local_bin()6be8ad0 build_toolchained: in PORTABLE_MODE, use bootstrap_buildtools()6fb248b Make bootstrap_gn target dir portable1613353 Add proper ninja/gn bootstrapping functions6ec44e2 Avoid setup-just action where we can0cd1f73 Update changelog again5fc9bb0 sbuild_one: fix artifact naming if target_os is set3998f82 pdfium-binaries/android: bump to android_23a645230 sbuild.yaml: attempt adding android buildsc739b22 build_toolchained: continuea86826f build_toolchained: limit PORTABLE_MODE to Linux for now2c8bd51 sbuild_one: drop just dependency1bcc02a Update changelogf60248c chores: fix just check, rename some patchesd9f66f0 build_toolchained: more portability fixes9d32e5f sbuild.yaml: test build_toolchained.py on native arm64 runnerf54247c Further build_toolchained improvements45c8084 build_toolchained.py: add ppc64le cross-comp ability2d8e00b Improve portability of build_toolchained.py3eb8204 Remove build_toolchained --syslibs from CI4c1038b build_native: add option to disable libclang_rt dependencyc345690 Readme: somewhat update licenses sectionf5bff20 Add extra licenses for cibuildwheel builds (#390)5159278 Clarify and update changelog7e849de Merge pull request #392 from pypdfium2-team/font_helpers17c8412 Parametrize font helpers test51d0adf Add draft font helpersa816bfe Update REUSE.toml, fix typo in pyproject.tomlda3b4f5 Make GN patch less invasive2e3d2ba Factor out cloning utility for cibw gn bootstrap4b4e344 cibw i686: try to improve GN bootstrapfef5d24 Move patches9e0e53f cibw: fix manylinux_i686 target5bd0d31 Drop emulated musllinux_armv7l target0e74a4c cibw: retry armv7l with newer imagee5f2212 Comment out manylinux_armv7l againbcad837 Yet another attempt at cibw/manylinux_armv7l0c7bde8 cibw/pyproject.toml nits4b6f2dc cibw/pyproject.toml: deduplicate symlinks (#389)8d6f6ad cibw: give up on manylinux_armv7l for now767e3a5 cibw: have another go at armv7lf06a078 cibw: try to fix manylinux_{i686,armv7l}9d56c4a Rearrange cibw.yaml2dbde32 autorelease.py: style nite7ca107 utils/get_gcc_prefix: handle armv8l as well2ea9a28 cibw: say ubuntu-latest instead of ubuntu-24.046f1245a autorelease: make sure GH release notes stay below limits1060a86 Readme: make python setup deps slightly clearer55a94e8 Changelog73c1a96 Update macos-13 to macos-15-intel (fixes #388)d3beb16 Fix up previous commit009f11a Re-suspend trigger_main schedule after all605d765 Minor cleanups94b02c1 setup/build_native: python < 3.8 compat1f457d4 build(deps): bump actions/upload-artifact from 4 to 577f0697 build(deps): bump actions/download-artifact from 5 to 68aa2658 Fix inclusion of BUILD_LICENSES sub-directoriesc74b8f4 Further changelog tweak1c50fb3 Changelog markdown rendering fixa3f2a9f main.yaml/test: install auditwheel only on linuxe26769a Post-release chores, reinstall schedule</details>
<details> <summary>PDFium commit log</summary>
Commits between 7483 and 7529 (latest commit first):
c2e74df91 Add FPDF_SYSFONTINFO version 2 for per-request font matching99e950ba7 Remove CFX_Face::GetRec() callers from CFGAS_FontMgr917797d28 Add CFX_Face::HasFaceRec()a3cc2e30e Remove FXFT_Get_Glyph_* macrosce3baac0f Rename "pFace" instances to "face"2a230b8e7 Fix decoding of JBIG2 files with more than four referred-to segments2de46c603 Remove redundant jbig2 test files503710a3d Rename "pStreamAcc" instances to "stream_acc"57baefcd1 Make Skia corpus tests pass for Mac ARM64 with macOS 155f97789be Make Skia pixel tests pass for Mac ARM64 with macOS 15bcd8f224d Teach suppressor.py about mac_arm and mac_x861861f24ae Consolidate CFX_Face::Open() callers1a275e49a Update test corpus revisiondbfa29d16 Fix progressive unoptimized decoding of JBIG2 generic region with template 14d3dc1bd8 Update some Skia test expectations for Mac ARM64 with macOS 1561b3d09eb Fix various pylint warnings in testing/tools/*.pyf2de80031 Auto-format testing/tools/*.pya4c4d0ad1 Fix reading refine-one symbols in huffman symbol dictionaries using refinementdebf26bdc Limit bitmap memory usage in PDFiumFuzzerHelper450290147 Roll third_party/freetype/src/ 36f917cc6..fc9cc5038 (17 commits)c81783ef3 Roll third_party/freetype/src/ e969f5298..36f917cc6 (3 commits)1d67846a1 Roll Catapult from 67287c8f0b4e to 5b6dfc90097d (37 revisions)2bf421a5e Roll Depot Tools from 3008b57e5d18 to 6f83fce8652b (79 revisions)89bb8a241 Roll Code Coverage from ef6864ec11f1 to 9e4876df273e (1 revision)06df1a295 Remove reference to third_party/instrumented_librariesd7fbd2ca8 Update test expectations for Mac ARM64 with macOS 15f49889b9c Regenerate jbig2-mmr.in0f689aaa2 Rename "iIndex" instances to "index"728097ea0 Delete CFX_Face::ClearExternalStream()bebe89931 Remove dead code in xfa/fwl/cfwl_notedriver.cpp2fbebb9ef Enable new unsafe-buffers diagnostic for PDFium.0ca246f33 Fix another CHECK() failure in CXFA_Document::DataMerge_CopyContainer()0b9f84147 Rename "pContext" instances to "context" or "ctx"8ace2bfc6 Change pdfium_fuzzer_helper.cc to render with different bitmap formatsd83e98eb1 Use more spans in pdfium_fuzzer_helper.cc53d474a8e Roll third_party/freetype/src/ d3668e00d..e969f5298 (6 commits)5e6ead329 [rust png] Make libpng-dependent targets conditional.dffbe9888 Consolidate the determination code for font stylesb3b74b1d1 Roll build, third_party/rust, clang, and tools/rustee0ba679a Roll abseil-cpp, buildtools, and libc++bb669b8f8 Roll goldctl from 93cc2a21b9bd to 53e5aa34af53a61bc59be Roll Zlib from 85f05b0835f9 to 5aa617372945 (1 revision)7f43fd792 [rust png] Support using Rust-based PNG codec in XFA implementation.4d80852fd Update siso_version to 0915813c4c786240e12d03aa3018c02bab4df14fdb3687db7 Revert "Add debugging data to help diagnose a hang in fread()"e3387c5b1 Roll third_party/libc++abi/src/ f7f5a32b3..a02fa0058 (4 commits)95856f11b Roll third_party/libunwind/src/ 6dc2f29f9..14b9dee79 (10 commits)4cb6688ca Roll third_party/llvm-libc/src/ dba78cfc7..006672b9b (52 commits)a9cd189c6 Update reclient_version to re_client_version:0.185.0.db415f21-gomaipab7975e18 Roll third_party/icu/ 1b2e3e8a4..f27805b7d (6 commits)526366fa4 Roll v8/ 7f18b53ba..dd1717b9d (325 commits)3f8887d82 Update gn_version to 07d3c6f4dc290fae5ca6152ebcb37d6815c411abad29c35be Roll third_party/googletest/src/ 9df216cc9..b2b9072ec (10 commits)797447805 Roll third_party/fp16/src/ b3720617f..3d2de1816 (5 commits)639553c55 Roll third_party/skia/ 479696a3c..a1ff58d34 (61 commits; 6 trivial rolls)ded86ac62 Roll third_party/clang-format/script/ 1549a8dba..c2725e062 (20 commits)5bbc12ff9 Roll base/allocator/partition_allocator/ e3fec0a68..2f4069fb8 (9 commits)d4c2dadd7 [rust png] Un-nest ProgressiveDecoderIface::Context.b73d6847a [rust png] Stop using SkXPS...PngHelpers.h from PDFium.b4b1cfd4d Move all FT_Load_Glyph calls into CFX_Face for consistency89afb3340 Remove dead code: CPWL_Edit::CutText()048a19460 Remove dead code: CPWL_Edit::{Copy,Paste}Text()216862ba4 [rust png] Introduce ProgressiveDecoder::PngReadMoreData.8f655643d [rust png] Deduplicate cleanup/return logic in PngContinueDecode.b4937e9b4 [rust png] Devirtualize all methods of ProgressiveDecoderIface.3077cfa5a Roll libpng from dc2507e99733 to 84d676669166 (4 revisions)f5c376f93 [rust png] Stop using hungarian (dwFoo / pFoo) in ReadMoreData.553e531de [rust png] Add explicit PngFinishedDecoding callback.c890df130 [rust png] Remove unused ProgressiveDecoder::src_pass_number_ field.e136238ea [rust png] Use new overload of SkXPS::MakeDocument.d2c50ffd0 Roll third_party/skia/ 89a8bc508..479696a3c (104 commits; 20 trivial rolls)96a2bccf5 [rust png] Remove pass parameter from PngReadHeader.47dbb620e [rust png] Add ProgressiveDecoderTest unit test for a simple PNG.dfba959ae Update bug IDs in TODOs in testing/SUPPRESSIONS and related test filesfa63d2782 Refactor CPDFSDK_PageView::OnKeyDown()4aa3b725c Upgrade libtiff from 4.7.0 to 4.7.1b2e300aba Remove deprecated Skia SkPath API usage82125ddb8 [rust png] Decode PNGs directly into device_bitmap_.a8cba1c40 [rust png] span-ify return type of PngAskScanlineBuf.c6dac1b25 [rust png] Remove components_count and "bpc" from PngReadHeader.4c93f9f22 [rust png] Remove obsolete PngDecoderDelegate::DecodedColorType.f0f8a099a [rust png] Check device_bitmap's format is always kBgra for PNGs.9ab3b8992 [rust png] Remove scanline_size_ field.dd778d389 [rust png] Deduplicate code into a new GetScanlineSize method.923d946a1 Add crbug.com links to TODOs in testing/SUPPRESSIONS</details>
Your coding agent can read these notes before it upgrades. Set up the MCP server →