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 {