Upgrade to Apache PdfBox 2.0.37 and Build modernization - #591
Draft
sandeepkrs wants to merge 2 commits into
Draft
sandeepkrs wants to merge 2 commits into
sandeepkrs wants to merge 2 commits into
Conversation
* docs: add PDFBox 2.0.27 -> 2.0.37 upgrade plan
Co-Authored-By: Claude <noreply@anthropic.com>
* Vendor jp2-android AAR to restore the build
The com.gemalto.jp2:jp2-android:1.0.3 artifact is no longer resolvable:
JCenter redirects to Maven Central where the artifact does not exist.
Vendor the AAR (BSD-2-Clause, (c) 2018 Gemalto s.r.o., unmodified) into
library/libs/ and sample/libs/ and switch both modules to file
dependencies. README updated with attribution and new usage.
Also drop -XX:MaxPermSize from org.gradle.jvmargs: JDK 17 refuses to
start the daemon with it (JDK 11 only warned).
Verified: ./gradlew build test on JDK 17.
BASELINE-0 (pre-existing unit failures on untouched code): 20 tests in
pdmodel.interactive.form fail because the test JVM cannot download
remote fixtures behind TLS-intercepting AV; environmental, unrelated to
this change.
Co-Authored-By: Claude <noreply@anthropic.com>
* Bump BouncyCastle jdk15to18 1.73 -> 1.85 family; raise library language level to 1.8
bcprov 1.85.2, bcpkix 1.85, bcutil 1.85.1 (per-artifact latest of the
same 1.85 release family; BC only publishes patch revisions for jars
that changed). compileOptions 1_7 -> 1_8 to match the sample module and
modern dependency bytecode.
Gate: build test -> 497 tests, failure set byte-identical to BASELINE-0
(20 known environmental TLS-fixture failures). Recorded as BASELINE-1.
Co-Authored-By: Claude <noreply@anthropic.com>
* Update fontbox Unicode Scripts.txt to 15.1.0 (upstream 2.0.37)
Upstream upgraded the script data from Unicode 10.0.0 (2017) to
15.1.0 (2023): ~440 changed mapping lines, 2693 -> 3033 lines.
Byte-copied from the 2.0.37 source distribution.
Gate: unit tests, failure set identical to BASELINE-1.
Co-Authored-By: Claude <noreply@anthropic.com>
* Upgrade PDFBox API to 2.0.37 (1/10): fontbox — sync 41 changed files, add CMapStrings
Merge upstream fontbox changes from Apache PDFBox 2.0.27 to 2.0.37:
- cmap: new CMapStrings string table (byte-dedup for 1-2 byte codes,
PDFBOX-5850); CMap.addCharMapping uses it; CMapParser.createStringFromBytes
delegates to it; LiteralName dict-key comparison fix; increment() guard
against negative position (PDFBOX-4661 follow-up)
- cff: CFFParser PDFBOX-5843 (defer "Private" entry validation for
CIDFonts, tolerate empty entries); Type1CharString method renames
(setCurrentPoint/callOtherSubr) + PDFBOX-5339 accent path caching
- ttf: GlyphTable/GlyfCompositeDescript recursion level guard for
self-referencing composite glyphs; unmodifiable getComponents() view;
TTFParser/GlyphData/TTFSubsetter etc. accumulated fixes; GlyphRenderer
trace-level guards
- autodetect: WindowsFontDirFinder drops cmd.exe exec in favor of
System.getenv (irrelevant on Android but kept in sync)
- Android deltas preserved: PDFBoxResourceLoader cmap/Scripts.txt loading
(CMapParser, OpenTypeScript), Path.op union in seac, inner Point class
and Path.close in GlyphRenderer, dropped CentOS X11 dir
Unit tests: failure set identical to baseline (20 known environmental
TLS failures; 497 tests, 446 pass, 31 skipped).
Co-Authored-By: Claude <noreply@anthropic.com>
* Upgrade PDFBox API to 2.0.37 (2/10): cos/io/parser/writer — sync 29 files, add StringUtil
Merge upstream cos, io, pdfparser, pdfwriter and util changes from
Apache PDFBox 2.0.27 to 2.0.37:
- cos: COSName reworked to byte-based identity (PDF 32000-1 §7.3.5:
names are byte sequences, not UTF-8 strings; ByteBuffer-keyed
canonical maps, getPDFName(byte[]) factory); COSString hex parsing
via Hex.getHexValue with FORCE_PARSING leniency; COSDictionary
null-safety in getKeyForValue and toString recursion guards; all 22
new COSName constants taken (556 total, matches upstream)
- pdfparser: BaseParser recursion depth guard (max 500, PDFBOX-5788),
lenient missing dictionary close, skipLinebreak refactor,
checkForEndOfString LF variants, decodeBuffer with Windows-1252
alternative charset, PDFBOX-5025 "NNNendobj" number catch;
COSParser validateStreamLength rewrite (zero/negative length,
PDFBOX-5954/5880), xref parsing via new StringUtil.splitOnSpace,
object-stream ArrayList without attacker-controlled capacity;
PDFStreamParser close(), nested inline image rejection (PDFBOX-6038),
isolated '+' handling (PDFBOX-5906), ReDoS-safe number pattern
- pdfwriter: COSWriter incremental-update xref/size handling,
detectPossibleSignature (PDFBOX-5521), SHA-256 document ID instead
of MD5
- util: new StringUtil (splitOnSpace); Hex.getHexValue fast path;
Matrix javadoc; FileTypeDetector/SmallMap/IterativeMergeSort sync
- io: ScratchFile/ScratchFileBuffer sync
Forward-ported from multipdf (lands fully in batch 9): the upstream
"Tx".equals() fix in PDFMergerUtility.mergeFields — the old ==
identity comparison silently skipped field joining now that COSName
names are byte-decoded strings (also fixes upstream's duplicated
destField operand).
Android deltas preserved: PDFBoxResourceLoader absent (loader sites
live in pdmodel/font, merged later), port IOUtils.closeAndLogException
3-arg signature, e.getMessage() in exception logging.
Unit tests: failure set identical to baseline (20 known environmental
TLS failures; 497 tests, 446 pass, 31 skipped).
Co-Authored-By: Claude <noreply@anthropic.com>
* Upgrade PDFBox API to 2.0.37 (3/10): pdmodel core — root, common, fixup
Merge upstream 2.0.27→2.0.37 changes into pdmodel root/common/fixup
(32 files) plus graphics/state closure pair pulled in by the compile
rule (PDSoftMask, PDExtendedGraphicsState).
Port deltas preserved:
- PDDocument: Android static-init block (kept, upstream's
WritableRaster/UnsatisfiedLinkError voodoo dropped), 3-arg
IOUtils.closeAndLogException, Log.x(tag, msg, e) exception logging
- PDAbstractContentStream / PDPageContentStream / PDAppearanceContentStream:
AWTColor signatures; dropped colorspaces (Pattern/Separation/DeviceN)
stay commented with // TODO: PdfBox-Android; Path.FillType
winding rules (fill + deprecated clipPath)
- PDResources: cache condition keeps PDPattern exclusion comment
- PDRectangle: PointF-based path construction + path.close()
- PDExtendedGraphicsState: Paint.Cap/Paint.Join getters
Upstream taken: addSignature restructure + subsetDesignatedFonts() in
all save paths (PDDocument), beginMarkedContent + MCID simplified
notation, PDResources directFontCache + 3-arg ctor wiring
(ResourceCache through PDExtendedGraphicsState/PDSoftMask), TABLOID
page size + huge-value clamping (PDRectangle), getCOSArray/getCOSName
patterns, PDFBOX-5890/6214-era fixes.
Gates: compile green; unit tests 497/446 pass, failure set identical
to BASELINE-1 (20 environmental TLS failures); eol audit clean.
Co-Authored-By: Claude <noreply@anthropic.com>
* Upgrade PDFBox API to 2.0.37 (4/10): documentinterchange, encryption, fdf
Merge upstream 2.0.27→2.0.37 changes into pdmodel documentinterchange
(12 files), encryption (9), fdf (18); 39 files total.
Port deltas preserved:
- SecurityProvider: remove Android-provided BouncyCastle provider before
registering our own (invariant); upstream's reflection-free direct
construction taken, try/catch chain dropped with it
- FDFAnnotation + Circle/Line/Polygon/Polyline/Square: AWTColor in place
of java.awt.Color for color/interiorColor APIs; upstream's new shared
getColor(COSName) helper typed as AWTColor
- PDStructureTreeRoot / StandardSecurityHandler: "Log instance."
javadoc removed, Log.e tag/msg/throwable form
Upstream taken: PDStructureTreeRoot getClassMap/setClassMap (ClassMap
support, PDFBOX-4695-era), parent-tree javadoc; StandardSecurityHandler
RANDOM static SecureRandom + encryptionVersion local caching +
determineEncryptionKey restructure; SaslPrep, PDEncryption,
SecurityHandlerFactory/PublicKeySecurityHandler fixes; FDFDictionary /
FDFField / FDFDocument updates.
Gates: compile green; unit tests 497/446 pass, failure set identical
to BASELINE-1 (20 environmental TLS failures); eol audit clean.
Co-Authored-By: Claude <noreply@anthropic.com>
* Upgrade PDFBox API to 2.0.37 (5/10): pdmodel/graphics — color, image, shading, state
Merge upstream 2.0.27→2.0.37 changes into pdmodel/graphics (24 files)
plus filter/DecodeResult closure (JPXSMask carrier for the new lazy
JPX init). 19 files auto-merged (tx37), 22 manual merges; 14
upstream-changed files that were dropped in this port (8 color spaces,
PNGConverter, 5 shading contexts/paints) stay dropped.
Port deltas preserved:
- PDColorSpace: DeviceRGB fallbacks with Log.e for dropped spaces
(Pattern/CalGray/CalRGB/DeviceN/Indexed/Separation/Lab); Bitmap-based
abstract toRGBImage; toRawImage/toRGBImageAWT stay commented
- PDICCBased: no ICC_Profile/awt — upstream cache restructure grafted
into 3-space-indented port body
- PDJPXColorSpace: android.graphics.ColorSpace with SDK>O guard; new
upstream toRGB implemented via Color.valueOf/convert (API 26+)
- PDImageXObject: BitmapFactory rewrite kept; applyMask/scaleImage
Bitmap mechanics kept. Upstream's PDFBOX-5375 ctor skip-decode
replaced by upstream's final lazy initJPXValues() design (better:
enables PDFBOX-5657 SMaskInData via DecodeResult.getJPXSMask)
- SampledImageReader: fromAny/applyColorKeyMask stay dropped; upstream
wrapped-stream close fix applied to getStencilImage
- PDGraphicsState: Region/GraphicsUtil mechanics kept; upstream
clippingCache→single-slot clippingPathCache restructure + textMatrix/
textLineMatrix fields/accessors taken; Paint.Cap/Join getters kept
- Shading: toPaint stays commented (TODO: PdfBox-Android); PointF/RectF
bodies kept; upstream stream-close/abort-on-bad-flag/vertex-locals/
readVertex-validation fixes grafted
Upstream taken: getCOSArray casts throughout shading, PDShadingType4
abort on broken stream/bad flag, PDShadingType5 lattice vertex locals +
list capacity, ShadedTriangle calcColor restructure, PDOutputIntent
getCOSStream + javadoc, CCITTFactory TIFF FillOrder=2 support
(fliptable) + bos capacity.
Gates: compile green; unit tests 497/446 pass, failure set identical
to BASELINE-1 (20 environmental TLS failures); eol audit clean.
Co-Authored-By: Claude <noreply@anthropic.com>
* Upgrade PDFBox API to 2.0.37 (6/10): pdmodel/font — sync 19 files
Auto-synced (11): PDCIDFont, PDCIDFontType2, PDCIDFontType2Embedder,
PDFont, PDFontDescriptor, PDTrueTypeFont, PDTrueTypeFontEmbedder,
PDType1FontEmbedder, PDType3CharProc, DictionaryEncoding,
MacOSRomanEncoding.
Manual merges (8):
- FileSystemFontProvider: re-apply FontLoadLevel gating (NONE/MINIMUM
loads only DroidSans variants; FULL loads all) into the upstream
2.0.37 ctor restructure.
- FontMapperImpl: re-apply the 12 Android substitute mappings and the
PDFBoxResourceLoader-based fontdir.properties loading.
- PDSimpleFont/PDType0Font: keep noUnicode guard (buildging
'.notdef'-safe widths) around the upstream null-uni handling.
- PDType3Font, PDType1CFont: upstream sync; port Type1CharString
returns RectF so getBounds().height() replaces getHeight().
- TrueTypeEmbedder: take upstream TABLES constant, LinkedHashSet
subset order, Charsets.US_ASCII ttcf check, os2 local, force-
invisible ZWSP/WJ removal, getSubsetCodePoints(); keep RectF
computeBounds for cap height / x-height paths.
- GlyphList: take upstream put-then-warn duplicate handling and
merged uniXXXX/uXXXX parser; keep PDFBoxResourceLoader asset
loading fallback.
Gates: compileDebugJavaWithJavac green; testDebugUnitTest 497 tests,
20 failed / 31 skipped - failure set identical to BASELINE-1 (known
Norton PKIX environmental failures); eol audit clean.
Co-Authored-By: Claude <noreply@anthropic.com>
* Upgrade PDFBox API to 2.0.37 (7/10): contentstream — sync 20 files + OCG test
Auto-synced (16, tx37 verbatim — Android deltas were import-order only):
PDCID-style operator classes SetNonStrokingDevice{CMYK,Gray,RGB}Color,
SetStrokingDevice{CMYK,Gray,RGB}Color, SetNonStrokingColorSpace,
SetStrokingColorSpace (new isShouldProcessColorOperators guard),
CurveToReplicateFinalPoint, DrawObject, ShadingFill, BeginInlineImage,
BeginMarkedContentSequenceWithProperties, SetLineWidth,
SetLineMiterLimit, SetFontAndSize.
Manual merges (4):
- PDFStreamEngine: take upstream text-matrix-in-graphics-state rework
(drops engine-level textMatrix/textLineMatrix fields), uncolored
tiling pattern + Type3 d1 color-operator suppression
(PDFBOX-5235/5361 era), soft-mask DeviceGray reset, PDFBOX-6095
zero-size appearance guard, DataFormatException operator
forgiveness; keep port RectF computeBounds mechanics for the
annotation appearance box and tiling pattern bbox.
- SetLineCapStyle/SetLineJoinStyle: new checkArrayTypesClass guard +
port Paint.Cap/Paint.Join enum switches.
- SetColor: upstream PDFBOX-5851 invalid-color fallback; keep port
Pattern-colorspace condition comment-out (PDPattern dropped).
Unit test: TestOptionalContentGroups.testOCGConsumption updated to
upstream PDFBOX-5980 expectations (BDC tag is first operand 'OC';
group name now asserted via PDPropertyList.create on the resolved
property dict instead of the old last-COSName-wins tag).
Gates: compileDebugJavaWithJavac green; testDebugUnitTest 497 tests,
20 failed / 31 skipped - failure set identical to BASELINE-1 (known
Norton PKIX environmental failures); eol audit clean.
Co-Authored-By: Claude <noreply@anthropic.com>
* Upgrade PDFBox API to 2.0.37 (8/10): filter — sync 12 files
Auto-synced (8, tx37 verbatim): ASCIIHexFilter, CCITTFaxDecoderStream,
CCITTFaxEncoderStream, CCITTFaxFilter, CryptFilter, Predictor,
RunLengthDecodeFilter, LZWFilter (delta was only an orphaned
'Log instance.' javadoc remnant).
Manual merges (4):
- Filter: take SYSPROP_CCITTFAX_MAXBYTES DoS cap constant; keep both
javax.imageio reader finders (findImageReader, new findRasterReader)
commented out per port policy (TODO: PdfBox-Android).
- DecodeResult: upstream JPX SMask getter/setter — already carried in
the C7 merge (Bitmap form); no change needed.
- JPXFilter: keep gemalto JP2Decoder reflection guard + Bitmap pixel
loop; add upstream PDFBOX-5657 SMaskInData handling in Android form
(Bitmap.extractAlpha() into DecodeResult.setJPXSMask; opaque image
rebuilt on an RGB_565 canvas before color-space extraction, SDK_INT
> O as before).
- DCTFilter: stays a pure passthrough — all pb37 changes
(findRasterReader, readImageRaster CMYK strategy, CMMException wrap,
YCbCr/YCCK fixes) are javax.imageio-based and not portable; the
commented-out raster helpers remain marked TODO: PdfBox-Android.
Gates: compileDebugJavaWithJavac green; testDebugUnitTest 497 tests,
20 failed / 31 skipped - failure set identical to BASELINE-1 (known
Norton PKIX environmental failures); audit + eol clean.
Co-Authored-By: Claude <noreply@anthropic.com>
* Upgrade PDFBox API to 2.0.37 (9/10): pdmodel/interactive — sync 48 files
Auto-synced (33, tx37 verbatim): action/* (7), digitalsignature/*
(4), documentnavigation/outline/PDOutlineNode + PDOutlineItemIterator,
form/{PDButton, PDChoice, PDComboBox, PDField, PDFieldFactory,
PDNonTerminalField, PDSignatureField, PDTextField, PDTerminalField,
PDVariableText, ScriptingHandler, PDFieldTree}, viewerpreferences/
PDViewerPreferences, annotation/{PDAnnotationPopup, PDAnnotationLine,
PDAnnotationSquareCircle, PDBorderStyleDictionary, PDAnnotationMarkup},
handlers/{AnnotationBorder, PDAbstractAppearanceHandler,
PDAnnotationAdditionalActions(no-op)}, PlainText x2 (import order only).
Manual merges (15):
- PDAcroForm: upstream flatten/rotate rework; keep port RectF
computeBounds appearance-box mechanics.
- AppearanceGeneratorHelper: keep PointF .x/.y + RectF computeBounds
for text-height path measurement.
- PDTextAppearanceHandler: upstream 139-line rework kept; port stub
for addPath retained (Android Path segments not retrievable),
3-arg Log.e exception form.
- Appearance handlers (Caret, FreeText, Highlight, Link, Line,
Polyline, FileAttachment): Log.e(msg, e) -> Log.e(msg, e) 3-arg
port form.
- PDOutlineItem: AWTColor setTextColor signature kept.
Gates: compileDebugJavaWithJavac green; testDebugUnitTest 497 tests,
20 failed / 31 skipped - failure set identical to BASELINE-1; audit +
eol clean.
Co-Authored-By: Claude <noreply@anthropic.com>
* Upgrade PDFBox API to 2.0.37 (10/10): multipdf + text — sync 8 files
Auto-synced (6, tx37 verbatim): Splitter (673 upstream lines: page
info / bookmark-tree merge rework), Overlay, TextPosition,
PDFTextStripperByArea, PDFMarkedContentExtractor + LayerUtility
(import order only).
Post-fixes on auto-applied files: Overlay + LayerUtility replace
upstream's new AffineTransform.quadrantRotate(N) with the port's
rotate() equivalents (harmony AffineTransform lacks quadrantRotate;
rotate(-PI/2)/rotate(-PI)/rotate(-1.5PI) are the same transforms mod
2*PI).
Manual merges (2):
- PDFTextStripper: take upstream 214-line rework (Bidi, article
thread, sort improvements); re-apply PDFBoxResourceLoader block for
BidiMirroring.txt asset loading.
- PDFMergerUtility: take upstream 216-line merge rework incl. the
"Tx".equals(srcField/destField) fix (matches port's old local fix);
keep port 3-arg IOUtils.closeAndLogException signature.
Gates: compileDebugJavaWithJavac green; testDebugUnitTest 497 tests,
20 failed / 31 skipped - failure set identical to BASELINE-1; audit +
eol clean.
Co-Authored-By: Claude <noreply@anthropic.com>
* Upgrade PDFBox API to 2.0.37: rendering — sync 3 files
PageDrawer (24 upstream hunks, grafted onto Android implementation):
- PDFBOX-5782: null colorspace in getColor() renders transparent instead
of throwing NPE (port returns android Color.argb(0,0,0,0) + Log.e)
- PDFBOX-5611: ignore zero-width displacement in drawGlyph2D stretch
- PDFBOX-5653: clamp dash phase to Short.MAX_VALUE after transformWidth
- getDashArray(): drop phase infinite/NaN early-return (superseded by the
phase clamp)
- PDFBOX-5307: image-dictionary Mask/SMask overrides graphics-state soft
mask — drawBitmap() now takes the PDImage and guards the (stubbed)
soft-mask branch so masked images render instead of being dropped
- shouldSkipAnnotation(): destination-aware skip logic (PRINT/unprinted,
VIEW+EXPORT/noView, hidden, invisible unknown, hidden OCG) replacing
the old device-check comment
- PDFBOX-4744: noRotate annotations with transparency groups get their
appearance reconstructed; appearance restored after render
- hasTransparency(PDFormXObject): recursive transparency-group detection
- hasBlendMode(): blendModeMap memoization (COSStream-keyed cache) from
upstream performance fix
- getSubsampling(): private -> protected + upstream javadoc
PDFRenderer: upstream @throws javadoc additions (IllegalStateException /
IndexOutOfBoundsException) — applied to all 10 render overloads
(7 upstream + 3 port Canvas variants).
TTFGlyph2D: PDFBOX-5567 cached-path copy — android.graphics.Path has no
public clone(), use new Path(path) constructor.
Skipped (AWT-only, tied to stubbed port paths): adjustClip thin-line
enlargement, printer/IS_WINDOWS workaround, stencil-pixel handling,
drawBufferedImage quality-prescale workaround, SoftMask.java /
TilingPaint.java (dropped files — pure java.awt Paint/Raster machinery,
stay dropped per port scope).
Gates: compileDebugJavaWithJavac clean; audit greps clean;
testDebugUnitTest 497/20/31 — failure set identical to baseline;
build :library:test same 20 environmental (Norton PKIX) failures;
eol audit clean.
Co-Authored-By: Claude <noreply@anthropic.com>
* Upgrade PDFBox API to 2.0.37: androidTest sync — 11 tests + 7 resources
Syncs upstream's 2.0.27→2.0.37 instrumentation-test changes, adapted to
the port's conventions (asset loads, TestResourceGenerator downloads,
TestRendering comparisons instead of TestPDFToImage):
- ValidateXImage/JPEGFactory/LosslessFactory/PDImageXObject/CCITT:
getOpaqueImage() -> getOpaqueImage(null, 1), explicit stream close
handling, document.close() after doWritePDF, assertArrayEquals on
toByteArray in checkJpegStream. Port keeps PDDeviceRGB expectations
for CMYK/gray JPEGs (Android Bitmap decode) with existing TODO marks.
- TestPublicKeyEncryption: assertEquals JCE-strength form;
testProtectionError drops the leak-prone finally-close dance.
- TestSymmetricKeyEncryption: checkSeveralPerms() fold with
InvalidPasswordException catch; closeQuietly in byte[] helpers;
new testPDFBox5955 (RC4 40/48-bit, downloads) and testPDFBox5639
(AESV3 R=5 excess bytes, downloads).
- PDFontTest: explicit InputStream+close for PDType1Font load; new
PDFBOX5920Type0/PDFBOX5920TrueType space-width tests (assets),
testSymbol round-trip, testPDFBox6172 CID!=GID IllegalStateException
(downloads NotoSansSC otf).
- CombAlignmentTest: setValue("") warm-up per upstream; new
testPDFBOX5784 (resource added).
- PDAcroFormFlattenTest: testFlattenPDFBox4889 replaced by
flattenTestPDFBOX5254 (fields empty + 72 annotations); new
flattenTestPDFBOX5225 (orphan widget, 76 fields / 59 annotations).
- PDFMergerUtilityTest: checkWithNumberTree 2025 expansion (MCID
coverage), checkElement 3-arg rework (/P back-reference, OBJR/MCR
/Pg guard, /Link subtype), checkParentTreeAgainstK-adjacent caller
updates, ElementCounter PDFBOX-6009 K-array branch,
testFileDeletion InputStream coverage; 11 new split/merge tests
(PDFBOX-5762/5792/5809/5811/5840/5929/6009/6018/5939) — 6 new
resource PDFs vendored from upstream test resources.
testPDFBox515 left as commented stub (sources ship as a zip maven
unpacks; TestResourceGenerator cannot unpack archives).
testFillOrder2 (CCITT) left as commented stub (downloads TIFF +
javax.imageio reference decode).
Gates: compileDebugAndroidTestJavaWithJac clean; unit test set
unchanged (497/20/31, same 20 environmental failures); eol audit clean.
Co-Authored-By: Claude <noreply@anthropic.com>
* Upgrade PDFBox API to 2.0.37: release metadata
- gradle.properties: VERSION_NAME 2.0.27.1-SNAPSHOT -> 2.0.37.0-SNAPSHOT
- README: dependency coordinate 2.0.27.0 -> 2.0.37.0; "Currently based
on PDFBox v2.0.27" -> v2.0.37
Final gate: clean build; :library:test 497 tests / 20 failed / 31
skipped — failure set identical to pre-upgrade baseline (all 20 are
Norton PKIX environmental failures, unrelated to the merge);
:sample:assembleDebug produces sample-debug.apk; audit suite clean
(zero org.apache.pdfbox/fontbox refs, zero commons-logging, zero LOG.
calls, 70 port TODO markers, eol audit clean). 17 commits on
upgrade/pdfbox-2.0.37.
Co-Authored-By: Claude <noreply@anthropic.com>
* Bug fixes
---------
Co-authored-by: Claude <noreply@anthropic.com>
* Modernize build system * update sample app release signing config
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes and Improvements:
Agents used:
Tests: