This is an automated email from the ASF dual-hosted git repository. leginee pushed a commit to branch bazel-migration in repository https://gitbox.apache.org/repos/asf/openoffice.git
commit 5f096671ec11074e0e887fac882f3f6d7af46abc Author: Damjan Jovanovic <[email protected]> AuthorDate: Fri Jun 26 20:21:56 2026 +0200 Fix a possible stack overflow caused by infinite recursion when recursively converting Java exception causes which form cycles. Patch by: me Fixes: https://bz.apache.org/ooo/show_bug.cgi?id=128633 (cherry picked from commit 68e3364441a5fc788fd68015de159f98e3e8a22c) --- .../java/sdbc_jdbc/src/com/sun/star/comp/sdbc/Tools.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/main/connectivity/java/sdbc_jdbc/src/com/sun/star/comp/sdbc/Tools.java b/main/connectivity/java/sdbc_jdbc/src/com/sun/star/comp/sdbc/Tools.java index f17eaef6dd..49cb07cb0f 100644 --- a/main/connectivity/java/sdbc_jdbc/src/com/sun/star/comp/sdbc/Tools.java +++ b/main/connectivity/java/sdbc_jdbc/src/com/sun/star/comp/sdbc/Tools.java @@ -32,7 +32,13 @@ import com.sun.star.uno.Any; import com.sun.star.uno.AnyConverter; public class Tools { + private static final int MAX_EXCEPTION_NESTING = 8; + public static SQLException toUnoException(Object source, Throwable throwable) { + return toUnoException(source, throwable, 0); + } + + private static SQLException toUnoException(Object source, Throwable throwable, int nesting) { // FIXME: use SQLException.getNextException() instead of getCause()? // There are up to 3 dimensions of exception chaining of warnings in Java, // getCause(), getNextException(), and getNextWarning(). @@ -40,8 +46,9 @@ public class Tools { // but I am using the widely used and more helpful getCause(). Throwable cause = throwable.getCause(); Object unoCause = Any.VOID; - if (cause != null) { - unoCause = toUnoException(source, throwable); + // Avoid loops and limit recursion to prevent stack overflows: + if (cause != null && cause != throwable && nesting < MAX_EXCEPTION_NESTING) { + unoCause = toUnoException(source, throwable, nesting + 1); } if (throwable instanceof SQLException) { return (SQLException)throwable;
