Browse Source

SshSupport#runSshCommand: don't throw exception in finally block

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>
tags/v5.7.0.202001151323-m1
Matthias Sohn 4 years ago
parent
commit
d9e957dc24
1 changed files with 8 additions and 6 deletions
  1. 8
    6
      org.eclipse.jgit/src/org/eclipse/jgit/util/SshSupport.java

+ 8
- 6
org.eclipse.jgit/src/org/eclipse/jgit/util/SshSupport.java View 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;
}

}

Loading…
Cancel
Save