From 9269a09e9dfad091bb6be5c95879ef86bd1f77cb Mon Sep 17 00:00:00 2001 From: Adam Retter Date: Mon, 9 Mar 2026 23:27:29 +0100 Subject: [PATCH] [bugfix] SQLXML JDBC resources must be free'd after use to prevent a memory/resource leak --- .../org/exist/xquery/modules/sql/ExecuteFunction.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/extensions/modules/sql/src/main/java/org/exist/xquery/modules/sql/ExecuteFunction.java b/extensions/modules/sql/src/main/java/org/exist/xquery/modules/sql/ExecuteFunction.java index 34d721e773..dbb17ccb9b 100644 --- a/extensions/modules/sql/src/main/java/org/exist/xquery/modules/sql/ExecuteFunction.java +++ b/extensions/modules/sql/src/main/java/org/exist/xquery/modules/sql/ExecuteFunction.java @@ -428,8 +428,9 @@ private ElementImpl resultAsElement(final boolean makeNodeFromColumnName, final //get the content if (rsmd.getColumnType(i + 1) == Types.SQLXML) { //parse sqlxml value + @Nullable SQLXML sqlXml = null; try { - final SQLXML sqlXml = rs.getSQLXML(i + 1); + sqlXml = rs.getSQLXML(i + 1); if (rs.wasNull()) { // Add a null indicator attribute if the value was SQL Null @@ -455,7 +456,12 @@ private ElementImpl resultAsElement(final boolean makeNodeFromColumnName, final } } catch (final Exception e) { throw new XPathException(this, "Could not parse column of type SQLXML: " + e.getMessage(), e); + } finally { + if (sqlXml != null) { + sqlXml.free(); + } } + } else { //otherwise assume string value final String colValue = rs.getString(i + 1);