You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by se...@apache.org on 2016/07/05 23:12:39 UTC

commons-crypto git commit: Add tests to show that IllegalArgumentException is being thrown

Repository: commons-crypto
Updated Branches:
  refs/heads/master b1d66b82a -> ee2136e54


Add tests to show that IllegalArgumentException is being thrown

Fix bug in CryptoCipherFactory - did not throw IAE because errorMessage
buffer is not initially empty
Simplify code by checking the list size

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

Branch: refs/heads/master
Commit: ee2136e547836f6b9c69d5636c34e0d825bcd3f9
Parents: b1d66b8
Author: Sebb <se...@apache.org>
Authored: Wed Jul 6 00:12:35 2016 +0100
Committer: Sebb <se...@apache.org>
Committed: Wed Jul 6 00:12:35 2016 +0100

----------------------------------------------------------------------
 .../commons/crypto/cipher/CryptoCipherFactory.java      | 12 +++++++-----
 .../commons/crypto/random/CryptoRandomFactory.java      | 11 ++++++-----
 .../commons/crypto/cipher/CryptoCipherFactoryTest.java  | 10 ++++++++++
 .../commons/crypto/random/CryptoRandomFactoryTest.java  |  9 +++++++++
 4 files changed, 32 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-crypto/blob/ee2136e5/src/main/java/org/apache/commons/crypto/cipher/CryptoCipherFactory.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/crypto/cipher/CryptoCipherFactory.java b/src/main/java/org/apache/commons/crypto/cipher/CryptoCipherFactory.java
index 5d5b789..08eea45 100644
--- a/src/main/java/org/apache/commons/crypto/cipher/CryptoCipherFactory.java
+++ b/src/main/java/org/apache/commons/crypto/cipher/CryptoCipherFactory.java
@@ -18,6 +18,7 @@
 package org.apache.commons.crypto.cipher;
 
 import java.security.GeneralSecurityException;
+import java.util.List;
 import java.util.Properties;
 
 import org.apache.commons.crypto.Crypto;
@@ -130,15 +131,19 @@ public class CryptoCipherFactory {
      * @param transformation  algorithm/mode/padding
      * @return CryptoCipher  the cipher  (defaults to OpenSslCipher)
      * @throws GeneralSecurityException if cipher initialize failed
-     * @throws IllegalArgumentException if no classname(s)
+     * @throws IllegalArgumentException if no classname(s) were provided
      */
     public static CryptoCipher getCryptoCipher(String transformation,
                                            Properties props) throws GeneralSecurityException {
 
+        final List<String> names = Utils.splitClassNames(getCipherClassString(props), ",");
+        if (names.size() == 0) {
+            throw new IllegalArgumentException("No classname(s) provided");            
+        }
         CryptoCipher cipher = null;
 
         StringBuilder errorMessage = new StringBuilder("CryptoCipher ");
-        for (String klass : Utils.splitClassNames(getCipherClassString(props), ",")) {
+        for (String klass : names) {
             try {
                 Class<?> cls = ReflectionUtils.getClassByName(klass);
                 cipher = ReflectionUtils.newInstance(cls.asSubclass
@@ -154,9 +159,6 @@ public class CryptoCipherFactory {
         if (cipher != null) {
             return cipher;
         }
-        if (errorMessage.length() == 0) {
-            throw new IllegalArgumentException("No classname(s) provided");
-        }
         errorMessage.append(" is not available or transformation " +
                 transformation + " is not supported.");
         throw new GeneralSecurityException(errorMessage.toString());

http://git-wip-us.apache.org/repos/asf/commons-crypto/blob/ee2136e5/src/main/java/org/apache/commons/crypto/random/CryptoRandomFactory.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/crypto/random/CryptoRandomFactory.java b/src/main/java/org/apache/commons/crypto/random/CryptoRandomFactory.java
index 1929685..aa046ec 100644
--- a/src/main/java/org/apache/commons/crypto/random/CryptoRandomFactory.java
+++ b/src/main/java/org/apache/commons/crypto/random/CryptoRandomFactory.java
@@ -18,6 +18,7 @@
 package org.apache.commons.crypto.random;
 
 import java.security.GeneralSecurityException;
+import java.util.List;
 import java.util.Properties;
 
 import org.apache.commons.crypto.Crypto;
@@ -181,10 +182,13 @@ public class CryptoRandomFactory {
      */
     public static CryptoRandom getCryptoRandom(Properties props)
             throws GeneralSecurityException {
+        final List<String> names = Utils.splitClassNames(getRandomClassString(props), ",");
+        if (names.size() == 0) {
+            throw new IllegalArgumentException("No classname(s) provided");
+        }
         StringBuilder errorMessage = new StringBuilder();
         CryptoRandom random = null;
-        for (String klassName : Utils.splitClassNames(
-            getRandomClassString(props), ",")) {
+        for (String klassName : names) {
             try {
                 final Class<?> klass = ReflectionUtils.getClassByName(klassName);
                 random = (CryptoRandom) ReflectionUtils.newInstance(klass, props);
@@ -203,9 +207,6 @@ public class CryptoRandomFactory {
         if (random != null) {
             return random;
         }
-        if (errorMessage.length() == 0) {
-            throw new IllegalArgumentException("No classname(s) provided");
-        }
         throw new GeneralSecurityException(errorMessage.toString());
     }
 

http://git-wip-us.apache.org/repos/asf/commons-crypto/blob/ee2136e5/src/test/java/org/apache/commons/crypto/cipher/CryptoCipherFactoryTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/commons/crypto/cipher/CryptoCipherFactoryTest.java b/src/test/java/org/apache/commons/crypto/cipher/CryptoCipherFactoryTest.java
index 2544717..f47e7e0 100644
--- a/src/test/java/org/apache/commons/crypto/cipher/CryptoCipherFactoryTest.java
+++ b/src/test/java/org/apache/commons/crypto/cipher/CryptoCipherFactoryTest.java
@@ -63,4 +63,14 @@ public class CryptoCipherFactoryTest {
       Properties properties = new Properties();
       CryptoCipherFactory.getCryptoCipher("AES/Invalid/NoPadding", properties);
     }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testNoCipher() throws Exception {
+        Properties properties = new Properties();
+        // An empty string currently means use the default
+        // However the splitter drops empty fields
+        properties.setProperty(CryptoCipherFactory.CLASSES_KEY, ",");
+        CryptoCipherFactory.getCryptoCipher("AES/CBC/NoPadding", properties);
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/commons-crypto/blob/ee2136e5/src/test/java/org/apache/commons/crypto/random/CryptoRandomFactoryTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/commons/crypto/random/CryptoRandomFactoryTest.java b/src/test/java/org/apache/commons/crypto/random/CryptoRandomFactoryTest.java
index 662c147..0d93aeb 100644
--- a/src/test/java/org/apache/commons/crypto/random/CryptoRandomFactoryTest.java
+++ b/src/test/java/org/apache/commons/crypto/random/CryptoRandomFactoryTest.java
@@ -106,4 +106,13 @@ public class CryptoRandomFactoryTest {
         }
     }
 
+    @Test(expected=IllegalArgumentException.class)
+    public void testNoClasses() throws Exception {
+        final Properties props = new Properties();
+        // An empty string currently means use the default
+        // However the splitter drops empty fields
+        props.setProperty(CryptoRandomFactory.CLASSES_KEY, ",");
+        CryptoRandomFactory.getCryptoRandom(props);
+    }
+
 }