Repository: commons-dbcp
Updated Branches:
  refs/heads/master f61244c48 -> 89d2eb8fa


[DBCP-494] org.apache.commons.dbcp2.PStmtKey should make copies of given
arrays in constructors.

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

Branch: refs/heads/master
Commit: 89d2eb8fab09847c42ca1eb32c62e0d4ef7699e6
Parents: f61244c
Author: Gary Gregory <garydgreg...@gmail.com>
Authored: Fri Jun 8 16:05:22 2018 -0600
Committer: Gary Gregory <garydgreg...@gmail.com>
Committed: Fri Jun 8 16:05:22 2018 -0600

----------------------------------------------------------------------
 src/changes/changes.xml                         |  3 +
 .../java/org/apache/commons/dbcp2/PStmtKey.java |  4 +-
 .../org/apache/commons/dbcp2/TestPStmtKey.java  | 84 ++++++++++++++++++++
 3 files changed, 89 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-dbcp/blob/89d2eb8f/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index cea3bab..f5eae35 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -70,6 +70,9 @@ The <action> type attribute can be add,update,fix,remove.
       <action dev="ggregory" type="update" issue="DBCP-491" due-to="Zheng 
Feng, Gary Gregory">
         Ensure DBCP ConnectionListener can deal with transaction managers 
which invoke rollback in a separate thread.
       </action>
+      <action dev="ggregory" type="update" issue="DBCP-494" due-to="Gary 
Gregory">
+        org.apache.commons.dbcp2.PStmtKey should make copies of given arrays 
in constructors.
+      </action>
     </release>
     <release version="2.3.0" date="2018-05-12" description="This is a minor 
release, including bug fixes and enhancements.">
       <action dev="pschumacher" type="fix" issue="DBCP-476" due-to="Gary 
Evesson, Richard Cordova">

http://git-wip-us.apache.org/repos/asf/commons-dbcp/blob/89d2eb8f/src/main/java/org/apache/commons/dbcp2/PStmtKey.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/dbcp2/PStmtKey.java 
b/src/main/java/org/apache/commons/dbcp2/PStmtKey.java
index 4ceb7d1..3de19b8 100644
--- a/src/main/java/org/apache/commons/dbcp2/PStmtKey.java
+++ b/src/main/java/org/apache/commons/dbcp2/PStmtKey.java
@@ -113,7 +113,7 @@ public class PStmtKey {
         _catalog = catalog;
         _stmtType = StatementType.PREPARED_STATEMENT;
         _autoGeneratedKeys = null;
-        _columnIndexes = columnIndexes;
+        _columnIndexes = columnIndexes == null ? null : 
Arrays.copyOf(columnIndexes, columnIndexes.length);
         _columnNames = null;
         _resultSetType = null;
         _resultSetConcurrency = null;
@@ -128,7 +128,7 @@ public class PStmtKey {
         _stmtType = StatementType.PREPARED_STATEMENT;
         _autoGeneratedKeys = null;
         _columnIndexes = null;
-        _columnNames = columnNames;
+        _columnNames = columnNames == null ? null : Arrays.copyOf(columnNames, 
columnNames.length);
         _resultSetType = null;
         _resultSetConcurrency = null;
         _resultSetHoldability = null;

http://git-wip-us.apache.org/repos/asf/commons-dbcp/blob/89d2eb8f/src/test/java/org/apache/commons/dbcp2/TestPStmtKey.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/commons/dbcp2/TestPStmtKey.java 
b/src/test/java/org/apache/commons/dbcp2/TestPStmtKey.java
new file mode 100644
index 0000000..ab88ee0
--- /dev/null
+++ b/src/test/java/org/apache/commons/dbcp2/TestPStmtKey.java
@@ -0,0 +1,84 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.dbcp2;
+
+import java.util.Arrays;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ * Tests {@link PStmtKey}.
+ *
+ * @since 2.3.1
+ */
+public class TestPStmtKey {
+
+    /**
+     * Tests {@link org.apache.commons.dbcp2.PStmtKey#PStmtKey(String, String, 
int[])}.
+     *
+     * See https://issues.apache.org/jira/browse/DBCP-494
+     */
+    @Test
+    public void testCtorStringStringArrayOfInts() {
+        final int[] input = {0, 0 };
+        final PStmtKey pStmtKey = new PStmtKey("", "", input);
+        Assert.assertArrayEquals(input, pStmtKey.getColumnIndexes());
+        input[0] = 1;
+        input[1] = 1;
+        Assert.assertFalse(Arrays.equals(input, pStmtKey.getColumnIndexes()));
+    }
+
+    /**
+     * Tests {@link org.apache.commons.dbcp2.PStmtKey#PStmtKey(String, String, 
int[])}.
+     *
+     * See https://issues.apache.org/jira/browse/DBCP-494
+     */
+    @Test
+    public void testCtorStringStringArrayOfNullInts() {
+        final int[] input = null;
+        final PStmtKey pStmtKey = new PStmtKey("", "", input);
+        Assert.assertArrayEquals(input, pStmtKey.getColumnIndexes());
+    }
+
+    /**
+     * Tests {@link org.apache.commons.dbcp2.PStmtKey#PStmtKey(String, String, 
String[])}.
+     *
+     * See https://issues.apache.org/jira/browse/DBCP-494
+     */
+    @Test
+    public void testCtorStringStringArrayOfNullStrings() {
+        final String[] input = null;
+        final PStmtKey pStmtKey = new PStmtKey("", "", input);
+        Assert.assertArrayEquals(input, pStmtKey.getColumnNames());
+    }
+
+    /**
+     * Tests {@link org.apache.commons.dbcp2.PStmtKey#PStmtKey(String, String, 
String[])}.
+     *
+     * See https://issues.apache.org/jira/browse/DBCP-494
+     */
+    @Test
+    public void testCtorStringStringArrayOfStrings() {
+        final String[] input = {"A", "B" };
+        final PStmtKey pStmtKey = new PStmtKey("", "", input);
+        Assert.assertArrayEquals(input, pStmtKey.getColumnNames());
+        input[0] = "C";
+        input[1] = "D";
+        Assert.assertFalse(Arrays.equals(input, pStmtKey.getColumnNames()));
+    }
+}

Reply via email to