[libpostgresql-jdbc-java] 53/93: Plug some Statement leaks in metadata queries.

Emmanuel Bourg ebourg-guest at moszumanska.debian.org
Mon Jan 9 10:18:51 UTC 2017


This is an automated email from the git hooks/post-receive script.

ebourg-guest pushed a commit to annotated tag REL9_3_1102
in repository libpostgresql-jdbc-java.

commit cc733376dc16c3650e9cbb6faa130a3b5b0d1211
Author: Heikki Linnakangas <heikki.linnakangas at iki.fi>
Date:   Wed Nov 13 22:31:43 2013 +0200

    Plug some Statement leaks in metadata queries.
    
    These are fairly harmless, nobody calls these metadata methods frequently
    enough for the leaks to matter, and a regular Statement doesn't hold onto
    any server resources anyway. But let's appease Coverity.
---
 .../jdbc2/AbstractJdbc2DatabaseMetaData.java       | 43 +++++++++++++++++-----
 org/postgresql/largeobject/LargeObjectManager.java |  5 ++-
 2 files changed, 37 insertions(+), 11 deletions(-)

diff --git a/org/postgresql/jdbc2/AbstractJdbc2DatabaseMetaData.java b/org/postgresql/jdbc2/AbstractJdbc2DatabaseMetaData.java
index 547edba..8a2087d 100644
--- a/org/postgresql/jdbc2/AbstractJdbc2DatabaseMetaData.java
+++ b/org/postgresql/jdbc2/AbstractJdbc2DatabaseMetaData.java
@@ -57,13 +57,16 @@ public abstract class AbstractJdbc2DatabaseMetaData
                 }
                 sql = "SELECT t1.typlen/t2.typlen FROM " + from + " t1.typelem=t2.oid AND t1.typname='oidvector'";
             }
-            ResultSet rs = connection.createStatement().executeQuery(sql);
+            Statement stmt = connection.createStatement();
+            ResultSet rs = stmt.executeQuery(sql);
             if (!rs.next())
             {
+                stmt.close();
                 throw new PSQLException(GT.tr("Unable to determine a value for MaxIndexKeys due to missing system catalog data."), PSQLState.UNEXPECTED_ERROR);
             }
             INDEX_MAX_KEYS = rs.getInt(1);
             rs.close();
+            stmt.close();
         }
         return INDEX_MAX_KEYS;
     }
@@ -80,13 +83,15 @@ public abstract class AbstractJdbc2DatabaseMetaData
             {
                 sql = "SELECT typlen FROM pg_type WHERE typname='name'";
             }
-            ResultSet rs = connection.createStatement().executeQuery(sql);
+            Statement stmt = connection.createStatement();
+            ResultSet rs = stmt.executeQuery(sql);
             if (!rs.next())
             {
                 throw new PSQLException(GT.tr("Unable to find name datatype in the system catalogs."), PSQLState.UNEXPECTED_ERROR);
             }
             NAMEDATALEN = rs.getInt("typlen");
             rs.close();
+            stmt.close();
         }
         return NAMEDATALEN - 1;
     }
@@ -1797,7 +1802,8 @@ public abstract class AbstractJdbc2DatabaseMetaData
 
         byte isnullableUnknown[] = new byte[0];
 
-        ResultSet rs = connection.createStatement().executeQuery(sql);
+        Statement stmt = connection.createStatement();
+        ResultSet rs = stmt.executeQuery(sql);
         while (rs.next())
         {
             byte schema[] = rs.getBytes("nspname");
@@ -1922,7 +1928,8 @@ public abstract class AbstractJdbc2DatabaseMetaData
                     columnsql += "pg_catalog.";
                 }
                 columnsql += "pg_attribute a WHERE a.attrelid = " + returnTypeRelid + " AND a.attnum > 0 ORDER BY a.attnum ";
-                ResultSet columnrs = connection.createStatement().executeQuery(columnsql);
+                Statement columnstmt = connection.createStatement();
+                ResultSet columnrs = columnstmt.executeQuery(columnsql);
                 while (columnrs.next())
                 {
                     int columnTypeOid = (int)columnrs.getLong("atttypid");
@@ -1948,9 +1955,11 @@ public abstract class AbstractJdbc2DatabaseMetaData
                     v.add(tuple);
                 }
                 columnrs.close();
+                columnstmt.close();
             }
         }
         rs.close();
+        stmt.close();
 
         return (ResultSet)((BaseStatement)createMetaDataStatement()).createDriverResultSet(f, v);
     }
@@ -2446,7 +2455,8 @@ public abstract class AbstractJdbc2DatabaseMetaData
         }
         sql += " ORDER BY nspname,c.relname,attnum ";
 
-        ResultSet rs = connection.createStatement().executeQuery(sql);
+        Statement stmt = connection.createStatement();
+        ResultSet rs = stmt.executeQuery(sql);
         while (rs.next())
         {
             byte[][] tuple = new byte[numberOfFields][];
@@ -2538,6 +2548,7 @@ public abstract class AbstractJdbc2DatabaseMetaData
             v.add(tuple);
         }
         rs.close();
+        stmt.close();
 
         return (ResultSet) ((BaseStatement)createMetaDataStatement()).createDriverResultSet(f, v);
     }
@@ -2688,7 +2699,8 @@ public abstract class AbstractJdbc2DatabaseMetaData
         }
         sql += " ORDER BY attname ";
 
-        ResultSet rs = connection.createStatement().executeQuery(sql);
+        Statement stmt = connection.createStatement();
+        ResultSet rs = stmt.executeQuery(sql);
         while (rs.next())
         {
             byte schemaName[] = rs.getBytes("nspname");
@@ -2745,6 +2757,7 @@ public abstract class AbstractJdbc2DatabaseMetaData
         }
 	}
         rs.close();
+        stmt.close();
 
         return (ResultSet) ((BaseStatement)createMetaDataStatement()).createDriverResultSet(f, v);
     }
@@ -2819,7 +2832,8 @@ public abstract class AbstractJdbc2DatabaseMetaData
         }
         sql += " ORDER BY nspname, relname ";
 
-        ResultSet rs = connection.createStatement().executeQuery(sql);
+        Statement stmt = connection.createStatement();
+        ResultSet rs = stmt.executeQuery(sql);
         while (rs.next())
         {
             byte schema[] = rs.getBytes("nspname");
@@ -2870,6 +2884,7 @@ public abstract class AbstractJdbc2DatabaseMetaData
             }
         }
         rs.close();
+        stmt.close();
 
         return (ResultSet) ((BaseStatement)createMetaDataStatement()).createDriverResultSet(f, v);
     }
@@ -3164,7 +3179,8 @@ public abstract class AbstractJdbc2DatabaseMetaData
                      " AND i.indisprimary " +
                      " ORDER BY a.attnum ";
 
-        ResultSet rs = connection.createStatement().executeQuery(sql);
+        Statement stmt = connection.createStatement();
+        ResultSet rs = stmt.executeQuery(sql);
         while (rs.next())
         {
             byte tuple[][] = new byte[8][];
@@ -3185,6 +3201,8 @@ public abstract class AbstractJdbc2DatabaseMetaData
             tuple[7] = connection.encodeString(Integer.toString(java.sql.DatabaseMetaData.bestRowNotPseudo));
             v.add(tuple);
         }
+        rs.close();
+        stmt.close();
 
         return (ResultSet) ((BaseStatement)createMetaDataStatement()).createDriverResultSet(f, v);
     }
@@ -3555,7 +3573,8 @@ public abstract class AbstractJdbc2DatabaseMetaData
 
         sql += ",keyseq";
 
-        ResultSet rs = connection.createStatement().executeQuery(sql);
+        Statement stmt = connection.createStatement();
+        ResultSet rs = stmt.executeQuery(sql);
 
         // returns the following columns
         // and some example data with a table defined as follows
@@ -3691,6 +3710,8 @@ public abstract class AbstractJdbc2DatabaseMetaData
 
             tuples.add(tuple);
         }
+        rs.close();
+        stmt.close();
 
         return (ResultSet) ((BaseStatement)createMetaDataStatement()).createDriverResultSet(f, tuples);
     }
@@ -3953,7 +3974,8 @@ public abstract class AbstractJdbc2DatabaseMetaData
             		" WHERE NOT (typname ~ '^pg_toast_') ";
         }
 
-        ResultSet rs = connection.createStatement().executeQuery(sql);
+        Statement stmt = connection.createStatement();
+        ResultSet rs = stmt.executeQuery(sql);
         // cache some results, this will keep memory useage down, and speed
         // things up a little.
         byte bZero[] = connection.encodeString("0");
@@ -4015,6 +4037,7 @@ public abstract class AbstractJdbc2DatabaseMetaData
 
         }
         rs.close();
+        stmt.close();
 
         return (ResultSet) ((BaseStatement)createMetaDataStatement()).createDriverResultSet(f, v);
     }
diff --git a/org/postgresql/largeobject/LargeObjectManager.java b/org/postgresql/largeobject/LargeObjectManager.java
index e07cc14..9cec808 100644
--- a/org/postgresql/largeobject/LargeObjectManager.java
+++ b/org/postgresql/largeobject/LargeObjectManager.java
@@ -9,6 +9,7 @@ package org.postgresql.largeobject;
 
 
 import java.sql.ResultSet;
+import java.sql.Statement;
 import java.sql.SQLException;
 import org.postgresql.core.BaseConnection;
 import org.postgresql.fastpath.Fastpath;
@@ -132,13 +133,15 @@ public class LargeObjectManager
             sql += ")";
         }
 
-        ResultSet res = conn.createStatement().executeQuery(sql);
+        Statement stmt = conn.createStatement();
+        ResultSet res = stmt.executeQuery(sql);
 
         if (res == null)
             throw new PSQLException(GT.tr("Failed to initialize LargeObject API"), PSQLState.SYSTEM_ERROR);
 
         fp.addFunctions(res);
         res.close();
+        stmt.close();
 
         conn.getLogger().debug("Large Object initialised");
     }

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/libpostgresql-jdbc-java.git



More information about the pkg-java-commits mailing list