You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Phil Steitz (JIRA)" <ji...@apache.org> on 2007/09/23 07:13:50 UTC

[jira] Commented: (DBCP-241) NPE in case of an SQLException to be thrown on checkOpen() in DelegatingConnection

    [ https://issues.apache.org/jira/browse/DBCP-241?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12529731 ] 

Phil Steitz commented on DBCP-241:
----------------------------------

The following code reproduces this bug using DBCP 1.2.2:
conn = new DelegatingConnection( new PoolingConnection
    (delegateConn2, new GenericKeyedObjectPool()));  
try {
    conn.close();
 } catch (Exception ex) {}
 conn.prepareStatement("");

The NPE is generated by this line in PoolingConnection.toString:
return "PoolingConnection: " + _pstmtPool.toString();

The DBCP-187 change to checkOpen in DelegatingException exposed this NPE vulnerability in PoolingConnection.  Others exist in this class as well and all should be fixed before this bug is closed.

To avoid this and other NPEs, DBCP 1.x users should avoid calling prepareStatement methods on closed PoolingConnections.

> NPE in case of an SQLException to be thrown on checkOpen() in DelegatingConnection
> ----------------------------------------------------------------------------------
>
>                 Key: DBCP-241
>                 URL: https://issues.apache.org/jira/browse/DBCP-241
>             Project: Commons Dbcp
>          Issue Type: Bug
>    Affects Versions: 1.2.2
>            Reporter: Jörg Heinicke
>             Fix For: 1.3
>
>
> I only got it from the Spring forums (http://forum.springframework.org/showthread.php?t=44068). I have no idea which version or if it is already fixed. It should be easy to review.
> Stacktrace:
> java.lang.NullPointerException
> 	at org.apache.commons.dbcp.PoolingConnection.toString(PoolingConnection.java:248)
> 	at java.lang.String.valueOf(String.java:2615)
> 	at java.lang.StringBuffer.append(StringBuffer.java:220)
> 	at org.apache.commons.dbcp.DelegatingConnection.checkOpen(DelegatingConnection.java:354)
> 	at org.apache.commons.dbcp.DelegatingConnection.prepareStatement(DelegatingConnection.java:246)
> 	at org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.prepareStatement(PoolingDataSource.java:302)
> 	at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:505)
> 	at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:423)
> 	at org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:139)
> implementation of the method:
>     protected void checkOpen() throws SQLException {
>         if(_closed) {
>             throw new SQLException
>                 ("Connection " + _conn + " is closed.");
>         }
>     }
> Regards
> Joerg

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.