From eec09ac96e0fcbfbed5da9909abf36d4195532b2 Mon Sep 17 00:00:00 2001 From: Martin Oberhuber < martin.oberhuber@windriver.com> Date: Wed, 26 Sep 2007 21:14:52 +0000 Subject: [PATCH] [203490] Fix NPE in SftpService.getUserHome() --- .../internal/services/files/ftp/FTPService.java | 7 +++++++ .../services/ssh/files/SftpFileService.java | 17 ++++++++++------- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/rse/plugins/org.eclipse.rse.services.files.ftp/src/org/eclipse/rse/internal/services/files/ftp/FTPService.java b/rse/plugins/org.eclipse.rse.services.files.ftp/src/org/eclipse/rse/internal/services/files/ftp/FTPService.java index 3dd8470a754..7c7fc77e3e9 100644 --- a/rse/plugins/org.eclipse.rse.services.files.ftp/src/org/eclipse/rse/internal/services/files/ftp/FTPService.java +++ b/rse/plugins/org.eclipse.rse.services.files.ftp/src/org/eclipse/rse/internal/services/files/ftp/FTPService.java @@ -60,6 +60,7 @@ * Javier Montalvo Orus (Symbian) - [199243] Renaming a file in an FTP-based EFS folder hangs all of Eclipse * Martin Oberhuber (Wind River) - [203306] Fix Deadlock comparing two files on FTP * Martin Oberhuber (Wind River) - [204669] Fix ftp path concatenation on systems using backslash separator + * Martin Oberhuber (Wind River) - [203490] Fix NPE in FTPService.getUserHome() ********************************************************************************/ package org.eclipse.rse.internal.services.files.ftp; @@ -888,9 +889,15 @@ public class FTPService extends AbstractFileService implements IFileService, IFT */ public IHostFile getUserHome() { + if (_userHome==null) { + //As per bug 204710, this may be called before we are connected. + //Returning null in this case is safest, see also SftpFileService. + return null; + } return new FTPHostFile("",_userHome,true,true,0,0,true); //$NON-NLS-1$ } + /* * (non-Javadoc) * @see org.eclipse.rse.services.files.IFileService#getRoots(org.eclipse.core.runtime.IProgressMonitor) diff --git a/rse/plugins/org.eclipse.rse.services.ssh/src/org/eclipse/rse/internal/services/ssh/files/SftpFileService.java b/rse/plugins/org.eclipse.rse.services.ssh/src/org/eclipse/rse/internal/services/ssh/files/SftpFileService.java index 3572ae0e481..abf5e4ca75b 100644 --- a/rse/plugins/org.eclipse.rse.services.ssh/src/org/eclipse/rse/internal/services/ssh/files/SftpFileService.java +++ b/rse/plugins/org.eclipse.rse.services.ssh/src/org/eclipse/rse/internal/services/ssh/files/SftpFileService.java @@ -64,7 +64,7 @@ import org.eclipse.rse.services.files.RemoteFileSecurityException; public class SftpFileService extends AbstractFileService implements IFileService, ISshService { - private class SftpBufferedInputStream extends BufferedInputStream { + private static class SftpBufferedInputStream extends BufferedInputStream { private ChannelSftp channel; @@ -99,7 +99,7 @@ public class SftpFileService extends AbstractFileService implements IFileService } } - private class SftpBufferedOutputStream extends BufferedOutputStream { + private static class SftpBufferedOutputStream extends BufferedOutputStream { private ChannelSftp channel; @@ -574,7 +574,7 @@ public class SftpFileService extends AbstractFileService implements IFileService } public IHostFile getUserHome() { - //TODO Assert: this is only called after we are connected + //As per bug 204710, this may be called before we are connected if (fUserHome!=null) { int lastSlash = fUserHome.lastIndexOf('/'); String name = fUserHome.substring(lastSlash + 1); @@ -582,12 +582,15 @@ public class SftpFileService extends AbstractFileService implements IFileService try { return getFile(parent, name, null); } catch(SystemMessageException e) { - //Error getting user home -> return a default below + //Error getting user home -> return a handle + //Returning the home path as a Root is the safest we can do, since it will + //let users know what the home path is, and the "My Home" filter will be + //set to correct target. See also bug 204710. + return new SftpHostFile("", fUserHome, true, true, false, 0, 0); //$NON-NLS-1$ } } - //Could not determine user home - //return new SftpHostFile(".",".",true,false,false,0,0); //$NON-NLS-1$ //$NON-NLS-2$ - return new SftpHostFile("/", "/", true, true, false, 0, 0); //$NON-NLS-1$ //$NON-NLS-2$ + //Bug 203490, bug 204710: Could not determine user home + return null; } public IHostFile[] getRoots(IProgressMonitor monitor) {