You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by "Alexey Varlamov (JIRA)" <ji...@apache.org> on 2006/08/22 13:06:16 UTC

[jira] Updated: (HARMONY-1245) ClassLoader incorrectly handles AccessControlException

     [ http://issues.apache.org/jira/browse/HARMONY-1245?page=all ]

Alexey Varlamov updated HARMONY-1245:
-------------------------------------

    Attachment: ucl.patch

The fix for the first part is attached; 
it's funny that findResources(String) already has similar catch while findClass(String) does not.

I've created separate issue for the AccessController's part.

> ClassLoader incorrectly handles AccessControlException
> ------------------------------------------------------
>
>                 Key: HARMONY-1245
>                 URL: http://issues.apache.org/jira/browse/HARMONY-1245
>             Project: Harmony
>          Issue Type: Bug
>          Components: Classlib, App-Oriented Bug Reports
>         Environment: Windows XP professional
>            Reporter: Anton Luht
>         Attachments: Test.jar, ucl.patch
>
>
> Harmony: DRLVM + classlib
> java version "1.5.0"
> pre-alpha : not complete or compatible
> svn = r433212, (Aug 21 2006), Windows/ia32/msvc 1310, debug build
> Problem: if classloader tries to find a class in one of paths in its classpath and comes across security exception - no further lookup is made and application just crashes. The code to reproduce  uses code from MX4j unit test 'test.javax.management.LocalSecurityManagerTest' .
> Code:
> import java.io.*;
> import java.security.*;
> import java.util.*;
> class Test2 {
> }
> public class Test  { 
>    static {
>       Policy.setPolicy(new LocalModifiablePolicy());
>       System.setSecurityManager(new SecurityManager());
>    }
>     public static void main (String[] args) throws Exception {   
>        Class.forName("Test2");    
>     }
>    public static class LocalModifiablePolicy extends Policy
>    {
>       private final ProtectionDomain testDomain;
>       private final Map permissionsMap = new HashMap();
>       public LocalModifiablePolicy()
>       {
>          testDomain = LocalModifiablePolicy.class.getProtectionDomain();
>          CodeSource cs = Test.class.getProtectionDomain().getCodeSource();
>          permissionsMap.put(cs, createAllPermissions());
>          initialize();
>       }
>       private Permissions createAllPermissions()
>       {
>          Permissions allPermissions = new Permissions();
>          allPermissions.add(new AllPermission());
>          return allPermissions;
>       }
>       public PermissionCollection getPermissions(CodeSource codesource)
>       {
>          Permissions permissions = (Permissions)permissionsMap.get(codesource);
>          if (permissions == null)
>          {
>             permissions = new Permissions();
>             permissionsMap.put(codesource, permissions);
>          }
>          return permissions;
>       }
>       public void refresh()
>       {
>       }
>       public boolean implies(ProtectionDomain domain, Permission permission)
>       {
>          PermissionCollection perms = getPermissions(domain.getCodeSource());
>          return perms.implies(permission);
>       }
>       public void addPermission(Permission p)
>       {
>          Permissions permissions = (Permissions)getPermissions(testDomain.getCodeSource());
>          permissions.add(p);
>       }
>       public synchronized void initialize()
>       {
>          Permissions permissions = new Permissions();
>          permissions.add(new SecurityPermission("getPolicy"));
>          permissionsMap.put(testDomain.getCodeSource(), permissions);
>       }
>    }
> }
> Steps to reproduce:
> 1.  javac Test.java
> 2. jar cf Test.jar *.class
> 3. rm *.class
> 4. <path to java.exe> -cp .;Test.jar Test
> Output in RI: none
> Output in Harmony:
> java.security.AccessControlException: Permission check failed (java.io.FilePermi
> ssion C:\temp\tests\ab\.\Test2.class read)
>         at java.security.AccessControlContext.checkPermission()
>         at java.security.AccessController.checkPermission()
>         at java.lang.SecurityManager.checkPermission(SecurityManager.java:737)
>         at java.lang.SecurityManager.checkRead(SecurityManager.java:397)
>         at java.io.File.exists(File.java:435)
>         at java.net.URLClassLoader.findClassImpl(URLClassLoader.java:1059)
>         at java.net.URLClassLoader$4.run(URLClassLoader.java:617)
>         at java.net.URLClassLoader$4.run(URLClassLoader.java:616)
>         at java.security.AccessController.doPrivilegedImpl()
>         at java.security.AccessController.doPrivileged()
>         at java.net.URLClassLoader.findClass(URLClassLoader.java:614)
>         at java.lang.ClassLoader.loadClass()
>         at java.net.URLClassLoader$SubURLClassLoader.loadClass(URLClassLoader.ja
> va:116)
>         at java.lang.ClassLoader.loadClass()
>         at java.lang.Class.forName()
>         at java.lang.Class.forName()
>         at Test.main(Test.java:16)
> Please find Test.jar attached

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira