Hi, all. Do anyone have some comments on this?It is a behavior difference between RI and our Java6.
As described, we'll create a new Permissions each time to hold both dynamic and static permissions from the desired ProtectionDomain. The problem is that the new instance may break the contact of implies when the one extends basic Permission and related PermissionCollection. Following testcase can indicate the scenario, while Policy hold a customized PermissionCollection, it shall return the original type(RI does) rather than using a Permissions instance to replace it (what we do). Although spec doesn't tell the detail, I prefer to follow RI's behavior, since ours does not make sense in my opinion. Any commends or suggestions? 2008/11/18 Sean Qiu (JIRA) <[EMAIL PROTECTED]> > [classlib][security] Policy getPermissions(ProtectionDomain) may return > different type of PermissionCollection from RI > > ---------------------------------------------------------------------------------------------------------------------- > > Key: HARMONY-6021 > URL: https://issues.apache.org/jira/browse/HARMONY-6021 > Project: Harmony > Issue Type: Bug > Components: Classlib > Affects Versions: 5.0M8 > Reporter: Sean Qiu > Assignee: Sean Qiu > Fix For: 5.0M9 > > > --------- > Test > --------- > private static class MockPermission extends BasicPermission{ > > public MockPermission(String name) { super(name); } > > public MockPermission(String name, String action) { super(name,action); } > > } > > static class MockPermissions extends PermissionCollection{ > private Vector<Permission> permissions = new Vector(); > > @Override > public void add(Permission permission) { > if(this.isReadOnly()){ throw new java.lang.SecurityException(); } > if(permission instanceof MockPermission){ permissions.add(permission); } > } > > @Override > public Enumeration<Permission> elements() { return permissions.elements(); > } > > @Override > public boolean implies(Permission permission) { > if(permissions.size()==0){ return false; } > if(permission instanceof MockPermission){ > for(Permission perm : permissions){ > if( perm.implies(permission)){ return true; } > } > } > > return false; > } > > } > > public void testGetPermissions() throws Exception{ > MockPermission read = new MockPermission("read"); > MockPermission write = new MockPermission("write"); > PermissionCollection readPC = new MockPermissions(); > readPC.add(read); > ProtectionDomain pd = new ProtectionDomain(null, null); > TestProvider policy = new TestProvider(); > policy.pc = readPC; > PermissionCollection permissions = policy.getPermissions(pd); > assertTrue(permissions instanceof MockPermissions); > assertSame(permissions, readPC); > assertTrue(permissions.implies(read)); > assertFalse(permissions.implies(write)); > } > > ---------------- > Description > ---------------- > Harmony'll failed in this testcase since it returns a new Permissions > instance rather than use the customized PermissionCollection. > The new created Permissions have different implies contact which leads to > the failures. > It doesn't make sense to create a new Permissions here, since customer may > extension the default permission and permission collection here. > > > > -- > This message is automatically generated by JIRA. > - > You can reply to this email to add a comment to the issue online. > > -- Best Regards Sean, Xiao Xia Qiu China Software Development Lab, IBM
