You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tika.apache.org by ta...@apache.org on 2026/08/11 12:36:38 UTC
(tika) 05/05: Merge remote-tracking branch 'origin/main' into TIKA-4809-stage-6
This is an automated email from the ASF dual-hosted git repository.
tballison pushed a commit to branch TIKA-4809-stage-6
in repository https://gitbox.apache.org/repos/asf/tika.git
commit 12db675137f3fa43c129a0e26e68966021b2a051
Merge: 26cbb1b346 0b84d33943
Author: tallison <ta...@apache.org>
AuthorDate: Tue Aug 11 07:21:03 2026 -0400
Merge remote-tracking branch 'origin/main' into TIKA-4809-stage-6
.../ROOT/pages/using-tika/server/index.adoc | 22 +--
.../java/org/apache/tika/config/ServiceLoader.java | 9 +-
.../charsoup/CharSoupMetadataFilter.java | 8 +
.../metadatafilter/OpenNLPMetadataFilter.java | 8 +
.../metadatafilter/OptimaizeMetadataFilter.java | 8 +
.../org/apache/tika/parser/mp3/ID3v2Frame.java | 16 +-
.../java/org/apache/tika/parser/mp4/MP4Parser.java | 30 +++-
.../org/apache/tika/parser/mp4/TikaMp4Reader.java | 149 ++++++++++++++++++
.../tika/parser/mp4/TikaMp4SoundHandler.java | 15 +-
.../tika/parser/mp4/boxes/TikaUserDataBox.java | 167 ++++++++++-----------
.../org/apache/tika/parser/video/FLVParser.java | 53 +++++--
.../org/apache/tika/parser/mp3/ID3v2FrameTest.java | 13 ++
.../org/apache/tika/parser/mp3/Mp3ParserTest.java | 22 +++
.../org/apache/tika/parser/mp4/MP4ParserTest.java | 109 ++++++++++++++
.../tika/parser/mp4/boxes/TikaUserDataBoxTest.java | 61 ++++++++
.../apache/tika/parser/video/FLVParserTest.java | 22 +++
.../tika/serialization/ParseContextUtils.java | 10 +-
.../TestParseContextSerialization.java | 16 ++
.../org/apache/tika/server/core/TikaServerCli.java | 4 +-
.../apache/tika/server/core/TikaServerConfig.java | 64 +++-----
.../apache/tika/server/core/TikaServerProcess.java | 115 ++++++++------
.../main/resources/tika-server-config-default.xml | 55 -------
.../configs/cxf-unpack-test-template.json | 10 +-
23 files changed, 704 insertions(+), 282 deletions(-)
diff --cc docs/modules/ROOT/pages/using-tika/server/index.adoc
index fce09b30e5,8d054258f8..0ab7393434
--- a/docs/modules/ROOT/pages/using-tika/server/index.adoc
+++ b/docs/modules/ROOT/pages/using-tika/server/index.adoc
@@@ -311,18 -308,6 +308,10 @@@ Server behavior beyond host/port is con
|`false`
|Include parser stack traces in error responses. Useful in dev, dangerous in production (leaks internals).
+|`maxRequestSizeBytes`
+|`-1` (no limit)
+|Maximum request body in bytes; larger requests are rejected with `413`. Enforced for chunked uploads too, not just those declaring a `Content-Length`. Uploads are spooled to disk, so leaving this unset lets a caller fill the temp directory.
+
- |`digest`
- |`""` (off)
- |Compute a digest of the parsed bytes. Comma-separated algorithm names: `md5`, `sha1`, `sha256`, `sha384`, `sha512`.
-
- |`digestMarkLimit`
- |`20971520` (20 MiB)
- |Max bytes buffered for digest computation.
-
|`logLevel`
|_inherited_
|`debug` or `info` to override the runtime log level.
diff --cc tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/TikaServerConfig.java
index b99f555d44,f17dbaa0e4..f56f5e7c3c
--- a/tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/TikaServerConfig.java
+++ b/tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/TikaServerConfig.java
@@@ -71,8 -69,7 +69,8 @@@ private long forkedProcessShutdownMilli
private boolean allowPerRequestConfig = false;
private String cors = "";
private boolean returnStackTrace = false;
+ private long maxRequestSizeBytes = -1;
- private String idBase = UUID
+ private String id = UUID
.randomUUID()
.toString();
private int port = DEFAULT_PORT;
@@@ -246,41 -240,6 +241,18 @@@
this.configPath = Paths.get(path);
}
- public int getDigestMarkLimit() {
- return digestMarkLimit;
- }
-
- public void setDigestMarkLimit(int digestMarkLimit) {
- this.digestMarkLimit = digestMarkLimit;
- }
-
- /**
- * digest configuration string, e.g. md5 or sha256, alternately w 16 or 32 encoding,
- * e.g. md5:32,sha256:16 would result in two digests per file
- *
- * @return
- */
- public String getDigest() {
- return digest;
- }
-
- public void setDigest(String digest) {
- LOG.info("As of Tika 2.5.0, you can set the digester via the AutoDetectParserConfig in " + "tika-config.xml. We plan to remove this commandline option in 2.8.0");
- this.digest = digest;
- }
-
+ /**
+ * Maximum request body in bytes. Negative (the default) means no limit; tika-server
+ * spools uploads to disk, so an unbounded value lets a caller fill the temp directory.
+ */
+ public long getMaxRequestSizeBytes() {
+ return maxRequestSizeBytes;
+ }
+
+ public void setMaxRequestSizeBytes(long maxRequestSizeBytes) {
+ this.maxRequestSizeBytes = maxRequestSizeBytes;
+ }
+
public boolean isReturnStackTrace() {
return returnStackTrace;
}
diff --cc tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/TikaServerProcess.java
index ab9ff3df14,b5c39f2ad3..f8e655d28f
--- a/tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/TikaServerProcess.java
+++ b/tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/TikaServerProcess.java
@@@ -314,18 -345,13 +345,14 @@@ public class TikaServerProcess
// Add ConfigEndpointSecurityFilter to gate /config endpoints
writers.add(new ConfigEndpointSecurityFilter(tikaServerConfig.isAllowPerRequestConfig()));
+ writers.add(new MaxRequestSizeFilter(tikaServerConfig.getMaxRequestSizeBytes()));
+ // setRequestLogLevel rejects anything but debug/info, so no validation needed here.
TikaLoggingFilter logFilter = null;
- if (!StringUtils.isBlank(tikaServerConfig.getLogLevel())) {
- String logLevel = tikaServerConfig.getLogLevel();
- if (LOG_LEVELS.contains(logLevel)) {
- boolean isInfoLevel = "info".equals(logLevel);
- logFilter = new TikaLoggingFilter(isInfoLevel);
- writers.add(logFilter);
- } else {
- LOG.warn("Unsupported request URI log level: {}", logLevel);
- }
+ String requestLogLevel = tikaServerConfig.getRequestLogLevel();
+ if (!StringUtils.isBlank(requestLogLevel)) {
+ logFilter = new TikaLoggingFilter("info".equals(requestLogLevel));
+ writers.add(logFilter);
}
CrossOriginResourceSharingFilter corsFilter = null;