You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by pa...@apache.org on 2018/08/24 21:52:27 UTC

svn commit: r1838972 - in /felix/trunk/framework/src/main/java/org/apache/felix/framework: BundleImpl.java util/SecurityManagerEx.java

Author: pauls
Date: Fri Aug 24 21:52:27 2018
New Revision: 1838972

URL: http://svn.apache.org/viewvc?rev=1838972&view=rev
Log:
FELIX-5914: Workaround SecurityManager.getClassContext returning null on Android

Modified:
    felix/trunk/framework/src/main/java/org/apache/felix/framework/BundleImpl.java
    felix/trunk/framework/src/main/java/org/apache/felix/framework/util/SecurityManagerEx.java

Modified: felix/trunk/framework/src/main/java/org/apache/felix/framework/BundleImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/BundleImpl.java?rev=1838972&r1=1838971&r2=1838972&view=diff
==============================================================================
--- felix/trunk/framework/src/main/java/org/apache/felix/framework/BundleImpl.java (original)
+++ felix/trunk/framework/src/main/java/org/apache/felix/framework/BundleImpl.java Fri Aug 24 21:52:27 2018
@@ -1080,9 +1080,9 @@ class BundleImpl implements Bundle, Bund
         Object sm = System.getSecurityManager();
         if ((sm != null) && (getFramework().getSecurityProvider() != null))
         {
-            Class caller = m_smEx.getClassContext()[3];
-            if (((Felix.m_secureAction.getClassLoader(caller) != m_classloader) ||
-                !caller.getName().startsWith("org.apache.felix.framework.")))
+            Class[] classes = m_smEx.getClassContext();
+            if (classes.length < 3 || ((Felix.m_secureAction.getClassLoader(classes[3]) != m_classloader) ||
+                !classes[3].getName().startsWith("org.apache.felix.framework.")))
             {
                 ((SecurityManager) sm).checkPermission(
                     new AdaptPermission(type.getName(), this, AdaptPermission.ADAPT));

Modified: felix/trunk/framework/src/main/java/org/apache/felix/framework/util/SecurityManagerEx.java
URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/util/SecurityManagerEx.java?rev=1838972&r1=1838971&r2=1838972&view=diff
==============================================================================
--- felix/trunk/framework/src/main/java/org/apache/felix/framework/util/SecurityManagerEx.java (original)
+++ felix/trunk/framework/src/main/java/org/apache/felix/framework/util/SecurityManagerEx.java Fri Aug 24 21:52:27 2018
@@ -26,8 +26,12 @@ package org.apache.felix.framework.util;
 **/
 public class SecurityManagerEx extends SecurityManager
 {
+    // In Android apparently getClassContext returns null - we work around this by returning an empty array in that case.
+    private static final Class[] EMPTY_CLASSES = new Class[0];
+
     public Class[] getClassContext()
     {
-        return super.getClassContext();
+        Class[] result = super.getClassContext();
+        return result != null ? result : EMPTY_CLASSES;
     }
 }
\ No newline at end of file