Uploaded image for project: 'WildFly Elytron'
  1. WildFly Elytron
  2. ELY-476

Arrays clone() does not work in static method of interface for IBM JDK

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Obsolete
    • Icon: Critical Critical
    • None
    • 1.1.0.Beta4
    • None
    • None

      It seems IBM JDK has an issue with using clone() method for arrays in static method of interface. Using arrays clone() method causes following exception for IBM JDK:

      java.lang.IllegalAccessError: Class org/wildfly/security/password/interfaces/SaltedSimpleDigestPassword illegally accessing "protected" member of class [B
              at org.wildfly.security.password.interfaces.SaltedSimpleDigestPassword.createRaw(SaltedSimpleDigestPassword.java:112)
          ...
      

      Issue affects only direct usage of arrays clone() method from static method of interface.
      Example, calling methodWillFail() will fail with IBM JDK:

      public interface SimpleInterface {
          static int[] methodWillFail() {
              int[] array = {1, 2};
              return array.clone();
          }
      }
      

      Workaround is simple. Calling static method of another class using arrays clone() works for IBM JDK 8.
      Example, calling methodWillNotFail() will pass with IBM JDK:

      public interface SimpleInterface {
          static int[] methodWillNotFail() {
              return SimpleClass.methodOk();
          }
      }
      
      public class SimpleClass {
          static int[] methodOk() {
              int[] array = {1, 2};
              return array.clone();
          }
      }
      

      Affected interfaces:
      org.wildfly.security.auth.server.NameRewriter.java
      org.wildfly.security.authz.RoleMapper.java
      org.wildfly.security.password.interfaces.SaltedSimpleDigestPassword.java
      org.wildfly.security.password.interfaces.OneTimePassword.java
      org.wildfly.security.password.interfaces.BSDUnixDESCryptPassword.java
      org.wildfly.security.password.interfaces.BCryptPassword.java
      org.wildfly.security.password.interfaces.SimpleDigestPassword.java
      org.wildfly.security.password.interfaces.DigestPassword.java
      org.wildfly.security.password.interfaces.ScramDigestPassword.java
      org.wildfly.security.ssl.SNIServerSSLContextSelector.java

      This issue causes errors in following test cases running with IBM JDK:
      org.wildfly.security.auth.KeyStoreBackedSecurityRealmTest
      org.wildfly.security.auth.realm.jdbc.PasswordSupportTest
      org.wildfly.security.password.impl.BCryptPasswordTest
      org.wildfly.security.auth.realm.ldap.UserPasswordPasswordUtilTest
      org.wildfly.security.ldap.PasswordSupportSuiteChild
      org.wildfly.security.password.impl.BSDUnixDESCryptTest

              Unassigned Unassigned
              olukas Ondrej Lukas (Inactive)
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

                Created:
                Updated:
                Resolved: