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 <[email protected]> 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;
