This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-dbcp.git


The following commit(s) were added to refs/heads/master by this push:
     new d6cfd8f8 Add null guards for DelegatingDatabaseMetaData (#352)
d6cfd8f8 is described below

commit d6cfd8f8a1aa0230ee8739b1be00cf2878d2175d
Author: Heewon Lee <94441510+pingpin...@users.noreply.github.com>
AuthorDate: Fri Feb 23 00:09:35 2024 +0900

    Add null guards for DelegatingDatabaseMetaData (#352)
    
    The class `DelegatingDatabaseMetaData` has two `private final` properties,
    `databaseMetaData` and `connection`. Their values are provided as arguments
    to the constructor, but are not guarded against `null` which could propagate
    and cause NPEs at a later arbitrary time.
    This commit implements a fail-fast guard against `null` values.
---
 .../org/apache/commons/dbcp2/DelegatingDatabaseMetaData.java  |  5 +++--
 .../apache/commons/dbcp2/TestDelegatingDatabaseMetaData.java  | 11 +++++++++++
 2 files changed, 14 insertions(+), 2 deletions(-)

diff --git 
a/src/main/java/org/apache/commons/dbcp2/DelegatingDatabaseMetaData.java 
b/src/main/java/org/apache/commons/dbcp2/DelegatingDatabaseMetaData.java
index 56eede2a..ccbc52bb 100644
--- a/src/main/java/org/apache/commons/dbcp2/DelegatingDatabaseMetaData.java
+++ b/src/main/java/org/apache/commons/dbcp2/DelegatingDatabaseMetaData.java
@@ -21,6 +21,7 @@ import java.sql.DatabaseMetaData;
 import java.sql.ResultSet;
 import java.sql.RowIdLifetime;
 import java.sql.SQLException;
+import java.util.Objects;
 
 /**
  * <p>
@@ -51,8 +52,8 @@ public class DelegatingDatabaseMetaData implements 
DatabaseMetaData {
      */
     public DelegatingDatabaseMetaData(final DelegatingConnection<?> connection,
             final DatabaseMetaData databaseMetaData) {
-        this.connection = connection;
-        this.databaseMetaData = databaseMetaData;
+        this.connection = Objects.requireNonNull(connection, "connection");
+        this.databaseMetaData = Objects.requireNonNull(databaseMetaData, 
"databaseMetaData");
     }
 
     @Override
diff --git 
a/src/test/java/org/apache/commons/dbcp2/TestDelegatingDatabaseMetaData.java 
b/src/test/java/org/apache/commons/dbcp2/TestDelegatingDatabaseMetaData.java
index d68f4113..74886ccc 100644
--- a/src/test/java/org/apache/commons/dbcp2/TestDelegatingDatabaseMetaData.java
+++ b/src/test/java/org/apache/commons/dbcp2/TestDelegatingDatabaseMetaData.java
@@ -20,6 +20,7 @@ package org.apache.commons.dbcp2;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.times;
@@ -769,6 +770,16 @@ public class TestDelegatingDatabaseMetaData {
         verify(obj, times(1)).locatorsUpdateCopy();
     }
 
+    @Test
+    public void testNullArguments() throws Exception {
+        assertThrows(NullPointerException.class, () -> {
+            new DelegatingDatabaseMetaData(null, null);
+        });
+        assertThrows(NullPointerException.class, () -> {
+            new DelegatingDatabaseMetaData(new DelegatingConnection(null), 
null);
+        });
+    }
+
     @Test
     public void testNullPlusNonNullIsNull() throws Exception {
         try {

Reply via email to