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/07/02 20:53:20 UTC
(tika) branch markdown-nesting-depth-guard created (now d9c4ffc729)
This is an automated email from the ASF dual-hosted git repository.
tballison pushed a change to branch markdown-nesting-depth-guard
in repository https://gitbox.apache.org/repos/asf/tika.git
at d9c4ffc729 follow on updates to new MarkdownParser
This branch includes the following new commits:
new d9c4ffc729 follow on updates to new MarkdownParser
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
(tika) 01/01: follow on updates to new MarkdownParser
Posted by ta...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
tballison pushed a commit to branch markdown-nesting-depth-guard
in repository https://gitbox.apache.org/repos/asf/tika.git
commit d9c4ffc729d8a49c30b7641a91440348a1054686
Author: tallison <ta...@apache.org>
AuthorDate: Thu Jul 2 16:53:06 2026 -0400
follow on updates to new MarkdownParser
---
.../java/org/apache/tika/parser/markdown/MarkdownParser.java | 12 ++++++++++--
.../org/apache/tika/parser/markdown/MarkdownParserTest.java | 8 ++++++++
2 files changed, 18 insertions(+), 2 deletions(-)
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-text-module/src/main/java/org/apache/tika/parser/markdown/MarkdownParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-text-module/src/main/java/org/apache/tika/parser/markdown/MarkdownParser.java
index 1c3266a7b4..2a91c69061 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-text-module/src/main/java/org/apache/tika/parser/markdown/MarkdownParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-text-module/src/main/java/org/apache/tika/parser/markdown/MarkdownParser.java
@@ -97,8 +97,13 @@ public class MarkdownParser extends AbstractEncodingDetectorParser {
private static final List<Extension> EXTENSIONS =
List.of(TablesExtension.create(), StrikethroughExtension.create());
- //immutable and thread-safe
- private static final Parser COMMONMARK = Parser.builder().extensions(EXTENSIONS).build();
+ //immutable and thread-safe.
+ //maxOpenBlockParsers caps block nesting: deeper blocks are parsed as flat paragraph text
+ //rather than nested structure, so a pathologically deep block document still extracts.
+ //Kept below SecureContentHandler's 100-level element-nesting cap so the flattened output
+ //stays under that limit and is emitted rather than rejected as a suspected zip bomb.
+ private static final Parser COMMONMARK =
+ Parser.builder().extensions(EXTENSIONS).maxOpenBlockParsers(64).build();
public MarkdownParser() {
super();
@@ -123,6 +128,9 @@ public class MarkdownParser extends AbstractEncodingDetectorParser {
metadata.set(Metadata.CONTENT_TYPE, new MediaType(MARKDOWN, charset).toString());
metadata.set(Metadata.CONTENT_ENCODING, charset.name());
document = COMMONMARK.parseReader(reader);
+ } catch (StackOverflowError e) {
+ //for reasons
+ throw new TikaException("Markdown is too deeply nested to parse", e);
}
XHTMLContentHandler xhtml = new XHTMLContentHandler(handler, metadata, context);
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-text-module/src/test/java/org/apache/tika/parser/markdown/MarkdownParserTest.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-text-module/src/test/java/org/apache/tika/parser/markdown/MarkdownParserTest.java
index 88bcb14448..dfe8ffd5b8 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-text-module/src/test/java/org/apache/tika/parser/markdown/MarkdownParserTest.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-text-module/src/test/java/org/apache/tika/parser/markdown/MarkdownParserTest.java
@@ -115,6 +115,14 @@ public class MarkdownParserTest extends TikaTest {
metadataList.get(1).get(TikaCoreProperties.EMBEDDED_RESOURCE_TYPE));
}
+ @Test
+ public void testDeeplyNestedBlocksAreFlattenedNotFailed() throws Exception {
+ //maxOpenBlockParsers caps block nesting below SecureContentHandler's 100-level limit,
+ //so a pathologically deep block document extracts (deeper nesting flattened to text)
+ //rather than being rejected as a suspected zip bomb or overflowing the stack.
+ assertContains("deep", parseString("> ".repeat(5000) + "deep\n").xml);
+ }
+
@Test
public void testRoundTripsBackToMarkdown() throws Exception {
String markdown = "# Title\n\nSome **bold** and *italic* and ~~struck~~ `inline`.\n";