You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@harmony.apache.org by "Tim Ellison (JIRA)" <ji...@apache.org> on 2006/02/22 21:46:40 UTC

[jira] Created: (HARMONY-121) Stack overflow running security manager test

Stack overflow running security manager test
--------------------------------------------

         Key: HARMONY-121
         URL: http://issues.apache.org/jira/browse/HARMONY-121
     Project: Harmony
        Type: Bug
  Components: Classlib  
    Reporter: Tim Ellison


The following test case runs ok on the reference impl.but fails with a stack overflow on Harmony code.

	private static class MySecurityManager extends SecurityManager {
		private static final RuntimePermission SET_MANAGER_PERMISSION =
			new RuntimePermission("setSecurityManager");
		
		public void checkPermission(Permission perm) {
			if (!perm.equals(SET_MANAGER_PERMISSION)) {
				super.checkPermission(perm);
			}
		}
	}

	public void test_getProperties() {
		System.setSecurityManager(new MySecurityManager());
		try {
			System.getProperties();
		} catch (SecurityException e) {
			// Expected
		} finally {
			System.setSecurityManager(null);
		}
	}

The stack overflow is as follows:
java.lang.StackOverflowError
	at java.util.PropertyPermission.equals(PropertyPermission.java:78)
	at org.apache.harmony.tests.java.lang.SecurityManagerTest$MySecurityManager.checkPermission(SecurityManagerTest.java:44)
	at java.lang.SecurityManager.checkPropertiesAccess(SecurityManager.java:343)
	at java.lang.System.getProperties(System.java:519)
	at org.apache.harmony.security.fortress.PolicyUtils$SystemKit.run(PolicyUtils.java:84)
	at java.security.AccessController.doPrivileged(AccessController.java:183)
	at org.apache.harmony.security.fortress.DefaultPolicy.refresh(DefaultPolicy.java:272)
	at org.apache.harmony.security.fortress.DefaultPolicy.getPermissions(DefaultPolicy.java:194)
	at java.security.Policy.implies(Policy.java:77)
	at java.security.ProtectionDomain.implies(ProtectionDomain.java:118)
	at java.security.AccessController.checkPermission(AccessController.java:88)
	at java.lang.SecurityManager.checkPermission(SecurityManager.java:704)
	at org.apache.harmony.tests.java.lang.SecurityManagerTest$MySecurityManager.checkPermission(SecurityManagerTest.java:45)
	at java.lang.SecurityManager.checkPropertiesAccess(SecurityManager.java:343)
	at java.lang.System.getProperties(System.java:519)
	at org.apache.harmony.security.fortress.PolicyUtils$SystemKit.run(PolicyUtils.java:84)
	at java.security.AccessController.doPrivileged(AccessController.java:183)
	at org.apache.harmony.security.fortress.DefaultPolicy.refresh(DefaultPolicy.java:272)
	at org.apache.harmony.security.fortress.DefaultPolicy.getPermissions(DefaultPolicy.java:194)
	at java.security.Policy.implies(Policy.java:77)
	at java.security.ProtectionDomain.implies(ProtectionDomain.java:118)
	at java.security.AccessController.checkPermission(AccessController.java:88)
	at java.lang.SecurityManager.checkPermission(SecurityManager.java:704)
	at org.apache.harmony.tests.java.lang.SecurityManagerTest$MySecurityManager.checkPermission(SecurityManagerTest.java:45)
	at java.lang.SecurityManager.checkPropertiesAccess(SecurityManager.java:343)
	at java.lang.System.getProperties(System.java:519)
<snip>
	at org.apache.harmony.security.fortress.PolicyUtils$SystemKit.run(PolicyUtils.java:84)
	at java.security.AccessController.doPrivileged(AccessController.java:183)
	at org.apache.harmony.security.fortress.DefaultPolicy.refresh(DefaultPolicy.java:272)
	at org.apache.harmony.security.fortress.DefaultPolicy.getPermissions(DefaultPolicy.java:194)
	at java.security.Policy.implies(Policy.java:77)
	at java.security.ProtectionDomain.implies(ProtectionDomain.java:118)
	at java.security.AccessController.checkPermission(AccessController.java:88)
	at java.lang.SecurityManager.checkPermission(SecurityManager.java:704)
	at org.apache.harmony.tests.java.lang.SecurityManagerTest$MySecurityManager.checkPermission(SecurityManagerTest.java:45)
	at java.lang.SecurityManager.checkPropertiesAccess(SecurityManager.java:343)
	at java.lang.System.getProperties(System.java:519)
	at org.apache.harmony.security.fortress.PolicyUtils$SystemKit.run(PolicyUtils.java:84)
	at java.security.AccessController.doPrivileged(AccessController.java:183)
	at org.apache.harmony.security.fortress.DefaultPolicy.refresh(DefaultPolicy.java:272)
	at org.apache.harmony.security.fortress.DefaultPolicy.getPermissions(DefaultPolicy.java:194)
	at java.security.Policy.implies(Policy.java:77)
	at java.security.ProtectionDomain.implies(ProtectionDomain.java:118)
	at java.security.AccessController.checkPermission(AccessController.java:88)
	at java.lang.SecurityManager.checkPermission(SecurityManager.java:704)
	at org.apache.harmony.tests.java.lang.SecurityManagerTest$MySecurityManager.checkPermission(SecurityManagerTest.java:45)
	at java.lang.SecurityManager.checkPropertiesAccess(SecurityManager.java:343)
	at java.lang.System.getProperties(System.java:519)
	at org.apache.harmony.tests.java.lang.SecurityManagerTest.test_getProperties(SecurityManagerTest.java:53)
	at java.lang.reflect.AccessibleObject.invokeV(AccessibleObject.java:211)
	at java.lang.reflect.Method.invoke(Method.java:248)
	at junit.framework.TestCase.runTest(TestCase.java:154)
	at junit.framework.TestCase.runBare(TestCase.java:127)
	at junit.framework.TestResult$1.protect(TestResult.java:106)
	at junit.framework.TestResult.runProtected(TestResult.java:124)
	at junit.framework.TestResult.run(TestResult.java:109)
	at junit.framework.TestCase.run(TestCase.java:118)
	at junit.framework.TestSuite.runTest(TestSuite.java:208)
	at junit.framework.TestSuite.run(TestSuite.java:203)
	at junit.framework.TestSuite.runTest(TestSuite.java:208)
	at junit.framework.TestSuite.run(TestSuite.java:203)
	at junit.framework.TestSuite.runTest(TestSuite.java:208)
	at junit.framework.TestSuite.run(TestSuite.java:203)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:478)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:344)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)



-- 
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


Re: [jira] Updated: (HARMONY-121) Stack overflow running security manager test

Posted by Mikhail Loenko <ml...@gmail.com>.
Hi Richard

I'll apply the patch as soon as I get back broadband (in ~15 hours from now)

Thanks,
Mikhail

2006/4/3, Richard Liang <ri...@gmail.com>:
> Mikhail Loenko (JIRA) wrote:
> >      [ http://issues.apache.org/jira/browse/HARMONY-121?page=all ]
> >
> > Mikhail Loenko updated HARMONY-121:
> > -----------------------------------
> >
> >     Attachment: policy.txt
> >
> > I've replaced 'Preload classes used for checkPackageAccess' with 'Preload and initialize Policy implementation classes'
> > One need to run regression tests to verify that everything works fine with checkPackageAccess.
> >
> > Anyway calling checkPackageAccess from the System does not guarantee the desired result:
> > in the user's security manager it might be void
> >
> > Thanks,
> > Mikhail
> >
> >
> >> Stack overflow running security manager test
> >> --------------------------------------------
> >>
> >>          Key: HARMONY-121
> >>          URL: http://issues.apache.org/jira/browse/HARMONY-121
> >>      Project: Harmony
> >>         Type: Bug
> >>   Components: Classlib
> >>     Reporter: Tim Ellison
> >>  Attachments: policy.txt
> >>
> >> The following test case runs ok on the reference impl.but fails with a stack overflow on Harmony code.
> >>      private static class MySecurityManager extends SecurityManager {
> >>              private static final RuntimePermission SET_MANAGER_PERMISSION =
> >>                      new RuntimePermission("setSecurityManager");
> >>
> >>              public void checkPermission(Permission perm) {
> >>                      if (!perm.equals(SET_MANAGER_PERMISSION)) {
> >>                              super.checkPermission(perm);
> >>                      }
> >>              }
> >>      }
> >>      public void test_getProperties() {
> >>              System.setSecurityManager(new MySecurityManager());
> >>              try {
> >>                      System.getProperties();
> >>              } catch (SecurityException e) {
> >>                      // Expected
> >>              } finally {
> >>                      System.setSecurityManager(null);
> >>              }
> >>      }
> >> The stack overflow is as follows:
> >> java.lang.StackOverflowError
> >>      at java.util.PropertyPermission.equals(PropertyPermission.java:78)
> >>      at org.apache.harmony.tests.java.lang.SecurityManagerTest$MySecurityManager.checkPermission(SecurityManagerTest.java:44)
> >>      at java.lang.SecurityManager.checkPropertiesAccess(SecurityManager.java:343)
> >>      at java.lang.System.getProperties(System.java:519)
> >>      at org.apache.harmony.security.fortress.PolicyUtils$SystemKit.run(PolicyUtils.java:84)
> >>      at java.security.AccessController.doPrivileged(AccessController.java:183)
> >>      at org.apache.harmony.security.fortress.DefaultPolicy.refresh(DefaultPolicy.java:272)
> >>      at org.apache.harmony.security.fortress.DefaultPolicy.getPermissions(DefaultPolicy.java:194)
> >>      at java.security.Policy.implies(Policy.java:77)
> >>      at java.security.ProtectionDomain.implies(ProtectionDomain.java:118)
> >>      at java.security.AccessController.checkPermission(AccessController.java:88)
> >>      at java.lang.SecurityManager.checkPermission(SecurityManager.java:704)
> >>      at org.apache.harmony.tests.java.lang.SecurityManagerTest$MySecurityManager.checkPermission(SecurityManagerTest.java:45)
> >>      at java.lang.SecurityManager.checkPropertiesAccess(SecurityManager.java:343)
> >>      at java.lang.System.getProperties(System.java:519)
> >>      at org.apache.harmony.security.fortress.PolicyUtils$SystemKit.run(PolicyUtils.java:84)
> >>      at java.security.AccessController.doPrivileged(AccessController.java:183)
> >>      at org.apache.harmony.security.fortress.DefaultPolicy.refresh(DefaultPolicy.java:272)
> >>      at org.apache.harmony.security.fortress.DefaultPolicy.getPermissions(DefaultPolicy.java:194)
> >>      at java.security.Policy.implies(Policy.java:77)
> >>      at java.security.ProtectionDomain.implies(ProtectionDomain.java:118)
> >>      at java.security.AccessController.checkPermission(AccessController.java:88)
> >>      at java.lang.SecurityManager.checkPermission(SecurityManager.java:704)
> >>      at org.apache.harmony.tests.java.lang.SecurityManagerTest$MySecurityManager.checkPermission(SecurityManagerTest.java:45)
> >>      at java.lang.SecurityManager.checkPropertiesAccess(SecurityManager.java:343)
> >>      at java.lang.System.getProperties(System.java:519)
> >> <snip>
> >>      at org.apache.harmony.security.fortress.PolicyUtils$SystemKit.run(PolicyUtils.java:84)
> >>      at java.security.AccessController.doPrivileged(AccessController.java:183)
> >>      at org.apache.harmony.security.fortress.DefaultPolicy.refresh(DefaultPolicy.java:272)
> >>      at org.apache.harmony.security.fortress.DefaultPolicy.getPermissions(DefaultPolicy.java:194)
> >>      at java.security.Policy.implies(Policy.java:77)
> >>      at java.security.ProtectionDomain.implies(ProtectionDomain.java:118)
> >>      at java.security.AccessController.checkPermission(AccessController.java:88)
> >>      at java.lang.SecurityManager.checkPermission(SecurityManager.java:704)
> >>      at org.apache.harmony.tests.java.lang.SecurityManagerTest$MySecurityManager.checkPermission(SecurityManagerTest.java:45)
> >>      at java.lang.SecurityManager.checkPropertiesAccess(SecurityManager.java:343)
> >>      at java.lang.System.getProperties(System.java:519)
> >>      at org.apache.harmony.security.fortress.PolicyUtils$SystemKit.run(PolicyUtils.java:84)
> >>      at java.security.AccessController.doPrivileged(AccessController.java:183)
> >>      at org.apache.harmony.security.fortress.DefaultPolicy.refresh(DefaultPolicy.java:272)
> >>      at org.apache.harmony.security.fortress.DefaultPolicy.getPermissions(DefaultPolicy.java:194)
> >>      at java.security.Policy.implies(Policy.java:77)
> >>      at java.security.ProtectionDomain.implies(ProtectionDomain.java:118)
> >>      at java.security.AccessController.checkPermission(AccessController.java:88)
> >>      at java.lang.SecurityManager.checkPermission(SecurityManager.java:704)
> >>      at org.apache.harmony.tests.java.lang.SecurityManagerTest$MySecurityManager.checkPermission(SecurityManagerTest.java:45)
> >>      at java.lang.SecurityManager.checkPropertiesAccess(SecurityManager.java:343)
> >>      at java.lang.System.getProperties(System.java:519)
> >>      at org.apache.harmony.tests.java.lang.SecurityManagerTest.test_getProperties(SecurityManagerTest.java:53)
> >>      at java.lang.reflect.AccessibleObject.invokeV(AccessibleObject.java:211)
> >>      at java.lang.reflect.Method.invoke(Method.java:248)
> >>      at junit.framework.TestCase.runTest(TestCase.java:154)
> >>      at junit.framework.TestCase.runBare(TestCase.java:127)
> >>      at junit.framework.TestResult$1.protect(TestResult.java:106)
> >>      at junit.framework.TestResult.runProtected(TestResult.java:124)
> >>      at junit.framework.TestResult.run(TestResult.java:109)
> >>      at junit.framework.TestCase.run(TestCase.java:118)
> >>      at junit.framework.TestSuite.runTest(TestSuite.java:208)
> >>      at junit.framework.TestSuite.run(TestSuite.java:203)
> >>      at junit.framework.TestSuite.runTest(TestSuite.java:208)
> >>      at junit.framework.TestSuite.run(TestSuite.java:203)
> >>      at junit.framework.TestSuite.runTest(TestSuite.java:208)
> >>      at junit.framework.TestSuite.run(TestSuite.java:203)
> >>      at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:478)
> >>      at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:344)
> >>      at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
> >>
> >
> >
> Hello Mikhail,
>
> Would you please apply the patch you provided? :-) We have some
> dependency on this issue. Thanks a lot.
>
> --
> Richard Liang
> China Software Development Lab, IBM
>
>
>

---------------------------------------------------------------------
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: harmony-dev-unsubscribe@incubator.apache.org
For additional commands, e-mail: harmony-dev-help@incubator.apache.org


Re: [jira] Updated: (HARMONY-121) Stack overflow running security manager test

Posted by Richard Liang <ri...@gmail.com>.
Mikhail Loenko (JIRA) wrote:
>      [ http://issues.apache.org/jira/browse/HARMONY-121?page=all ]
>
> Mikhail Loenko updated HARMONY-121:
> -----------------------------------
>
>     Attachment: policy.txt
>
> I've replaced 'Preload classes used for checkPackageAccess' with 'Preload and initialize Policy implementation classes'
> One need to run regression tests to verify that everything works fine with checkPackageAccess.
>
> Anyway calling checkPackageAccess from the System does not guarantee the desired result:
> in the user's security manager it might be void
>
> Thanks,
> Mikhail
>
>   
>> Stack overflow running security manager test
>> --------------------------------------------
>>
>>          Key: HARMONY-121
>>          URL: http://issues.apache.org/jira/browse/HARMONY-121
>>      Project: Harmony
>>         Type: Bug
>>   Components: Classlib
>>     Reporter: Tim Ellison
>>  Attachments: policy.txt
>>
>> The following test case runs ok on the reference impl.but fails with a stack overflow on Harmony code.
>> 	private static class MySecurityManager extends SecurityManager {
>> 		private static final RuntimePermission SET_MANAGER_PERMISSION =
>> 			new RuntimePermission("setSecurityManager");
>> 		
>> 		public void checkPermission(Permission perm) {
>> 			if (!perm.equals(SET_MANAGER_PERMISSION)) {
>> 				super.checkPermission(perm);
>> 			}
>> 		}
>> 	}
>> 	public void test_getProperties() {
>> 		System.setSecurityManager(new MySecurityManager());
>> 		try {
>> 			System.getProperties();
>> 		} catch (SecurityException e) {
>> 			// Expected
>> 		} finally {
>> 			System.setSecurityManager(null);
>> 		}
>> 	}
>> The stack overflow is as follows:
>> java.lang.StackOverflowError
>> 	at java.util.PropertyPermission.equals(PropertyPermission.java:78)
>> 	at org.apache.harmony.tests.java.lang.SecurityManagerTest$MySecurityManager.checkPermission(SecurityManagerTest.java:44)
>> 	at java.lang.SecurityManager.checkPropertiesAccess(SecurityManager.java:343)
>> 	at java.lang.System.getProperties(System.java:519)
>> 	at org.apache.harmony.security.fortress.PolicyUtils$SystemKit.run(PolicyUtils.java:84)
>> 	at java.security.AccessController.doPrivileged(AccessController.java:183)
>> 	at org.apache.harmony.security.fortress.DefaultPolicy.refresh(DefaultPolicy.java:272)
>> 	at org.apache.harmony.security.fortress.DefaultPolicy.getPermissions(DefaultPolicy.java:194)
>> 	at java.security.Policy.implies(Policy.java:77)
>> 	at java.security.ProtectionDomain.implies(ProtectionDomain.java:118)
>> 	at java.security.AccessController.checkPermission(AccessController.java:88)
>> 	at java.lang.SecurityManager.checkPermission(SecurityManager.java:704)
>> 	at org.apache.harmony.tests.java.lang.SecurityManagerTest$MySecurityManager.checkPermission(SecurityManagerTest.java:45)
>> 	at java.lang.SecurityManager.checkPropertiesAccess(SecurityManager.java:343)
>> 	at java.lang.System.getProperties(System.java:519)
>> 	at org.apache.harmony.security.fortress.PolicyUtils$SystemKit.run(PolicyUtils.java:84)
>> 	at java.security.AccessController.doPrivileged(AccessController.java:183)
>> 	at org.apache.harmony.security.fortress.DefaultPolicy.refresh(DefaultPolicy.java:272)
>> 	at org.apache.harmony.security.fortress.DefaultPolicy.getPermissions(DefaultPolicy.java:194)
>> 	at java.security.Policy.implies(Policy.java:77)
>> 	at java.security.ProtectionDomain.implies(ProtectionDomain.java:118)
>> 	at java.security.AccessController.checkPermission(AccessController.java:88)
>> 	at java.lang.SecurityManager.checkPermission(SecurityManager.java:704)
>> 	at org.apache.harmony.tests.java.lang.SecurityManagerTest$MySecurityManager.checkPermission(SecurityManagerTest.java:45)
>> 	at java.lang.SecurityManager.checkPropertiesAccess(SecurityManager.java:343)
>> 	at java.lang.System.getProperties(System.java:519)
>> <snip>
>> 	at org.apache.harmony.security.fortress.PolicyUtils$SystemKit.run(PolicyUtils.java:84)
>> 	at java.security.AccessController.doPrivileged(AccessController.java:183)
>> 	at org.apache.harmony.security.fortress.DefaultPolicy.refresh(DefaultPolicy.java:272)
>> 	at org.apache.harmony.security.fortress.DefaultPolicy.getPermissions(DefaultPolicy.java:194)
>> 	at java.security.Policy.implies(Policy.java:77)
>> 	at java.security.ProtectionDomain.implies(ProtectionDomain.java:118)
>> 	at java.security.AccessController.checkPermission(AccessController.java:88)
>> 	at java.lang.SecurityManager.checkPermission(SecurityManager.java:704)
>> 	at org.apache.harmony.tests.java.lang.SecurityManagerTest$MySecurityManager.checkPermission(SecurityManagerTest.java:45)
>> 	at java.lang.SecurityManager.checkPropertiesAccess(SecurityManager.java:343)
>> 	at java.lang.System.getProperties(System.java:519)
>> 	at org.apache.harmony.security.fortress.PolicyUtils$SystemKit.run(PolicyUtils.java:84)
>> 	at java.security.AccessController.doPrivileged(AccessController.java:183)
>> 	at org.apache.harmony.security.fortress.DefaultPolicy.refresh(DefaultPolicy.java:272)
>> 	at org.apache.harmony.security.fortress.DefaultPolicy.getPermissions(DefaultPolicy.java:194)
>> 	at java.security.Policy.implies(Policy.java:77)
>> 	at java.security.ProtectionDomain.implies(ProtectionDomain.java:118)
>> 	at java.security.AccessController.checkPermission(AccessController.java:88)
>> 	at java.lang.SecurityManager.checkPermission(SecurityManager.java:704)
>> 	at org.apache.harmony.tests.java.lang.SecurityManagerTest$MySecurityManager.checkPermission(SecurityManagerTest.java:45)
>> 	at java.lang.SecurityManager.checkPropertiesAccess(SecurityManager.java:343)
>> 	at java.lang.System.getProperties(System.java:519)
>> 	at org.apache.harmony.tests.java.lang.SecurityManagerTest.test_getProperties(SecurityManagerTest.java:53)
>> 	at java.lang.reflect.AccessibleObject.invokeV(AccessibleObject.java:211)
>> 	at java.lang.reflect.Method.invoke(Method.java:248)
>> 	at junit.framework.TestCase.runTest(TestCase.java:154)
>> 	at junit.framework.TestCase.runBare(TestCase.java:127)
>> 	at junit.framework.TestResult$1.protect(TestResult.java:106)
>> 	at junit.framework.TestResult.runProtected(TestResult.java:124)
>> 	at junit.framework.TestResult.run(TestResult.java:109)
>> 	at junit.framework.TestCase.run(TestCase.java:118)
>> 	at junit.framework.TestSuite.runTest(TestSuite.java:208)
>> 	at junit.framework.TestSuite.run(TestSuite.java:203)
>> 	at junit.framework.TestSuite.runTest(TestSuite.java:208)
>> 	at junit.framework.TestSuite.run(TestSuite.java:203)
>> 	at junit.framework.TestSuite.runTest(TestSuite.java:208)
>> 	at junit.framework.TestSuite.run(TestSuite.java:203)
>> 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:478)
>> 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:344)
>> 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
>>     
>
>   
Hello Mikhail,

Would you please apply the patch you provided? :-) We have some 
dependency on this issue. Thanks a lot.

-- 
Richard Liang
China Software Development Lab, IBM 


[jira] Updated: (HARMONY-121) Stack overflow running security manager test

Posted by "Mikhail Loenko (JIRA)" <ji...@apache.org>.
     [ http://issues.apache.org/jira/browse/HARMONY-121?page=all ]

Mikhail Loenko updated HARMONY-121:
-----------------------------------

    Attachment: policy.txt

I've replaced 'Preload classes used for checkPackageAccess' with 'Preload and initialize Policy implementation classes'
One need to run regression tests to verify that everything works fine with checkPackageAccess.

Anyway calling checkPackageAccess from the System does not guarantee the desired result:
in the user's security manager it might be void

Thanks,
Mikhail

> Stack overflow running security manager test
> --------------------------------------------
>
>          Key: HARMONY-121
>          URL: http://issues.apache.org/jira/browse/HARMONY-121
>      Project: Harmony
>         Type: Bug
>   Components: Classlib
>     Reporter: Tim Ellison
>  Attachments: policy.txt
>
> The following test case runs ok on the reference impl.but fails with a stack overflow on Harmony code.
> 	private static class MySecurityManager extends SecurityManager {
> 		private static final RuntimePermission SET_MANAGER_PERMISSION =
> 			new RuntimePermission("setSecurityManager");
> 		
> 		public void checkPermission(Permission perm) {
> 			if (!perm.equals(SET_MANAGER_PERMISSION)) {
> 				super.checkPermission(perm);
> 			}
> 		}
> 	}
> 	public void test_getProperties() {
> 		System.setSecurityManager(new MySecurityManager());
> 		try {
> 			System.getProperties();
> 		} catch (SecurityException e) {
> 			// Expected
> 		} finally {
> 			System.setSecurityManager(null);
> 		}
> 	}
> The stack overflow is as follows:
> java.lang.StackOverflowError
> 	at java.util.PropertyPermission.equals(PropertyPermission.java:78)
> 	at org.apache.harmony.tests.java.lang.SecurityManagerTest$MySecurityManager.checkPermission(SecurityManagerTest.java:44)
> 	at java.lang.SecurityManager.checkPropertiesAccess(SecurityManager.java:343)
> 	at java.lang.System.getProperties(System.java:519)
> 	at org.apache.harmony.security.fortress.PolicyUtils$SystemKit.run(PolicyUtils.java:84)
> 	at java.security.AccessController.doPrivileged(AccessController.java:183)
> 	at org.apache.harmony.security.fortress.DefaultPolicy.refresh(DefaultPolicy.java:272)
> 	at org.apache.harmony.security.fortress.DefaultPolicy.getPermissions(DefaultPolicy.java:194)
> 	at java.security.Policy.implies(Policy.java:77)
> 	at java.security.ProtectionDomain.implies(ProtectionDomain.java:118)
> 	at java.security.AccessController.checkPermission(AccessController.java:88)
> 	at java.lang.SecurityManager.checkPermission(SecurityManager.java:704)
> 	at org.apache.harmony.tests.java.lang.SecurityManagerTest$MySecurityManager.checkPermission(SecurityManagerTest.java:45)
> 	at java.lang.SecurityManager.checkPropertiesAccess(SecurityManager.java:343)
> 	at java.lang.System.getProperties(System.java:519)
> 	at org.apache.harmony.security.fortress.PolicyUtils$SystemKit.run(PolicyUtils.java:84)
> 	at java.security.AccessController.doPrivileged(AccessController.java:183)
> 	at org.apache.harmony.security.fortress.DefaultPolicy.refresh(DefaultPolicy.java:272)
> 	at org.apache.harmony.security.fortress.DefaultPolicy.getPermissions(DefaultPolicy.java:194)
> 	at java.security.Policy.implies(Policy.java:77)
> 	at java.security.ProtectionDomain.implies(ProtectionDomain.java:118)
> 	at java.security.AccessController.checkPermission(AccessController.java:88)
> 	at java.lang.SecurityManager.checkPermission(SecurityManager.java:704)
> 	at org.apache.harmony.tests.java.lang.SecurityManagerTest$MySecurityManager.checkPermission(SecurityManagerTest.java:45)
> 	at java.lang.SecurityManager.checkPropertiesAccess(SecurityManager.java:343)
> 	at java.lang.System.getProperties(System.java:519)
> <snip>
> 	at org.apache.harmony.security.fortress.PolicyUtils$SystemKit.run(PolicyUtils.java:84)
> 	at java.security.AccessController.doPrivileged(AccessController.java:183)
> 	at org.apache.harmony.security.fortress.DefaultPolicy.refresh(DefaultPolicy.java:272)
> 	at org.apache.harmony.security.fortress.DefaultPolicy.getPermissions(DefaultPolicy.java:194)
> 	at java.security.Policy.implies(Policy.java:77)
> 	at java.security.ProtectionDomain.implies(ProtectionDomain.java:118)
> 	at java.security.AccessController.checkPermission(AccessController.java:88)
> 	at java.lang.SecurityManager.checkPermission(SecurityManager.java:704)
> 	at org.apache.harmony.tests.java.lang.SecurityManagerTest$MySecurityManager.checkPermission(SecurityManagerTest.java:45)
> 	at java.lang.SecurityManager.checkPropertiesAccess(SecurityManager.java:343)
> 	at java.lang.System.getProperties(System.java:519)
> 	at org.apache.harmony.security.fortress.PolicyUtils$SystemKit.run(PolicyUtils.java:84)
> 	at java.security.AccessController.doPrivileged(AccessController.java:183)
> 	at org.apache.harmony.security.fortress.DefaultPolicy.refresh(DefaultPolicy.java:272)
> 	at org.apache.harmony.security.fortress.DefaultPolicy.getPermissions(DefaultPolicy.java:194)
> 	at java.security.Policy.implies(Policy.java:77)
> 	at java.security.ProtectionDomain.implies(ProtectionDomain.java:118)
> 	at java.security.AccessController.checkPermission(AccessController.java:88)
> 	at java.lang.SecurityManager.checkPermission(SecurityManager.java:704)
> 	at org.apache.harmony.tests.java.lang.SecurityManagerTest$MySecurityManager.checkPermission(SecurityManagerTest.java:45)
> 	at java.lang.SecurityManager.checkPropertiesAccess(SecurityManager.java:343)
> 	at java.lang.System.getProperties(System.java:519)
> 	at org.apache.harmony.tests.java.lang.SecurityManagerTest.test_getProperties(SecurityManagerTest.java:53)
> 	at java.lang.reflect.AccessibleObject.invokeV(AccessibleObject.java:211)
> 	at java.lang.reflect.Method.invoke(Method.java:248)
> 	at junit.framework.TestCase.runTest(TestCase.java:154)
> 	at junit.framework.TestCase.runBare(TestCase.java:127)
> 	at junit.framework.TestResult$1.protect(TestResult.java:106)
> 	at junit.framework.TestResult.runProtected(TestResult.java:124)
> 	at junit.framework.TestResult.run(TestResult.java:109)
> 	at junit.framework.TestCase.run(TestCase.java:118)
> 	at junit.framework.TestSuite.runTest(TestSuite.java:208)
> 	at junit.framework.TestSuite.run(TestSuite.java:203)
> 	at junit.framework.TestSuite.runTest(TestSuite.java:208)
> 	at junit.framework.TestSuite.run(TestSuite.java:203)
> 	at junit.framework.TestSuite.runTest(TestSuite.java:208)
> 	at junit.framework.TestSuite.run(TestSuite.java:203)
> 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:478)
> 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:344)
> 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)

-- 
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


[jira] Commented: (HARMONY-121) Stack overflow running security manager test

Posted by "Mikhail Loenko (JIRA)" <ji...@apache.org>.
    [ http://issues.apache.org/jira/browse/HARMONY-121?page=comments#action_12368262 ] 

Mikhail Loenko commented on HARMONY-121:
----------------------------------------

At the first call of custom SecurityManager.checkPermission() the classes required for permission check are not initialized. 

Initialization of these classes (e.g. reading system properties or loading of the policy file) causes other permissions checks and thus falls into an infinite recursion.

I see the following way to fix the problem: Initialize Policy (e.g. call Policy.getPolicy()) at the first System.setSecurityManager call.

Currently IBM's System calls 's.checkPackageAccess("java.lang")' that might work well with some 
security managers and don't work with others. 

If all agree I'll submit a patch for both System and Policy.


> Stack overflow running security manager test
> --------------------------------------------
>
>          Key: HARMONY-121
>          URL: http://issues.apache.org/jira/browse/HARMONY-121
>      Project: Harmony
>         Type: Bug
>   Components: Classlib
>     Reporter: Tim Ellison

>
> The following test case runs ok on the reference impl.but fails with a stack overflow on Harmony code.
> 	private static class MySecurityManager extends SecurityManager {
> 		private static final RuntimePermission SET_MANAGER_PERMISSION =
> 			new RuntimePermission("setSecurityManager");
> 		
> 		public void checkPermission(Permission perm) {
> 			if (!perm.equals(SET_MANAGER_PERMISSION)) {
> 				super.checkPermission(perm);
> 			}
> 		}
> 	}
> 	public void test_getProperties() {
> 		System.setSecurityManager(new MySecurityManager());
> 		try {
> 			System.getProperties();
> 		} catch (SecurityException e) {
> 			// Expected
> 		} finally {
> 			System.setSecurityManager(null);
> 		}
> 	}
> The stack overflow is as follows:
> java.lang.StackOverflowError
> 	at java.util.PropertyPermission.equals(PropertyPermission.java:78)
> 	at org.apache.harmony.tests.java.lang.SecurityManagerTest$MySecurityManager.checkPermission(SecurityManagerTest.java:44)
> 	at java.lang.SecurityManager.checkPropertiesAccess(SecurityManager.java:343)
> 	at java.lang.System.getProperties(System.java:519)
> 	at org.apache.harmony.security.fortress.PolicyUtils$SystemKit.run(PolicyUtils.java:84)
> 	at java.security.AccessController.doPrivileged(AccessController.java:183)
> 	at org.apache.harmony.security.fortress.DefaultPolicy.refresh(DefaultPolicy.java:272)
> 	at org.apache.harmony.security.fortress.DefaultPolicy.getPermissions(DefaultPolicy.java:194)
> 	at java.security.Policy.implies(Policy.java:77)
> 	at java.security.ProtectionDomain.implies(ProtectionDomain.java:118)
> 	at java.security.AccessController.checkPermission(AccessController.java:88)
> 	at java.lang.SecurityManager.checkPermission(SecurityManager.java:704)
> 	at org.apache.harmony.tests.java.lang.SecurityManagerTest$MySecurityManager.checkPermission(SecurityManagerTest.java:45)
> 	at java.lang.SecurityManager.checkPropertiesAccess(SecurityManager.java:343)
> 	at java.lang.System.getProperties(System.java:519)
> 	at org.apache.harmony.security.fortress.PolicyUtils$SystemKit.run(PolicyUtils.java:84)
> 	at java.security.AccessController.doPrivileged(AccessController.java:183)
> 	at org.apache.harmony.security.fortress.DefaultPolicy.refresh(DefaultPolicy.java:272)
> 	at org.apache.harmony.security.fortress.DefaultPolicy.getPermissions(DefaultPolicy.java:194)
> 	at java.security.Policy.implies(Policy.java:77)
> 	at java.security.ProtectionDomain.implies(ProtectionDomain.java:118)
> 	at java.security.AccessController.checkPermission(AccessController.java:88)
> 	at java.lang.SecurityManager.checkPermission(SecurityManager.java:704)
> 	at org.apache.harmony.tests.java.lang.SecurityManagerTest$MySecurityManager.checkPermission(SecurityManagerTest.java:45)
> 	at java.lang.SecurityManager.checkPropertiesAccess(SecurityManager.java:343)
> 	at java.lang.System.getProperties(System.java:519)
> <snip>
> 	at org.apache.harmony.security.fortress.PolicyUtils$SystemKit.run(PolicyUtils.java:84)
> 	at java.security.AccessController.doPrivileged(AccessController.java:183)
> 	at org.apache.harmony.security.fortress.DefaultPolicy.refresh(DefaultPolicy.java:272)
> 	at org.apache.harmony.security.fortress.DefaultPolicy.getPermissions(DefaultPolicy.java:194)
> 	at java.security.Policy.implies(Policy.java:77)
> 	at java.security.ProtectionDomain.implies(ProtectionDomain.java:118)
> 	at java.security.AccessController.checkPermission(AccessController.java:88)
> 	at java.lang.SecurityManager.checkPermission(SecurityManager.java:704)
> 	at org.apache.harmony.tests.java.lang.SecurityManagerTest$MySecurityManager.checkPermission(SecurityManagerTest.java:45)
> 	at java.lang.SecurityManager.checkPropertiesAccess(SecurityManager.java:343)
> 	at java.lang.System.getProperties(System.java:519)
> 	at org.apache.harmony.security.fortress.PolicyUtils$SystemKit.run(PolicyUtils.java:84)
> 	at java.security.AccessController.doPrivileged(AccessController.java:183)
> 	at org.apache.harmony.security.fortress.DefaultPolicy.refresh(DefaultPolicy.java:272)
> 	at org.apache.harmony.security.fortress.DefaultPolicy.getPermissions(DefaultPolicy.java:194)
> 	at java.security.Policy.implies(Policy.java:77)
> 	at java.security.ProtectionDomain.implies(ProtectionDomain.java:118)
> 	at java.security.AccessController.checkPermission(AccessController.java:88)
> 	at java.lang.SecurityManager.checkPermission(SecurityManager.java:704)
> 	at org.apache.harmony.tests.java.lang.SecurityManagerTest$MySecurityManager.checkPermission(SecurityManagerTest.java:45)
> 	at java.lang.SecurityManager.checkPropertiesAccess(SecurityManager.java:343)
> 	at java.lang.System.getProperties(System.java:519)
> 	at org.apache.harmony.tests.java.lang.SecurityManagerTest.test_getProperties(SecurityManagerTest.java:53)
> 	at java.lang.reflect.AccessibleObject.invokeV(AccessibleObject.java:211)
> 	at java.lang.reflect.Method.invoke(Method.java:248)
> 	at junit.framework.TestCase.runTest(TestCase.java:154)
> 	at junit.framework.TestCase.runBare(TestCase.java:127)
> 	at junit.framework.TestResult$1.protect(TestResult.java:106)
> 	at junit.framework.TestResult.runProtected(TestResult.java:124)
> 	at junit.framework.TestResult.run(TestResult.java:109)
> 	at junit.framework.TestCase.run(TestCase.java:118)
> 	at junit.framework.TestSuite.runTest(TestSuite.java:208)
> 	at junit.framework.TestSuite.run(TestSuite.java:203)
> 	at junit.framework.TestSuite.runTest(TestSuite.java:208)
> 	at junit.framework.TestSuite.run(TestSuite.java:203)
> 	at junit.framework.TestSuite.runTest(TestSuite.java:208)
> 	at junit.framework.TestSuite.run(TestSuite.java:203)
> 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:478)
> 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:344)
> 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)

-- 
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