aboutsummaryrefslogtreecommitdiffstats
path: root/poi/src/test/java/org
diff options
context:
space:
mode:
authorDominik Stadler <centic@apache.org>2024-07-18 07:09:32 +0000
committerDominik Stadler <centic@apache.org>2024-07-18 07:09:32 +0000
commit0dea4a301c971c42ceaf0ed43cc6a3545026507e (patch)
tree7317833310a67bdf288fac2f901d364dbc600e65 /poi/src/test/java/org
parent0dac5680c31bc7b2014ce6b76cabf91adc39a908 (diff)
downloadpoi-0dea4a301c971c42ceaf0ed43cc6a3545026507e.tar.gz
poi-0dea4a301c971c42ceaf0ed43cc6a3545026507e.zip
Bug 66425: Avoid exceptions found via poi-fuzz
Processing formats uses regular expressions. Very complex formats can recurse very deeply and thus can cause StackOVerflows depending on the used stack-size. In order to handle this a bit more gracefully, we now catch this and report a better exception with details about the parsed format and potential mitigation. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=66137 git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1919342 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'poi/src/test/java/org')
-rw-r--r--poi/src/test/java/org/apache/poi/hssf/extractor/TestExcelExtractor.java12
1 files changed, 12 insertions, 0 deletions
diff --git a/poi/src/test/java/org/apache/poi/hssf/extractor/TestExcelExtractor.java b/poi/src/test/java/org/apache/poi/hssf/extractor/TestExcelExtractor.java
index 495ceb9837..8e27789f97 100644
--- a/poi/src/test/java/org/apache/poi/hssf/extractor/TestExcelExtractor.java
+++ b/poi/src/test/java/org/apache/poi/hssf/extractor/TestExcelExtractor.java
@@ -382,4 +382,16 @@ final class TestExcelExtractor {
assertContains(txt, "Macro2");
}
}
+
+ @Test
+ void testStackOverflowInRegex() throws IOException {
+ try (ExcelExtractor extractor = createExtractor("clusterfuzz-testcase-minimized-POIHSSFFuzzer-4657005060816896.xls")) {
+ extractor.getText();
+ } catch (IllegalStateException e) {
+ // we either get a StackOverflow or a parsing error depending on the stack-size of the current JVM,
+ // so we expect both here
+ assertTrue(e.getMessage().contains("Provided formula is too complex") ||
+ e.getMessage().contains("Did not have a ExtendedFormatRecord"));
+ }
+ }
}