Mercurial > hg > release > icedtea7-forest-2.6 > jdk
changeset 7780:756071871d61 jdk7u65-b03
8035699: File choosers should be choosier
Reviewed-by: alexsch, art, skoivu
author | malenkov |
---|---|
date | Thu, 13 Mar 2014 14:58:55 +0400 |
parents | 32a094c7545d |
children | bb8c187e84f1 |
files | src/share/classes/javax/swing/filechooser/FileSystemView.java src/windows/classes/sun/awt/shell/Win32ShellFolder2.java src/windows/classes/sun/awt/shell/Win32ShellFolderManager2.java |
diffstat | 3 files changed, 20 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/classes/javax/swing/filechooser/FileSystemView.java Wed Mar 12 14:59:01 2014 -0700 +++ b/src/share/classes/javax/swing/filechooser/FileSystemView.java Thu Mar 13 14:58:55 2014 +0400 @@ -718,7 +718,8 @@ * @return the Desktop folder. */ public File getHomeDirectory() { - return getRoots()[0]; + File[] roots = getRoots(); + return (roots.length == 0) ? null : roots[0]; } /**
--- a/src/windows/classes/sun/awt/shell/Win32ShellFolder2.java Wed Mar 12 14:59:01 2014 -0700 +++ b/src/windows/classes/sun/awt/shell/Win32ShellFolder2.java Thu Mar 13 14:58:55 2014 +0400 @@ -583,11 +583,18 @@ // Needs to be accessible to Win32ShellFolderManager2 static String getFileSystemPath(final int csidl) throws IOException, InterruptedException { - return invoke(new Callable<String>() { + String path = invoke(new Callable<String>() { public String call() throws IOException { return getFileSystemPath0(csidl); } }, IOException.class); + if (path != null) { + SecurityManager security = System.getSecurityManager(); + if (security != null) { + security.checkRead(path); + } + } + return path; } // NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details
--- a/src/windows/classes/sun/awt/shell/Win32ShellFolderManager2.java Wed Mar 12 14:59:01 2014 -0700 +++ b/src/windows/classes/sun/awt/shell/Win32ShellFolderManager2.java Thu Mar 13 14:58:55 2014 +0400 @@ -138,6 +138,8 @@ if (desktop == null) { try { desktop = new Win32ShellFolder2(DESKTOP); + } catch (SecurityException e) { + // Ignore error } catch (IOException e) { // Ignore error } catch (InterruptedException e) { @@ -151,6 +153,8 @@ if (drives == null) { try { drives = new Win32ShellFolder2(DRIVES); + } catch (SecurityException e) { + // Ignore error } catch (IOException e) { // Ignore error } catch (InterruptedException e) { @@ -167,6 +171,8 @@ if (path != null) { recent = createShellFolder(getDesktop(), new File(path)); } + } catch (SecurityException e) { + // Ignore error } catch (InterruptedException e) { // Ignore error } catch (IOException e) { @@ -180,6 +186,8 @@ if (network == null) { try { network = new Win32ShellFolder2(NETWORK); + } catch (SecurityException e) { + // Ignore error } catch (IOException e) { // Ignore error } catch (InterruptedException e) { @@ -203,6 +211,8 @@ personal.setIsPersonal(); } } + } catch (SecurityException e) { + // Ignore error } catch (InterruptedException e) { // Ignore error } catch (IOException e) {