This is an automated email from the ASF dual-hosted git repository.
tballison pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tika.git
The following commit(s) were added to refs/heads/main by this push:
new b5b33f6972 prep for 4.2.0-rc1 (#3409)
b5b33f6972 is described below
commit b5b33f6972784f5b800e840f426559266d413300
Author: Tim Allison <[email protected]>
AuthorDate: Fri Oct 23 13:33:34 2026 -0400
prep for 4.2.0-rc1 (#3409)
---
CHANGES.txt | 137 ++++++++++++++++++++++++++++--------------------------------
1 file changed, 63 insertions(+), 74 deletions(-)
diff --git a/CHANGES.txt b/CHANGES.txt
index aa2b149999..f16a7204f8 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,9 +1,9 @@
-Release 4.2.0 - 10/22/2026
+Release 4.2.0 - 10/23/2026
BREAKING CHANGES AND DEPRECATIONS
- * Unpack output is a Frictionless Data Package by default on tika-server
/unpack,
- tika-app -z/-Z and pipes UNPACK; unpack-config.outputFormat=REGULAR
+ * Unpack output is a Frictionless Data Package by default (tika-server
/unpack,
+ tika-app -z/-Z, pipes UNPACK); unpack-config.outputFormat=REGULAR
(--unpack-format=REGULAR) restores the old layout (TIKA-4681). A document
without
attachments is still a package, so /unpack returns 200, not 204;
unpack-config.emptyPackage=SKIP restores the 204 (TIKA-4971).
@@ -17,84 +17,70 @@ Release 4.2.0 - 10/22/2026
* Config is untrusted unless the operator says so. @OperatorOnly properties
(paths,
executables, class names, URLs, credentials, operator-sized limits) are
refused
- wherever a request builds a component; on a class, the request can't
build it at
- all. Java code that sets one through a JsonConfig wraps it in
- JsonConfig.trusted(json), and JsonConfig constructors now need
tika-serialization.
+ wherever a request builds a component, and an @OperatorOnly class can't
be built
+ from a request at all. Java code setting one through a JsonConfig wraps
it in
+ JsonConfig.trusted(json); JsonConfig constructors now need
tika-serialization.
Newly locked: pdf-parser imageGraphicsEngineFactoryClass and
maxMainMemoryBytes,
raw-tiff maxTotalPreviewBytes, VLM completionsPath. The RuntimeConfig
subclasses
are removed (TIKA-4965, TIKA-4974).
- * Per-request limits and timeouts may tighten the operator's but not loosen
them.
- pipes.trustedRequests=true marks requests as the operator's own: no
clamp, and they
- may set @OperatorOnly properties. PipesForkParser sets it; tika-server
and tika-grpc
+ * Per-request limits and timeouts may tighten the operator's, never loosen
them.
+ pipes.trustedRequests=true marks requests as the operator's own (no
clamp, may set
+ @OperatorOnly properties); PipesForkParser sets it, and tika-server and
tika-grpc
refuse to start with it (TIKA-4978, TIKA-4985).
* A duplicate key in configuration JSON is an error, not last-wins. A
request's
- http-fetcher config may set only httpRequestHeaders, and a file-system
emitter's
- runtime config naming basePath fails as an unknown key. forbidden-apis
bans
- JsonConfig.json() outside ConfigDeserializer and PluginJson, and projects
that
- inherit tika-parent inherit the ban (point
json.forbiddenapis.signaturesFile at an
- empty file to opt out). ExtensionConfig no longer implements JsonConfig
(TIKA-4975).
+ http-fetcher config may set only httpRequestHeaders; a file-system
emitter's runtime
+ config naming basePath fails as an unknown key. forbidden-apis bans
JsonConfig.json()
+ outside ConfigDeserializer and PluginJson, also in projects inheriting
tika-parent
+ (point json.forbiddenapis.signaturesFile at an empty file to opt out).
+ ExtensionConfig no longer implements JsonConfig (TIKA-4975).
* Dates: Metadata.getDate() reads zone-less values as UTC, not the JVM's
zone.
Archive-entry and mail-attachment file times move from dcterms:* to
fs:created/fs:modified. DateNormalizingMetadataFilter honors offsets,
normalizes
every value and completes partial dates (2019 -> 2019-01-01T12:00:00Z).
MailDateParser is replaced by TikaDates; MailUtil moved to
tika-parser-mail-module,
- leaving tika-parser-mail-commons a deprecated shim (TIKA-4917).
+ leaving tika-parser-mail-commons a deprecated shim, to be removed in 4.3.0
+ (TIKA-4917).
- * An OCR engine (tesseract-ocr-parser, tess4j-parser) under "parsers",
deprecated in
- 4.1.0, fails config load: configure it under "engines" and name it in
+ * OCR engines (tesseract-ocr-parser, tess4j-parser) under "parsers",
deprecated in
+ 4.1.0, now fail config load: configure them under "engines" and name them
in
"text-recognizers". A VLM parser may stay under "parsers" as a document
parser
(ContentEnricher.parsesDocuments()). openai-embedding-filter,
jina-embedding-filter
and openai-image-embedding-parser, deprecated in 4.1.0, are removed; use
an engine
and an inference binding (TIKA-4985).
* text-recognizers: an inline entry must have exactly one key, setting both
- _min-width and min-width is an error, and gated entries load as
GatedEnricher,
- not SizeGatedEnricher (TIKA-4972).
-
- * tika-server adds transfer limits: maxRequestReadMillis (408) and
- maxResponseWriteMillis, both 5 min; idleTimeoutMillis (120s, was CXF's
fixed
- 200s); and maxInFlightRequestBytes (429). Raise the deadlines for very
large or very slow
- transfers; cut-offs are logged at INFO by the TransferLimitLog logger
(TIKA-4991).
-
- * tika-server accepts cleartext HTTP/2 (h2c) only when allowHttp2 is set;
it had
- been on by default since 4.0.0 (TIKA-4991).
-
- * tika-server: a tlsConfig block turns TLS on; "active" is deprecated (true
ignored
- with a warning, false refused, rejected in 4.3.0). A keystore without
"active" used
- to serve plain HTTP. TikaServerConfig.getTlsConfig() is null when there
is no
- tlsConfig block (TIKA-4994).
-
- * tika-server no longer sets TLS protocol or cipher suite policy; the JVM
does
- (-Djdk.tls.server.protocols, -Djdk.tls.server.cipherSuites,
jdk.tls.disabledAlgorithms).
- tlsConfig includedProtocols, excludedProtocols, includedCipherSuites and
- excludedCipherSuites are removed and refused at startup: through 4.1
includedProtocols
- did not stop other versions being offered, excludedCipherSuites on its
own disabled
- every suite, and includedCipherSuites could be replaced by the JVM
defaults.
- clientAuthenticationWanted is removed (true refused, false ignored with a
warning):
- tika-server never reads client certificates; use
clientAuthenticationRequired
+ _min-width and min-width is an error, and gated entries load as
GatedEnricher, not
+ SizeGatedEnricher (TIKA-4972).
+
+ * tika-server transfer limits: maxRequestReadMillis (408) and
maxResponseWriteMillis,
+ both 5 min; idleTimeoutMillis 120s (was CXF's fixed 200s);
maxInFlightRequestBytes
+ (429). Raise the deadlines for very large or slow transfers; cut-offs are
logged at
+ INFO by the TransferLimitLog logger. Cleartext HTTP/2 (h2c), on by
default since
+ 4.0.0, now needs allowHttp2 (TIKA-4991).
+
+ * tika-server TLS: a tlsConfig block turns TLS on; "active" is deprecated
(true
+ ignored with a warning, false refused, removed in 4.3.0), and
+ TikaServerConfig.getTlsConfig() is null without a block. Protocol and
cipher suite
+ policy is the JVM's (jdk.tls.server.protocols,
jdk.tls.server.cipherSuites,
+ jdk.tls.disabledAlgorithms): includedProtocols, excludedProtocols,
+ includedCipherSuites and excludedCipherSuites, none of which worked as
documented,
+ are refused at startup. clientAuthenticationWanted is removed (true
refused, false
+ ignored with a warning), as tika-server never reads client certificates
(TIKA-4994).
- * tika-server 2-way TLS accepts client certificates issued by a CA in the
truststore.
- Since 2.4.0 it checked their revocation without enabling CRL fetching, so
it rejected
- every one; only certificates placed directly in the truststore worked.
The check now
- reads the certificate's CRL distribution point or OCSP responder and
fails closed;
- new tlsConfig checkRevocation (default true) turns it off. Rejected client
- certificates are logged at INFO with the reason (TIKA-4994).
-
* embedded-limits maxDepth defaults to 20 (was unlimited) and replaces
output-limits
- maxPackageEntryDepth (#3319). To be removed in 4.3.0:
maxPackageEntryDepth and its
- accessors on OutputLimits and SecureContentHandler, and
tika-parser-mail-commons
- (TIKA-4917).
+ maxPackageEntryDepth, which is to be removed in 4.3.0 with its accessors
on
+ OutputLimits and SecureContentHandler (#3319).
* Pipes plugins load only from the zips in plugin-roots; a plugin on the
classpath
needs -Dtika.plugins.classpath=true, which PipesForkParser sets when it
finds no
plugins directory holding tika-pipes-file-system (TIKA-4918, TIKA-4985).
* image/vnd.microsoft.icon moves from ImageParser to the new ICOParser,
which also
- parses cursors (TIKA-4937). Animated cursors (RIFF ACON) are
+ parses cursors (TIKA-4937); animated cursors (RIFF ACON) are
application/x-navi-animation, even when named *.cur (TIKA-4985).
* ISArchiveParser(String location) is removed; pass a file-backed
TikaInputStream
@@ -108,17 +94,17 @@ Release 4.2.0 - 10/22/2026
SECURITY
- * The default zip-bomb ratio (output-limits.zipBombRatio) is 1000, up from
100. The
- ratio is measured across the whole embedded tree against the container's
bytes, so
- nested compression is still caught; at 100, ordinary compressed logs and
text
- tripped it. Set zipBombRatio to 100 to restore the old limit (TIKA-4985).
+ * The default zip-bomb ratio (output-limits.zipBombRatio) is 1000, up from
100. It
+ is measured across the whole embedded tree against the container's bytes,
so nested
+ compression is still caught; at 100, ordinary compressed logs and text
tripped it.
+ Set zipBombRatio to 100 to restore the old limit (TIKA-4985).
- * The Gemini VLM parser sends its API key in x-goog-api-key instead of the
URL,
- which error messages and logs quote (TIKA-4985).
+ * The Gemini VLM parser sends its API key in x-goog-api-key, not in the URL
that
+ error messages and logs quote (TIKA-4985).
- * XML parsers are configured through Apache Commons Secure XML (TIKA-4935),
Tika's
- own entity-expansion limit is retired in favor of the JDK's settings
(TIKA-4940),
- and forbidden-apis rejects building XML parsers outside XMLReaderUtils
(TIKA-4939).
+ * XML parsers are configured through Apache Commons Secure XML (TIKA-4935);
Tika's
+ own entity-expansion limit is retired in favor of the JDK's (TIKA-4940);
and
+ forbidden-apis rejects building XML parsers outside XMLReaderUtils
(TIKA-4939).
New tk:xml-external-reference and -count list the external DTDs and
entities a
document referenced, which Tika never resolves (TIKA-4941). XFA is read
with SAX;
XMLReaderUtils.getXMLInputFactory() is deprecated (TIKA-4938).
@@ -127,10 +113,14 @@ Release 4.2.0 - 10/22/2026
construct classes or fetch URLs: only plain elements and attributes reach
it, and
remote images are not loaded (TIKA-4992).
- SERVER, PIPES AND OPERATIONS
+ * tika-server TLS: a keystore configured without "active": true no longer
serves plain
+ HTTP. 2-way TLS accepts client certificates issued by a CA in the
truststore, which
+ it had rejected since 2.4.0; their revocation is checked through the
certificate's
+ OCSP responder or CRL distribution point and fails closed (tlsConfig
+ checkRevocation=false turns it off). Rejected client certificates are
logged at INFO
+ with the reason (TIKA-4994).
- * tika-server's welcome page lists endpoints inherited from superclasses
(XMP on
- /meta) under their real paths (TIKA-4991).
+ SERVER, PIPES AND OPERATIONS
* The file-system emitter can gzip its output ("compression": "GZIP");
tika-eval reads
.json.gz extracts and measures them uncompressed (TIKA-4989).
@@ -182,8 +172,8 @@ Release 4.2.0 - 10/22/2026
(TIKA-4936).
* BigTIFF is read through metadata-extractor 2.22.0: EXIF and DNG tags from
BigTIFF
- DNGs, and plain BigTIFF no longer fails; little-endian BigTIFF is
detected by content
- (TIKA-4987).
+ DNGs, plain BigTIFF no longer fails, and little-endian BigTIFF is
detected by
+ content (TIKA-4987).
* Previews from Olympus ORF, Panasonic RW2, Epson ERF, Kodak KDC and Leaf
MOS; Epson
ERF is detected by content. A metadata-extractor tag descriptor that
throws skips
@@ -214,10 +204,10 @@ Release 4.2.0 - 10/22/2026
tk:chunks as JSON values rather than strings; new Property.ValueType.JSON
(TIKA-4969).
- * Parsers no longer carry one document's state into the next: IDML page
counts no
- longer accumulate, an ENVI header's multi-line field no longer absorbs
the previous
- field or document (#3406), and an IPTC/ANPA wire no longer inherits the
previous
- wire's agency format and publisher (TIKA-4995).
+ * Parsers no longer carry one document's state into the next, or share it
between
+ concurrent parses: IDML page counts, an ENVI header's multi-line field
(#3406), an
+ IPTC/ANPA wire's agency format and publisher (TIKA-4995), and
ISArchiveParser's
+ ISA-Tab directory and study file name (TIKA-4986).
OTHER CHANGES
@@ -229,10 +219,6 @@ Release 4.2.0 - 10/22/2026
tk:exception:embedded-stream-exception on the container; what was
extracted before
the failure is kept and the rest of the archive is parsed (junrar 8.1.2,
TIKA-4985).
- * ISArchiveParser resolves the ISA-Tab directory on each parse instead of
reading every
- later document's investigation and assay files from the first document's
directory,
- and concurrent parses no longer share the study file name (TIKA-4986).
-
* JSoupParser emits CDATA text again (TIKA-4963).
* OutlookExtractor falls back to the Date: header when a .msg has no MAPI
date
@@ -242,6 +228,9 @@ Release 4.2.0 - 10/22/2026
* GeoGebraParser no longer needs jackson-databind (TIKA-4956).
+ * tika-server's welcome page lists endpoints inherited from superclasses
(XMP on
+ /meta) under their real paths (TIKA-4991).
+
Release 4.1.0 - 9/26/2026