From 34835e509c11b2775c5d89e8c28d74d217bc5682 Mon Sep 17 00:00:00 2001 From: Tom Cunningham Date: Mon, 3 Feb 2025 13:57:59 -0500 Subject: [PATCH 1/2] CXF-9107 Clean up coverity resource leaks and a javascript method typo --- .../org/apache/cxf/jca/core/classloader/PlugInClassLoader.java | 2 +- .../src/main/resources/org/apache/cxf/javascript/cxf-utils.js | 2 +- .../java/org/apache/cxf/jaxrs/provider/json/JSONProvider.java | 2 +- .../java/org/apache/cxf/ws/rm/persistence/jdbc/RMTxStore.java | 2 ++ 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/integration/jca/src/main/java/org/apache/cxf/jca/core/classloader/PlugInClassLoader.java b/integration/jca/src/main/java/org/apache/cxf/jca/core/classloader/PlugInClassLoader.java index c9ec4943dfc..cfa26257fad 100644 --- a/integration/jca/src/main/java/org/apache/cxf/jca/core/classloader/PlugInClassLoader.java +++ b/integration/jca/src/main/java/org/apache/cxf/jca/core/classloader/PlugInClassLoader.java @@ -95,7 +95,7 @@ private static Properties getProperties(ClassLoader parent, String propsFileName props.load(in); LOG.fine("Contents: " + propsFileName + props); - + in.close(); return props; } diff --git a/rt/javascript/javascript-rt/src/main/resources/org/apache/cxf/javascript/cxf-utils.js b/rt/javascript/javascript-rt/src/main/resources/org/apache/cxf/javascript/cxf-utils.js index 46d8864f356..cbf74f5b694 100644 --- a/rt/javascript/javascript-rt/src/main/resources/org/apache/cxf/javascript/cxf-utils.js +++ b/rt/javascript/javascript-rt/src/main/resources/org/apache/cxf/javascript/cxf-utils.js @@ -540,7 +540,7 @@ function org_apache_cxf_pad_string(string, len, pad, type) { pad = typeof(pad) == 'string' ? pad : ' '; if (type == org_apache_cxf_pad_string_PAD_BOTH) { - string = org_apache_cxf_pad_sring(Math.floor(len / 2) + string.length, + string = org_apache_cxf_pad_string(Math.floor(len / 2) + string.length, pad, org_apache_cxf_pad_string_PAD_LEFT); return (org_apache_cxf_pad_string(Math.ceil(len / 2) + string.length, pad, org_apache_cxf_pad_string_PAD_RIGHT)); diff --git a/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/JSONProvider.java b/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/JSONProvider.java index 55896e93cd5..e45407a2c5b 100644 --- a/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/JSONProvider.java +++ b/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/JSONProvider.java @@ -239,8 +239,8 @@ public T readFrom(Class type, Type genericType, Annotation[] anns, MediaType } else { response = checkAdapter(response, type, anns, false); } + realStream.close(); return type.cast(response); - } catch (JAXBException e) { handleJAXBException(e, true); } catch (XMLStreamException e) { diff --git a/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/persistence/jdbc/RMTxStore.java b/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/persistence/jdbc/RMTxStore.java index 7a90b180de6..b53f615b5b4 100644 --- a/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/persistence/jdbc/RMTxStore.java +++ b/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/persistence/jdbc/RMTxStore.java @@ -886,6 +886,8 @@ protected void verifyTable(Connection con, String tableName, String[][] tableCol while (rs.next()) { dbCols.add(rs.getString(4)); } + rs.close(); + for (String[] col : tableCols) { if (!dbCols.contains(col[0])) { newCols.add(col); From 16fc993343e965472ee2d3c9dc3fbc82979f6764 Mon Sep 17 00:00:00 2001 From: Tom Cunningham Date: Wed, 5 Feb 2025 11:46:58 -0500 Subject: [PATCH 2/2] Use try-with-resources to prevent stream/resultset leakage --- .../core/classloader/PlugInClassLoader.java | 25 +++++++++++-------- .../cxf/jaxrs/provider/json/JSONProvider.java | 4 +-- .../cxf/ws/rm/persistence/jdbc/RMTxStore.java | 9 ++++--- 3 files changed, 20 insertions(+), 18 deletions(-) diff --git a/integration/jca/src/main/java/org/apache/cxf/jca/core/classloader/PlugInClassLoader.java b/integration/jca/src/main/java/org/apache/cxf/jca/core/classloader/PlugInClassLoader.java index cfa26257fad..95c106b75e7 100644 --- a/integration/jca/src/main/java/org/apache/cxf/jca/core/classloader/PlugInClassLoader.java +++ b/integration/jca/src/main/java/org/apache/cxf/jca/core/classloader/PlugInClassLoader.java @@ -76,12 +76,22 @@ private static String[] getFilterList(ClassLoader parent, String propFile) throw } private static Properties getProperties(ClassLoader parent, String propsFileName) throws IOException { - InputStream in = parent.getResourceAsStream(propsFileName); + Properties props = new Properties(); - if (null == in) { - in = PlugInClassLoader.class.getResourceAsStream(propsFileName); + try (InputStream in = parent.getResourceAsStream(propsFileName)) { + if (null != in) { + props.load(in); + LOG.fine("Contents: " + propsFileName + props); + return props; + } + } - if (null == in) { + try (InputStream in = PlugInClassLoader.class.getResourceAsStream(propsFileName)) { + if (null != in) { + props.load(in); + LOG.fine("Contents: " + propsFileName + props); + return props; + } else { String msg = "Internal rar classloader failed to locate configuration resource: " + propsFileName; IOException ioe = new IOException(msg); @@ -90,13 +100,6 @@ private static Properties getProperties(ClassLoader parent, String propsFileName throw ioe; } } - - Properties props = new Properties(); - - props.load(in); - LOG.fine("Contents: " + propsFileName + props); - in.close(); - return props; } private String[] loadUrls(ClassLoader parent) throws IOException { diff --git a/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/JSONProvider.java b/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/JSONProvider.java index e45407a2c5b..ebcca7b78e6 100644 --- a/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/JSONProvider.java +++ b/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/JSONProvider.java @@ -206,8 +206,7 @@ public T readFrom(Class type, Type genericType, Annotation[] anns, MediaType XMLStreamReader reader = null; String enc = HttpUtils.getEncoding(mt, StandardCharsets.UTF_8.name()); Unmarshaller unmarshaller = null; - try { - InputStream realStream = getInputStream(type, genericType, is); + try (InputStream realStream = getInputStream(type, genericType, is)) { if (Document.class.isAssignableFrom(type)) { W3CDOMStreamWriter writer = new W3CDOMStreamWriter(); reader = createReader(type, realStream, false, enc); @@ -239,7 +238,6 @@ public T readFrom(Class type, Type genericType, Annotation[] anns, MediaType } else { response = checkAdapter(response, type, anns, false); } - realStream.close(); return type.cast(response); } catch (JAXBException e) { handleJAXBException(e, true); diff --git a/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/persistence/jdbc/RMTxStore.java b/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/persistence/jdbc/RMTxStore.java index b53f615b5b4..c2abd2568ec 100644 --- a/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/persistence/jdbc/RMTxStore.java +++ b/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/persistence/jdbc/RMTxStore.java @@ -880,13 +880,14 @@ protected void createTables() throws SQLException { protected void verifyTable(Connection con, String tableName, String[][] tableCols) { try { DatabaseMetaData metadata = con.getMetaData(); - ResultSet rs = metadata.getColumns(null, null, tableName, "%"); + Set dbCols = new HashSet<>(); List newCols = new ArrayList<>(); - while (rs.next()) { - dbCols.add(rs.getString(4)); + try (ResultSet rs = metadata.getColumns(null, null, tableName, "%")) { + while (rs.next()) { + dbCols.add(rs.getString(4)); + } } - rs.close(); for (String[] col : tableCols) { if (!dbCols.contains(col[0])) {