Skip to content

Sync S17: merge upstream PDFium up to 6688c576f (Nov 6 2026) - #116

Merged
bobsingor merged 35 commits into
embedpdf/mainfrom
embedpdf/sync/6688c576f
Nov 8, 2026
Merged

bobsingor merged 35 commits into
embedpdf/mainfrom
embedpdf/sync/6688c576f

Conversation

@bobsingor

Copy link
Copy Markdown
Contributor

Release-gate sync: 34 upstream commits, 2b52a82 to 6688c57 (upstream's tip). Report: docs/embedpdf/syncs/2026-11-08-6688c576f.md.

  • The object-tree traversal also starts from the catalog when the trailer doesn't reach it (1799c8d53). Our resolve mode stays (layer-save); our only callers are the page content generator's shared-object checks, and our save path doesn't use this traversal.
  • Upstream fixes that ship: JPEG rewinds stop on an altered header (4f93283fe), Windows UTF-16 font name records are read (3351236ec), Lab ICC profiles convert (30b2a20a5), supplementary-plane characters mirror (03ad8222f).
  • FreeType (36 commits), libc++abi, libunwind, gn and siso rolls; every target's patches still apply.
  • Conflicts: the traversal header, and two unit-test files where both sides added tests (both kept).
  • Layer-mode writers: five signature tests' object counts, moved by Draw a signature field's box #114's signature box; informational.
  • No API change.

Local checks (darwin-arm64): 1359 unit tests pass; embedder tests unchanged (the 12 known Mac golden failures); layer mode; tag, C API, globals and exports checks; every target's patches; wasm32 build.

If you run CI on this branch, let it finish before merging: merging deletes the branch, and build jobs that start afterwards fail at checkout. Merge with a merge commit, not squash.

tsepez and others added 30 commits November 3, 2026 10:33
Add a test verifying that re-entrant calculate script execution
preserves the outer script's node array. Ensure dependencies referenced
after nested calculations trigger recalculations upon modification.

Follow-up to https://pdfium-review.googlesource.com/c/162130

Change-Id: I1d557383957c023a9acb3347e807a0dd05f7c98c
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/162150
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
https://chromium.googlesource.com/chromium/src/third_party/freetype2.git/+log/891f904e2e7b..25167984d243

Created with:
  roll-dep third_party/freetype/src

Change-Id: I1ddea28e185ddae8c8479147d10f38212810765b
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/163070
Reviewed-by: Andy Phan <andyphan@chromium.org>
Commit-Queue: Andy Phan <andyphan@chromium.org>
Auto-Submit: Lei Zhang <thestig@chromium.org>
https://chromium.googlesource.com/external/github.com/llvm/llvm-project/libunwind.git/+log/eb1ca4993b53..9e44ea2ff4f5

Created with:
  roll-dep third_party/libunwind/src

Change-Id: Ib857b3344d0a4bbae2ff6a83c6d9924164345075
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/163031
Reviewed-by: Andy Phan <andyphan@chromium.org>
Auto-Submit: Lei Zhang <thestig@chromium.org>
Commit-Queue: Andy Phan <andyphan@chromium.org>
https://chromium.googlesource.com/external/github.com/llvm/llvm-project/libcxxabi.git/+log/09351f6ec00c..ce814c994055

Created with:
  roll-dep third_party/libc++abi/src

Change-Id: I724c592d91baf287ceeb23f360a939387cad820e
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/163050
Reviewed-by: Andy Phan <andyphan@chromium.org>
Commit-Queue: Andy Phan <andyphan@chromium.org>
Auto-Submit: Lei Zhang <thestig@chromium.org>
Replace stack-local raw pointer collections and vectors of Persistent
handles with GCed container wrappers (`GCedVector`, `GCedMap`,
`GCedSet`) rooted via single `cppgc::Persistent<>` handles on the
stack. Potentially avoids issues similiar to crbug.com/574304407.

- In CopyContainer_SubformSet(): replace `subformArray`,
  `subformMapArray`, `nodeArray`, and `rgItemUnmatchList`
- In CXFA_FFDocView::RunSubformIndexChange(): replace `seen`.
- In CXFA_Node::ExecuteScript() and CFXJSE_Engine: replace the
  vector of individual Persistent handles with `GCedVector<CXFA_Node>`.

Change-Id: I9a63cea03b22751e66533a1fa67c53162296f42a
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/162050
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
To make the new version of GN work, import
//build/strict_deps_failures.gni to allow for
check_includes_strict_exceptions.

Change-Id: I6023faf2684da872062d5bd5bfa15036a7fa3d0e
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/163092
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Introduce unit tests for leaf-node codecs in core/fxcodec:

- Add FaxModuleTest covering FaxModule::CreateDecoder boundary checks,
  Group 3 1-D decoding, BlackIs1 inverted buffers, Group 4 decoding,
  and FaxModule::FaxG4Decode.
- Add IccTransformTest covering component validation, invalid profile
  handling, sRGB and Gray transforms, TranslateScanline, and Lab
  profile creation.
- Add FlateModule.LZWDecode testing LZW stream decoding via
  FlateModule::FlateOrLZWDecode.
- Add RLELeftoverCharacter and RLEScanlineDecoder testing trailing
  single-character run handling and scanline decoding offsets in
  BasicModule.

AI-generated tests based upon analysis of x20 coverage data.

Change-Id: I67320f04b397cb1ed907d8250c6dc238a957dd98
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/163090
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Andy Phan <andyphan@chromium.org>
Change-Id: I5bd21a1e8506d412ce112b5530b1fcfa439550ab
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/163093
Commit-Queue: Andy Phan <andyphan@chromium.org>
Auto-Submit: Lei Zhang <thestig@chromium.org>
Reviewed-by: Andy Phan <andyphan@chromium.org>
Hold individual cppgc::Persistent<CXFA_Event> elements inside a standard
vector. This avoids GC-heap allocations while still rooting each
event across script execution in CXFA_Node::ProcessEvent().

Also rename GetEventByActivity() to GetEventsByActivity() to reflect
returning a collection, and skip any events detached from the node
during iteration.

Fixed: 575091549
Change-Id: Ia42d22b237f497bd50da3aaad516c8e783346d64
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/163151
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
Add an extra no-op branch, like in Chromium's skia/BUILD.gn.

Change-Id: I73b2031367328667efce0c65816d82040b15f913
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/163190
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Define the FxDataPartitionType concept to de-duplicate type
requirements across FxPartitionAllocAllocator, FxAllocAllocator,
DataVector, and FixedSizeDataVector.

Change-Id: I1b8474838a47d9643614622f9b3e49ebf9d91ee1
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/163230
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Traverse CPDF_Document::GetRoot() in addition to the trailer in
ObjectTreeTraverser. The document root catalog can diverge from the
trailer's /Root entry (such as after cross-reference rebuilds), which
could otherwise cause objects reachable only from the catalog to be
missed.

Fixed: 581323820
Change-Id: Ic8f8292b61ba7c98ca82a5543e6e3b28b6d15e36
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/163094
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Andy Phan <andyphan@chromium.org>
CJS_Runtime::~CJS_Runtime() guards against the runtime being destroyed
while a blocking call-out (app.alert(), app.response(), ...) is still on
the stack with CHECK(!IsBlocking()).

Nested blocking call-outs (for example, /AA /WC WillClose JavaScript
executed during teardown that calls app.beep()) previously caused the
inner EndBlock() call to reset the blocking state, allowing the runtime
to be destroyed prematurely and leading to use-after-free conditions.

Replace BeginBlock() and EndBlock() with a CJS_Runtime::BlockingScope
class backed by AutoRestorer<bool>. This restores the prior blocking
state upon leaving each scope, ensuring outer blocking states remain
active until the outermost call completes.

Fixed: 581296829
Change-Id: If91c82a4cedba263bdf77d6fa6ce6c3e07324c5e
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/163150
Reviewed-by: Andy Phan <andyphan@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Allow types to opt into FxDataPartitionType by declaring an in-class
static constexpr bool IsDataPartitionSafe. This is easier to use with
class templates.

-- Opt in template FX_LAB_STRUCT<T> for arithmetic types T.

Change-Id: I50652e55abce24694e7ce0ddad3be757834c5f06
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/163250
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
Migrate all internal structs to the kIsDataPartitionSafe mechanism.
Rename to macro to FX_EXTERNAL_DATA_PARTITION_SAFE to provide an escape
hatch for third-party types.

-- Test with an incomplete forward-declared type.

Change-Id: Ida14b7a8940c8afd6503d1acbfaf61985fa90901
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/163251
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
This CL fixes a build error of pdfium on riscv64.

Use Rebind<uint8_t, D32> so the store descriptor matches the
fractional-LMUL vector returned by U8FromU32 on RVV.

Bug: 559426535
Change-Id: I6b067bc8d56b4212ed8291d49f9ce2fb0a8a73c9
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/161950
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
Reviewed-by: Andy Phan <andyphan@chromium.org>
AlertIfPossible() calls the embedder's JS_appAlert() without entering
a blocking scope. In Chrome, the alert forces a style and layout update
which can destroy the PDF plug-in and CJS_Runtime. Because blocking_ was
not set, the CHECK(!IsBlocking()) guard in ~CJS_Runtime() did not fire,
allowing the runtime to be freed while script frames remain.

Fixed: 580846556
Change-Id: I974fa5124419fd6a702c26caf22b1c6dbd298d36
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/163095
Reviewed-by: Andy Phan <andyphan@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Add FixedSizeDataVector::release() to transfer ownership of the
underlying allocation to the caller and reset the vector to be empty.
Use FixedSizeDataVector<uint8_t> in CreateSkiaImageFrom24BppDib() and
CreateSkiaImageFromTransformedDib() instead of manually allocating raw
buffers with FX_TryAlloc() and constructing an UNSAFE_BUFFERS() span.

Along the way, avoid unnecessary buffer zeroing and buffer size
variables. Also add comments to better explain memory management.

This CL is AI generated.

Change-Id: Iad60969662116270d3e11b987402c6debc5a8a4b
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/163270
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
All callers of CFX_DIBBase::ConvertBuffer() pass 0 for `src_left` and
`src_top`:
- CFX_DIBBase::ConvertTo() and CFX_DIBitmap::ConvertFormat() pass 0
  directly.
- CFX_DIBitmap::TransferWithUnequalFormats() is only called from
  CFX_DIBitmap::TransferBitmap() after CFX_DIBBase::GetOverlapRect(),
  where every caller with unequal formats passes non-positive offsets
  that GetOverlapRect() shifts into `dest_left` and `dest_top`, leaving
  `src_left` and `src_top` at 0.

Check that `src_left` and `src_top` are 0 in
CFX_DIBitmap::TransferBitmap() before calling
TransferWithUnequalFormats(), and remove `src_left` and `src_top` from
TransferWithUnequalFormats(), CFX_DIBBase::ConvertBuffer(), and all
ConvertBuffer_*() helpers. This also fixes
ConvertBuffer_RgbToArgbPremul() and ConvertBuffer_32bppRgbToRgb24()
passing a single-scanline span to multi-row libyuv calls by using
CFX_DIBBase::GetBuffer() directly.

This CL is AI generated.

Change-Id: I468478e73b6010aa630d03cbfc34a635b279b1ee
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/163351
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
CPDFSDK_FormFillEnvironment::JS_appAlert(), JS_appResponse(), and
JS_appBeep() invoke embedder callbacks via IPDF_JSPLATFORM without
setting in_active_ffi_callback_. In Chrome, embedder dialogs (such as
alert, confirm, and prompt) force a style and layout update before
opening. When the plugin element has been detached or hidden, that
update can run synchronously while an XFA script remains.

Fixed: 580848937
Change-Id: Ie95b280942bb21003c4d9f43cbf33d915d04fad8
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/163350
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Change `output` in CreateSkiaImageFromTransformedDib() from
FixedSizeDataVector<uint8_t> to FixedSizeDataVector<Result>. Index into
its span by `column` and advance `output_span` by `width` on each row
instead of incrementing a raw `output_cursor` pointer inside an
UNSAFE_TODO() block. Also remove the redundant `line` variable and
promote the row byte and pitch assertions to CHECKs.

This CL is AI generated.

Change-Id: I90dfd08e55eb69488a928184a6e0d114128c6bc2
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/163290
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
- Check CFX_DIBBase::GetBuffer() directly instead of calling
  CFX_DIBBase::RealizeIfNeeded(). When a DIB is not backed by a
  contiguous buffer, fall back to the scanline loop instead of
  allocating and copying into an intermediate CFX_DIBitmap. This also
  allows reverting `defined(PDF_USE_LIBYUV)` from the RealizeIfNeeded()
  guards.
- Use libyuv::RotatePlane() for 1-byte-per-pixel bitmaps to match
  libyuv::ARGBRotate() and avoid passing a single-scanline span with a
  negative stride to the deprecated libyuv::RotatePlane270() function.

This CL is AI generated.

Change-Id: If83bd73ee0023794ab1f0c3962817ad5918ac116
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/163352
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
Validate that re-parsing a JPEG header upon rewind preserves the
dimensions, component count, downscale denominator, and color order
established during decoder initialization. Rejecting altered headers
prevents desynchronization between libjpeg decompressed rows and the
pre-allocated scanline buffer.

Additionally, verify that libjpeg's reported output width and row byte
requirement do not exceed the scanline buffer allocation, destroying
the decompressor and aborting decode cleanly on failure.

Add unit tests covering dimension, component count, and header
corruption upon decoder rewind.

Fixed: 580846890
Change-Id: I687635a3841d4d4dfa48763c37057cba191afdb8
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/163170
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
- Test CFGAS_Decimal integer conversion, string parsing with whitespace
  and sign prefixes, scale modifications with rounding, negation, float
  and double conversion, multiplication, and division.
- Test FX_DateFromCanonical and FX_TimeFromCanonical parsing and
  validation edge cases.
- Test CFGAS_StringFormatter date, time, and datetime subcategory
  formatting (e.g. short, medium, long, full).
- Test CFGAS_StringFormatter time parsing with meridiem and timezone
  specifiers.
- Test CFGAS_StringFormatter numeric formatting and parsing edge cases
  including negative integer formatting, overflow digit handling, and
  literal string escapes.
- Test null and zero formatting and parsing with quoted literals and
  unquoted strings.
- Test text formatting and parsing character validation.

Change-Id: I0c44a22a582f405c4e8b557c284787b7cb0c7a98
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/163430
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
Add unit tests to improve code coverage across fxge modules:

- cfx_color: Add test coverage for ConvertColorType() covering
  conversions among Transparent, Gray, RGB, CMYK, and out-of-range
  inputs.
- fx_freetype: Add unit tests for FXFT_unicode_from_adobe_name(),
  FXFT_adobe_name_from_unicode(), and FreeTypeVersionSupportsHinting()
  guarded under pdf_enable_freetype.
- cfx_cttnametable: Add unit tests for standalone TrueType name table
  parsing guarded under pdf_enable_xfa.

Change-Id: I563ee66d2ba9973fc53ea695d151515207f4c946
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/163110
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
- Use pow() instead of powf() in CFGAS_Decimal::ToDouble() to avoid
  truncating double precision down to single-precision float mantissa.
  Also remove the C-style cast when scaling 32-bit limbs.

- Fix transposed pattern arguments in
  CFGAS_StringFormatter::ParseDateTime() for DateTimeType::kDateTime,
  where wsTimePattern was passed to ParseLocaleDate() and wsDatePattern
  was passed to ParseLocaleTime().

- Allow ParseLocaleDate() to leave unconsumed characters for subsequent
  time parsing in combined date-time strings, and check that the full
  input string was consumed upon completing ParseDateTime().

- Update test expectations to verify the corrected behaviors.

Change-Id: I89a5265fb9d7e91e9dd3c8a3386b1dc995294ac7
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/163450
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
In production code, division on CFGAS_Decimal is only ever performed
to divide by 10 and 100 in CFGAS_StringFormatter. Replace the arbitrary
division operator with dedicated DivBy10() and DivBy100() methods.

Remove the 1,024-bit binary search multi-limb division helpers and
associated unused array routines from cfgas_decimal.cpp.

Improve CFGAS_Decimal::ToDouble() precision by using static_cast for
the 2^32 factor and double-precision pow(), resolving precision
truncation on fractional values. Update tests accordingly.

AI-generated patch.

Change-Id: I0f805fc4efafeb962ddeae7a16db9a919e1eae9e
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/163431
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
CreateTransformSRGB() previously configured srcFormat for Lab profiles
with BYTES_SH(0) and no FLOAT_SH(1), which caused cmsCreateTransform()
to reject the format.

Configure Lab profiles using TYPE_Lab_FLT (FLOAT_SH(1) and BYTES_SH(4)).

Update Translate() to feed float inputs to cmsDoTransform().

Update TranslateScanline() to handle Lab profiles by decoding 8-bit PDF
Lab samples to float inputs via a new FX_DecodeLab() helper in
core/fxge/dib/fx_dib.h. LittleCMS has no native input format for PDF
8-bit Lab encoding (TYPE_LabV2_8 expects legacy ICC v2 integer encoding,
which distorts neutral gray and scales L*=100 to 100.392).

Deduplicate this decode logic with CPDF_LabCS::TranslateImageLine().

Enforce input buffer sizes and component bounds using CHECK_GE() in both
Translate() and TranslateScanline(), and verify transform format flags
before delegating to cmsDoTransform().

Update IccTransformTest.LabProfile to verify successful transform
creation as well as both float and scanline translation accuracy.

Fixed: 567626895
Change-Id: Ie4aee8b595757ca83aa83e02f43a03c3fcd15b63
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/163091
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
Read nPlatformID and nNameID directly from the 12-byte NameRecord span
rather than incorrectly indexing the base table by header offset twice.
This corrects a bug where nNameID was reading the platform ID, causing
non-Macintosh (e.g. Windows UTF-16) font name records to be skipped.

Also read both fields adjacently before validating nNameID == 1,
tighten length and offset bounds checks, and add unit test coverage for
Windows UTF-16 name table records.

AI-generated patch from coverage data.

Change-Id: I448f4a761a454191b2dfbbf9439acc1051d1e6b5
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/163111
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Add unit tests in core/fxcodec:
- Add tests in progressive_decoder_unittest.cpp covering TIFF
  progressive decoding, verifying invalid data error handling and
  uncompressed 2x2 grayscale TIFF frame info and bitmap decoding.
- Add tests in jpx_unittest.cpp covering YUV422 to RGB and YUV444 to RGB
  conversions in CJPX_Decoder.
- Add tests in jpx_unittest.cpp for ColorSyccToRGB covering grayscale
  fallback on fewer than 3 components and SRGB conversion.

Change-Id: I13ce51bb6211447b6513f1567d9c921371714f57
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/163130
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Andy Phan <andyphan@chromium.org>
Andy Phan and others added 5 commits November 6, 2026 10:26
Add FXUnicodeTest.GetMirrorCharSupplementary to test
pdfium::unicode::GetMirrorChar() with code points above U+FFFF.

Bug: 555940408
Change-Id: I94a90de2875b0d1310581082f9b4dbcc38a0afc9
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/163471
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Andy Phan <andyphan@chromium.org>
`kTextLayoutCodeProperties` only covers BMP code points (U+0000 to
U+FFFF). For supplementary-plane characters (above U+FFFF),
GetUnicodeProperties() fell back to returning 0, which GetMirrorChar()
treated as mirror index 0 (`')'`) instead of no mirror.

Have GetUnicodeProperties() return `std::optional<uint16_t>` so
GetMirrorChar() returns `wch` unchanged and GetBidiClass() returns
`BidiClass::kON` when a code point is out of range.

Bug: 555940408
Change-Id: I5e80dd9ddda78ac45dc366f5cf07771affadab41
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/163472
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Andy Phan <andyphan@chromium.org>
- fx_codepage: Add fx_codepage_unittest.cpp covering charset and
  codepage lookups, CJK character set checks, charset flags, and
  conversion functions.

- cfx_memorystream: Add tests for IsEOF(), GetPosition(), Flush(),
  and boundary conditions in ReadBlockAtOffset().

- cfx_datetime: Add tests for FX_IsLeapYear(), FX_DaysInMonth(),
  GetDayOfWeek() across common and BCE dates, and accessors.

- cfx_fileaccess_stream: Add cfx_fileaccess_stream_unittest.cpp

Change-Id: Id78224f1d9064aa6e601d7e7ec4b2852402dabfe
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/163510
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Andy Phan <andyphan@chromium.org>
Test FPDF_AddInstalledFont in FPDFVersion1Versus2ComparisonTest by
registering custom fonts (localized multi-byte names), during EnumFonts
execution. Verify that PDFium queries the localized font name via
GetFont and that page rendering succeeds.

Change-Id: I92460806f3090837f73aced9bd0007f6e65d2c8b
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/163451
Reviewed-by: Andy Phan <andyphan@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Release-gate sync: 34 upstream commits, 2b52a82 to 6688c57 (upstream's
tip, more than a day old). Report: docs/embedpdf/syncs/2026-11-08-6688c576f.md.

- The object-tree traversal also starts from the catalog; our resolve
  mode stays, and our callers are unaffected.
- Upstream fixes: JPEG rewinds against altered headers, Windows font
  name records, Lab ICC profiles, mirrored supplementary-plane
  characters.
- FreeType, libc++abi, libunwind, gn and siso rolls; all our patches
  still apply.
- Two test files keep both sides' new tests.
- Record the signature tests' current layer-mode object counts.
@bobsingor
bobsingor merged commit aa59ce5 into embedpdf/main Nov 8, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants