You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by sm...@apache.org on 2007/02/12 15:58:41 UTC

svn commit: r506473 - in /harmony/enhanced/classlib/trunk/modules/security/src: main/java/common/java/security/Provider.java test/api/java/org/apache/harmony/security/tests/java/security/SecurityTest.java

Author: smishura
Date: Mon Feb 12 06:58:40 2007
New Revision: 506473

URL: http://svn.apache.org/viewvc?view=rev&rev=506473
Log:
Correct fix for HARMONY-2761
[classlib][security] Security.getProviders throws NumberFormatException unexpectedly

The case with KeySize attribute was a special case of the bug - NPE was thrown for other attributes
Also an attribute and its value should be case insensitive

Modified:
    harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/java/security/Provider.java
    harmony/enhanced/classlib/trunk/modules/security/src/test/api/java/org/apache/harmony/security/tests/java/security/SecurityTest.java

Modified: harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/java/security/Provider.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/java/security/Provider.java?view=diff&rev=506473&r1=506472&r2=506473
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/java/security/Provider.java (original)
+++ harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/java/security/Provider.java Mon Feb 12 06:58:40 2007
@@ -310,32 +310,21 @@
     // returns true if the implementation meets the constraint expressed by the
     // specified attribute name/value pair.
     private boolean checkAttribute(String servAlg, String attribute, String val) {
-        if (attribute.equalsIgnoreCase("KeySize")) { //$NON-NLS-1$
-
-            String attributeValue = getProperty(servAlg + " KeySize"); //$NON-NLS-1$
-            if (attributeValue == null) {
-                // provider doesn't provide KeySize attribute for the service
-                return false;
-            }
-
-            if (Integer.valueOf(attributeValue).compareTo(Integer.valueOf(val)) < 0) {
-                return false;
-            } else {
-                return true;
-            }
-        } else if (attribute.equalsIgnoreCase("ImplementedId")) { //$NON-NLS-1$
-            if (!getProperty(servAlg + " ImplementedId").equals(val)) { //$NON-NLS-1$
-                return false;
-            } else {
-                return true;
-            }
-        } else { // other attributes
-            if (!getProperty(servAlg + " " + attribute).equals(val)) { //$NON-NLS-1$
-                return false;
-            } else {
-                return true;
+        
+        String attributeValue = getPropertyIgnoreCase(servAlg + ' ' + attribute);
+        if (attributeValue != null) {
+            if (attribute.equalsIgnoreCase("KeySize")) { //$NON-NLS-1$
+                if (Integer.valueOf(attributeValue).compareTo(
+                        Integer.valueOf(val)) >= 0) {
+                    return true;
+                }
+            } else { // other attributes
+                if (attributeValue.equalsIgnoreCase(val)) {
+                    return true;
+                }
             }
         }
+        return false;
     }
 
     /**

Modified: harmony/enhanced/classlib/trunk/modules/security/src/test/api/java/org/apache/harmony/security/tests/java/security/SecurityTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/security/src/test/api/java/org/apache/harmony/security/tests/java/security/SecurityTest.java?view=diff&rev=506473&r1=506472&r2=506473
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/security/src/test/api/java/org/apache/harmony/security/tests/java/security/SecurityTest.java (original)
+++ harmony/enhanced/classlib/trunk/modules/security/src/test/api/java/org/apache/harmony/security/tests/java/security/SecurityTest.java Mon Feb 12 06:58:40 2007
@@ -221,9 +221,23 @@
 
             filter = "MyService.MyAlgorithm KeySize:1025";
             assertNull(filter, Security.getProviders(filter));
-            
+
+            // attribute name and value are case insensitive 
+            filter = "MyService.MyAlgorithm imPLementedIn:softWARE";
+            assertTrue(filter, Arrays.equals(new Provider[] { p }, Security
+                    .getProviders(filter)));
+            filter = "MyService.MyAlgorithm ATTribute:attributeVALUE";
+            assertTrue(filter, Arrays.equals(new Provider[] { p }, Security
+                    .getProviders(filter)));
+
             // Regression for HARMONY-2761
-            filter = "MyService.MyAlgorithmNoKeySize KeySize:512";
+            filter = "MyService.NoKeySize KeySize:512";
+            assertNull(filter, Security.getProviders(filter));
+
+            filter = "MyService.NoImplementedIn ImplementedIn:Software";
+            assertNull(filter, Security.getProviders(filter));
+
+            filter = "ABCService.NoAttribute Attribute:ABC";
             assertNull(filter, Security.getProviders(filter));
         } finally { //clean up
             Security.removeProvider(p.getName());
@@ -274,11 +288,29 @@
             m.put("MessageDigest.SHA-1", "");
             assertNull("MyService.MyAlgorithm KeySize:1025", Security
                     .getProviders(m));
-            
+
+            // attribute name and value are case insensitive 
+            m.clear();
+            m.put("MyService.MyAlgorithm imPLementedIn", "softWARE");
+            assertTrue(Arrays.equals(new Provider[] { p }, Security
+                    .getProviders(m)));
+            m.clear();
+            m.put("MyService.MyAlgorithm ATTribute", "attributeVALUE");
+            assertTrue(Arrays.equals(new Provider[] { p }, Security
+                    .getProviders(m)));
+
             // Regression for HARMONY-2761
             m.clear();
-            m.put("MyService.MyAlgorithmNoKeySize KeySize", "512");
+            m.put("MyService.NoKeySize KeySize", "512");
             assertNull("No KeySize attribute", Security.getProviders(m));
+            
+            m.clear();
+            m.put("MyService.NoImplementedIn ImplementedIn", "Software");
+            assertNull("No ImplementedIn attribute", Security.getProviders(m));
+            
+            m.clear();
+            m.put("ABCService.NoAttribute Attribute", "ABC");
+            assertNull(Security.getProviders(m));
         } finally { //clean up
             Security.removeProvider(p.getName());
         }
@@ -328,10 +360,17 @@
             put("MessageDigest.SHA-1", "SomeClassName");
             put("MyService.MyAlgorithm", "SomeClassName");
             put("MyService.MyAlgorithm KeySize", "1024");
+            put("MyService.MyAlgorithm ImplementedIn", "Software");
+            put("MyService.MyAlgorithm Attribute", "AttributeValue");
 
             // service has no KeySize attribute
-            put("MyService.MyAlgorithmNoKeySize", "SomeClassName");
+            put("MyService.NoKeySize", "SomeClassName");
+
+            // service has no ImplementedIn attribute
+            put("MyService.NoImplementedIn", "SomeClassName");
+
+            // service has no 'Attribute' attribute
+            put("ABCService.NoAttribute", "SomeClassName");
         }
     }
-
 }