Repository: commons-dbcp
Updated Branches:
  refs/heads/master b0bb65029 -> 624cdb14f


[DBCP-486] DriverAdapterCPDS.setUser(null) and setPassword(null) throw
NullPointerExceptions when connection properties are set.

Project: http://git-wip-us.apache.org/repos/asf/commons-dbcp/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-dbcp/commit/624cdb14
Tree: http://git-wip-us.apache.org/repos/asf/commons-dbcp/tree/624cdb14
Diff: http://git-wip-us.apache.org/repos/asf/commons-dbcp/diff/624cdb14

Branch: refs/heads/master
Commit: 624cdb14f819ec4ce5a5c02df0293f317cf9737a
Parents: b0bb650
Author: Gary Gregory <garydgreg...@gmail.com>
Authored: Wed Apr 18 14:25:57 2018 -0600
Committer: Gary Gregory <garydgreg...@gmail.com>
Committed: Wed Apr 18 14:25:57 2018 -0600

----------------------------------------------------------------------
 src/changes/changes.xml                         |  3 ++
 .../dbcp2/cpdsadapter/DriverAdapterCPDS.java    | 38 +++++++++++++-------
 .../cpdsadapter/TestDriverAdapterCPDS.java      | 18 ++++++++++
 3 files changed, 47 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-dbcp/blob/624cdb14/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 60aaa3f..8f69ffb 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -67,6 +67,9 @@ The <action> type attribute can be add,update,fix,remove.
       <action dev="ggregory" type="update" issue="DBCP-483">
         Make constant public: 
org.apache.commons.dbcp2.PoolingDriver.URL_PREFIX.
       </action>
+      <action dev="ggregory" type="update" issue="DBCP-486" due-to="Gary 
Gregory">
+        DriverAdapterCPDS.setUser(null) and setPassword(null) throw 
NullPointerExceptions when connection properties are set.
+      </action>
     </release>
     <release version="2.2.0" date="2017-12-DD" description="This is a minor 
release, including bug fixes and enhancements.">
       <action dev="ggregory" type="fix" issue="DBCP-481" due-to="Gary Gregory">

http://git-wip-us.apache.org/repos/asf/commons-dbcp/blob/624cdb14/src/main/java/org/apache/commons/dbcp2/cpdsadapter/DriverAdapterCPDS.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/commons/dbcp2/cpdsadapter/DriverAdapterCPDS.java 
b/src/main/java/org/apache/commons/dbcp2/cpdsadapter/DriverAdapterCPDS.java
index 8553e4a..bf7d960 100644
--- a/src/main/java/org/apache/commons/dbcp2/cpdsadapter/DriverAdapterCPDS.java
+++ b/src/main/java/org/apache/commons/dbcp2/cpdsadapter/DriverAdapterCPDS.java
@@ -94,6 +94,12 @@ public class DriverAdapterCPDS
     implements ConnectionPoolDataSource, Referenceable, Serializable,
                ObjectFactory {
 
+    private static final String KEY_USER = "user";
+
+
+    private static final String KEY_PASSWORD = "password";
+
+
     private static final long serialVersionUID = -4820523787212147844L;
 
 
@@ -171,8 +177,8 @@ public class DriverAdapterCPDS
         // exception upon first invocation.
         try {
             if (connectionProperties != null) {
-                connectionProperties.put("user", username);
-                connectionProperties.put("password", pass);
+                connectionProperties.put(KEY_USER, username);
+                connectionProperties.put(KEY_PASSWORD, pass);
                 pci = new PooledConnectionImpl(DriverManager.getConnection(
                         getUrl(), connectionProperties));
             } else {
@@ -245,8 +251,8 @@ public class DriverAdapterCPDS
         ref.add(new StringRefAddr("driver", getDriver()));
         ref.add(new StringRefAddr("loginTimeout",
                                   String.valueOf(getLoginTimeout())));
-        ref.add(new StringRefAddr("password", getPassword()));
-        ref.add(new StringRefAddr("user", getUser()));
+        ref.add(new StringRefAddr(KEY_PASSWORD, getPassword()));
+        ref.add(new StringRefAddr(KEY_USER, getUser()));
         ref.add(new StringRefAddr("url", getUrl()));
 
         ref.add(new StringRefAddr("poolPreparedStatements",
@@ -295,11 +301,11 @@ public class DriverAdapterCPDS
                 if (ra != null && ra.getContent() != null) {
                     setUrl(ra.getContent().toString());
                 }
-                ra = ref.get("user");
+                ra = ref.get(KEY_USER);
                 if (ra != null && ra.getContent() != null) {
                     setUser(ra.getContent().toString());
                 }
-                ra = ref.get("password");
+                ra = ref.get(KEY_PASSWORD);
                 if (ra != null && ra.getContent() != null) {
                     setPassword(ra.getContent().toString());
                 }
@@ -389,11 +395,11 @@ public class DriverAdapterCPDS
     public void setConnectionProperties(final Properties props) {
         assertInitializationAllowed();
         connectionProperties = props;
-        if (connectionProperties.containsKey("user")) {
-            setUser(connectionProperties.getProperty("user"));
+        if (connectionProperties.containsKey(KEY_USER)) {
+            setUser(connectionProperties.getProperty(KEY_USER));
         }
-        if (connectionProperties.containsKey("password")) {
-            setPassword(connectionProperties.getProperty("password"));
+        if (connectionProperties.containsKey(KEY_PASSWORD)) {
+            setPassword(connectionProperties.getProperty(KEY_PASSWORD));
         }
     }
 
@@ -437,7 +443,11 @@ public class DriverAdapterCPDS
         assertInitializationAllowed();
         this.password = v;
         if (connectionProperties != null) {
-            connectionProperties.setProperty("password", v);
+            if (v == null) {
+                connectionProperties.remove(KEY_PASSWORD);
+            } else {
+                connectionProperties.setProperty(KEY_PASSWORD, v);
+            }
         }
     }
 
@@ -476,7 +486,11 @@ public class DriverAdapterCPDS
         assertInitializationAllowed();
         this.user = v;
         if (connectionProperties != null) {
-            connectionProperties.setProperty("user", v);
+            if (v == null) {
+                connectionProperties.remove(KEY_USER);
+            } else {
+                connectionProperties.setProperty(KEY_USER, v);
+            }
         }
     }
 

http://git-wip-us.apache.org/repos/asf/commons-dbcp/blob/624cdb14/src/test/java/org/apache/commons/dbcp2/cpdsadapter/TestDriverAdapterCPDS.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/commons/dbcp2/cpdsadapter/TestDriverAdapterCPDS.java 
b/src/test/java/org/apache/commons/dbcp2/cpdsadapter/TestDriverAdapterCPDS.java
index 8d84fd8..52e6729 100644
--- 
a/src/test/java/org/apache/commons/dbcp2/cpdsadapter/TestDriverAdapterCPDS.java
+++ 
b/src/test/java/org/apache/commons/dbcp2/cpdsadapter/TestDriverAdapterCPDS.java
@@ -171,6 +171,15 @@ public class TestDriverAdapterCPDS {
     }
     
     @Test
+    public void testSetUserNullWithConnectionProperties() throws Exception {
+        pcds.setConnectionProperties(new Properties());
+        pcds.setUser("Alice");
+        assertEquals("Alice", pcds.getUser());
+        pcds.setUser(null);
+        assertEquals(null, pcds.getUser());
+    }
+    
+    @Test
     public void testSetPasswordNull() throws Exception {
         pcds.setPassword("Secret");
         assertEquals("Secret", pcds.getPassword());
@@ -178,6 +187,15 @@ public class TestDriverAdapterCPDS {
         assertEquals(null, pcds.getPassword());
     }
     
+    @Test
+    public void testSetPasswordNullWithConnectionProperties() throws Exception 
{
+        pcds.setConnectionProperties(new Properties());
+        pcds.setPassword("Secret");
+        assertEquals("Secret", pcds.getPassword());
+        pcds.setPassword(null);
+        assertEquals(null, pcds.getPassword());
+    }
+    
     /**
      * JIRA: DBCP-442
      */

Reply via email to