]> source.dussan.org Git - jgit.git/commitdiff
SshSupport#runSshCommand: don't throw exception in finally block 10/155210/2
authorMatthias Sohn <matthias.sohn@sap.com>
Sat, 4 Jan 2020 14:44:19 +0000 (15:44 +0100)
committerMatthias Sohn <matthias.sohn@sap.com>
Mon, 6 Jan 2020 10:40:04 +0000 (11:40 +0100)
The CommandFailedException which was thrown in finally block is silently
discarded [1]. Refactor this method to throw the exception after the
finally block.

This fixes the warning "Null comparison always yields false: The
variable failure can only be null at this location".

[1] https://wiki.sei.cmu.edu/confluence/display/java/ERR04-J.+Do+not+complete+abruptly+from+a+finally+block
https://docs.oracle.com/javase/specs/jls/se8/html/jls-14.html#jls-14.20.2

Change-Id: Idbfc303d9c9046ab9a43e0d4c6d65d325bdaf0ed
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
org.eclipse.jgit/src/org/eclipse/jgit/util/SshSupport.java

index 913aa728675f6bed2bf21189948e4a109b9a16da..ac5be1bf20ae2ebab364b3a3c50dce0029839918 100644 (file)
@@ -94,6 +94,7 @@ public class SshSupport {
                CommandFailedException failure = null;
                @SuppressWarnings("resource")
                MessageWriter stderr = new MessageWriter();
+               String out;
                try (MessageWriter stdout = new MessageWriter()) {
                        session = SshSessionFactory.getInstance().getSession(sshUri,
                                        provider, fs, 1000 * timeout);
@@ -108,12 +109,12 @@ public class SshSupport {
                                // waitFor with timeout has a bug - JSch' exitValue() throws the
                                // wrong exception type :(
                                if (process.waitFor() == 0) {
-                                       return stdout.toString();
+                                       out = stdout.toString();
                                } else {
-                                       return null; // still running after timeout
+                                       out = null; // still running after timeout
                                }
                        } catch (InterruptedException e) {
-                               return null; // error
+                               out = null; // error
                        }
                } finally {
                        if (errorThread != null) {
@@ -147,10 +148,11 @@ public class SshSupport {
                        if (session != null) {
                                SshSessionFactory.getInstance().releaseSession(session);
                        }
-                       if (failure != null) {
-                               throw failure;
-                       }
                }
+               if (failure != null) {
+                       throw failure;
+               }
+               return out;
        }
 
 }