@@ -204,4 +204,28 @@ public void testProcessExecution() throws Exception {
204204 fail ("didn't get expected exception" );
205205 } catch (SecurityException expected ) {}
206206 }
207+
208+ /** When a configured dir is a symlink, test that permissions work on link target */
209+ public void testSymlinkPermissions () throws IOException {
210+ Path dir = createTempDir ();
211+
212+ Path target = dir .resolve ("target" );
213+ Files .createDirectory (target );
214+
215+ // symlink
216+ Path link = dir .resolve ("link" );
217+ try {
218+ Files .createSymbolicLink (link , target );
219+ } catch (UnsupportedOperationException | IOException e ) {
220+ assumeNoException ("test requires filesystem that supports symbolic links" , e );
221+ } catch (SecurityException e ) {
222+ assumeNoException ("test cannot create symbolic links with security manager enabled" , e );
223+ }
224+ Permissions permissions = new Permissions ();
225+ Security .addPath (permissions , link , "read" );
226+ assertTrue (permissions .implies (new FilePermission (link .toString (), "read" )));
227+ assertTrue (permissions .implies (new FilePermission (link .resolve ("foo" ).toString (), "read" )));
228+ assertTrue (permissions .implies (new FilePermission (target .toString (), "read" )));
229+ assertTrue (permissions .implies (new FilePermission (target .resolve ("foo" ).toString (), "read" )));
230+ }
207231}
0 commit comments