8035699: File choosers should be choosier

Reviewed-by: alexsch, art, skoivu
This commit is contained in:
Sergey Malenkov 2014-03-13 11:49:24 +04:00
parent fdda4fe828
commit 9aefc3174c
3 changed files with 20 additions and 2 deletions

View File

@ -739,7 +739,8 @@ class WindowsFileSystemView extends FileSystemView {
* @return the Desktop folder.
*/
public File getHomeDirectory() {
return getRoots()[0];
File[] roots = getRoots();
return (roots.length == 0) ? null : roots[0];
}
/**

View File

@ -583,11 +583,18 @@ final class Win32ShellFolder2 extends ShellFolder {
// 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

View File

@ -136,6 +136,8 @@ final class Win32ShellFolderManager2 extends ShellFolderManager {
if (desktop == null) {
try {
desktop = new Win32ShellFolder2(DESKTOP);
} catch (SecurityException e) {
// Ignore error
} catch (IOException e) {
// Ignore error
} catch (InterruptedException e) {
@ -149,6 +151,8 @@ final class Win32ShellFolderManager2 extends ShellFolderManager {
if (drives == null) {
try {
drives = new Win32ShellFolder2(DRIVES);
} catch (SecurityException e) {
// Ignore error
} catch (IOException e) {
// Ignore error
} catch (InterruptedException e) {
@ -165,6 +169,8 @@ final class Win32ShellFolderManager2 extends ShellFolderManager {
if (path != null) {
recent = createShellFolder(getDesktop(), new File(path));
}
} catch (SecurityException e) {
// Ignore error
} catch (InterruptedException e) {
// Ignore error
} catch (IOException e) {
@ -178,6 +184,8 @@ final class Win32ShellFolderManager2 extends ShellFolderManager {
if (network == null) {
try {
network = new Win32ShellFolder2(NETWORK);
} catch (SecurityException e) {
// Ignore error
} catch (IOException e) {
// Ignore error
} catch (InterruptedException e) {
@ -201,6 +209,8 @@ final class Win32ShellFolderManager2 extends ShellFolderManager {
personal.setIsPersonal();
}
}
} catch (SecurityException e) {
// Ignore error
} catch (InterruptedException e) {
// Ignore error
} catch (IOException e) {