]> source.dussan.org Git - poi.git/commitdiff
Fix handling missing font libraries to again not throw on some types of exception
authorDominik Stadler <centic@apache.org>
Tue, 30 Jan 2024 21:01:53 +0000 (21:01 +0000)
committerDominik Stadler <centic@apache.org>
Tue, 30 Jan 2024 21:01:53 +0000 (21:01 +0000)
The previous change broke this handling by always re-throwing "Fatal" exceptions.

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

poi/src/main/java/org/apache/poi/ss/util/SheetUtil.java

index 6d7bc7f8e05ee90743345b5fad9d0908ee40793d..cc5abe81b1cf923eb5f1da26e84db5a9bbbf863e 100644 (file)
@@ -353,8 +353,18 @@ public class SheetUtil {
             TextLayout layout = new TextLayout(str.getIterator(), fontRenderContext);
             return layout.getAdvance();
         } catch (Throwable t) {
-            // fatal exceptions will always be rethrown
-            if (!ExceptionUtil.isFatal(t) && ignoreMissingFontSystem) {
+            // ignore exception and return a default char width if
+            // the ignore-feature is enabled and the exception indicates that
+            // the underlying font system is not available
+            if (ignoreMissingFontSystem && (
+                    // the three types of exception usually indicate here that the font
+                    // system is not fully installed, i.e. system libraries missing or
+                    // some JDK classes cannot be loaded
+                    t instanceof UnsatisfiedLinkError ||
+                    t instanceof NoClassDefFoundError ||
+                    t instanceof InternalError  ||
+                    // other fatal exceptions will always be rethrown
+                    !ExceptionUtil.isFatal(t))) {
                 return DEFAULT_CHAR_WIDTH;
             }