Andrew Zhang wrote:
Hi folks,

When SecurityManager is enabled and all file permissions are disabled, RI
fails to new a FileHandler while Harmony allows.
Following test code shows the differences:

   public void test_FileHandler() throws Exception {
       FileHandler handler = new FileHandler();
SecurityManager originalSecurityManager = System.getSecurityManager
();
       try {
           System.setSecurityManager(new MockFileSecurityManager());
           handler.publish(new LogRecord(Level.SEVERE, "msg"));

// SecurityException is thrown here
           handler.close();
       } finally {
           System.setSecurityManager(originalSecurityManager);
       }
   }

   public static class MockFileSecurityManager extends SecurityManager {
       public void checkPermission(Permission perm) {
           if (perm instanceof FilePermission) {
               System.out.println("check " + perm.getName());
               throw new SecurityException();
           }
       }
   }
FileHandler.close() spec says "Throws: SecurityException - if a security
manager exists and if the caller does not have
LoggingPermission("control").", In the code above, control permission is
allowed. The failure stack trace against RI looks like:

java.lang.SecurityException
at com.andrew.LoggingTest$MockFileSecurityManager.checkPermission(
LoggingTest.java:131)
at java.lang.SecurityManager.checkRead(SecurityManager.java:871)
at java.io.File.exists(File.java:700)
at java.io.Win32FileSystem.canonicalize(Win32FileSystem.java:401)
at java.io.File.getCanonicalPath(File.java:531)
at java.io.FilePermission$1.run(FilePermission.java:218)
at java.security.AccessController.doPrivileged(Native Method)
at java.io.FilePermission.init(FilePermission.java:212)
at java.io.FilePermission.<init>(FilePermission.java:264)
at java.lang.SecurityManager.checkDelete(SecurityManager.java:990)
at java.io.File.delete(File.java:869)
at java.util.logging.FileHandler.close(FileHandler.java:594)
at com.andrew.LoggingTest.test_FileHandler(LoggingTest.java:121)
...

The output is "check C:\Documents and Settings\myaccount\java0.log.lck"

It seems RI tries to delete <log file>.lck file, but has no permission.
".lck" file is never mentioned in spec, and should be implementation detail.

Current Harmony code never tries to lock a temp empty .lck file, so the test
passes against Harmony.

If we revise the MockSecurityManager a little, to allow .lck file
permission,

   public void checkPermission(Permission perm) {
           if (perm instanceof FilePermission) {
               if (perm.getName().indexOf(".lck") == -1) {
                   System.out.println("check " + perm.getName());
                   throw new SecurityException();
               }
           }
       }

The test will pass both against RI and Harmony.

So I'd suggest to leave it as "non-bug difference from RI".

I agree.

Richard
Any comments? Thank you!




--
Richard Liang
China Software Development Lab, IBM


---------------------------------------------------------------------
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to