Skip to content

Commit fe2c657

Browse files
committed
SCANJLIB-250 Preserve stderr/stdout when the command fails early
1 parent b5755ff commit fe2c657

File tree

2 files changed

+14
-5
lines changed

2 files changed

+14
-5
lines changed

lib/src/main/java/org/sonarsource/scanner/lib/internal/facade/forked/JavaRunner.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,15 +56,15 @@ public boolean execute(List<String> args, @Nullable String input, Consumer<Strin
5656
LOG.debug("Executing: {}", String.join(" ", command));
5757
}
5858
Process process = new ProcessBuilder(command).start();
59-
if (input != null) {
60-
try (var stdin = process.getOutputStream(); var osw = new OutputStreamWriter(stdin, StandardCharsets.UTF_8)) {
61-
osw.write(input);
62-
}
63-
}
6459
var stdoutConsummer = new StreamGobbler(process.getInputStream(), stdOutConsummer);
6560
var stdErrConsummer = new StreamGobbler(process.getErrorStream(), stderr -> LOG.error("[stderr] {}", stderr));
6661
stdErrConsummer.start();
6762
stdoutConsummer.start();
63+
if (input != null && process.isAlive()) {
64+
try (var stdin = process.getOutputStream(); var osw = new OutputStreamWriter(stdin, StandardCharsets.UTF_8)) {
65+
osw.write(input);
66+
}
67+
}
6868
var exitCode = process.waitFor();
6969
stdoutConsummer.join();
7070
stdErrConsummer.join();

lib/src/test/java/org/sonarsource/scanner/lib/internal/facade/forked/JavaRunnerTest.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,15 @@ void execute_shouldLogProcessStdError() {
5959
assertThat(logTester.logs(Level.ERROR)).isNotEmpty().allMatch(s -> s.startsWith("[stderr] "));
6060
}
6161

62+
@Test
63+
void execute_shouldLogProcessStdError_and_skip_writing_to_stdin_when_process_fails_early() {
64+
JavaRunner runner = new JavaRunner(Paths.get("java"), JreCacheHit.DISABLED);
65+
List<String> command = List.of("-xyz");
66+
assertThat(runner.execute(command, "test", stdOut::add)).isFalse();
67+
68+
assertThat(logTester.logs(Level.ERROR)).anyMatch(s -> s.startsWith("[stderr] Unrecognized option: -xyz"));
69+
}
70+
6271
@Test
6372
void execute_whenInvalidRunner_shouldFail() {
6473
JavaRunner runner = new JavaRunner(Paths.get("invalid-runner"), JreCacheHit.DISABLED);

0 commit comments

Comments
 (0)