]> source.dussan.org Git - poi.git/commitdiff
Bug 66425: Avoid exceptions found via poi-fuzz
authorDominik Stadler <centic@apache.org>
Sat, 7 Oct 2023 22:12:58 +0000 (22:12 +0000)
committerDominik Stadler <centic@apache.org>
Sat, 7 Oct 2023 22:12:58 +0000 (22:12 +0000)
Fix check after commit fcaac5073716b98cba26c0655f06f20e310fd85e
so that other IndexOutOfBoundsExceptions are still thrown out

Also free resources when throwing an exception in the constructor

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1912799 13f79535-47bb-0310-9956-ffa450edef68

poi-ooxml/src/main/java/org/apache/poi/xssf/streaming/SXSSFSheet.java

index f74e6b0dbbf697f1153acf5503ebaf2b43fc131d..73d05fa187a1a8a981dd49cfe7afcd05496720c7 100644 (file)
@@ -63,8 +63,16 @@ public class SXSSFSheet implements Sheet, OoxmlSheetExtensions {
         setRandomAccessWindowSize(randomAccessWindowSize);
         try {
             _autoSizeColumnTracker = new AutoSizeColumnTracker(this);
-        } catch (UnsatisfiedLinkError | InternalError e) {
-            LOG.atWarn().log("Failed to create AutoSizeColumnTracker, possibly due to fonts not being installed in your OS", e);
+        } catch (UnsatisfiedLinkError | NoClassDefFoundError | InternalError |
+                 // thrown when no fonts are available in the workbook
+                 IndexOutOfBoundsException e) {
+            // only handle special NoClassDefFound
+            if (!e.getMessage().contains("X11FontManager")) {
+                throw e;
+            }
+            LOG.atWarn()
+                    .withThrowable(e)
+                    .log("Failed to create AutoSizeColumnTracker, possibly due to fonts not being installed in your OS");
         }
     }
 
@@ -99,9 +107,21 @@ public class SXSSFSheet implements Sheet, OoxmlSheetExtensions {
         } catch (UnsatisfiedLinkError | NoClassDefFoundError | InternalError |
                  // thrown when no fonts are available in the workbook
                  IndexOutOfBoundsException e) {
+            // only handle special NoClassDefFound
+            if (!e.getMessage().contains("X11FontManager")) {
+                // close temporary resources when throwing exception in the constructor
+                _writer.close();
+
+                throw e;
+            }
             LOG.atWarn()
                     .withThrowable(e)
                     .log("Failed to create AutoSizeColumnTracker, possibly due to fonts not being installed in your OS");
+        } catch (Throwable e) {
+            // close temporary resources when throwing exception in the constructor
+            _writer.close();
+
+            throw e;
         }
     }