[
https://issues.apache.org/jira/browse/SSHD-1303?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Thomas Wolf updated SSHD-1303:
------------------------------
Issue Type: Bug (was: Improvement)
> Keeping error streams and input streams separate after
> ChannelExec#setRedirectErrorStream(true) is called
> ---------------------------------------------------------------------------------------------------------
>
> Key: SSHD-1303
> URL: https://issues.apache.org/jira/browse/SSHD-1303
> Project: MINA SSHD
> Issue Type: Bug
> Affects Versions: 2.9.1
> Environment: Java 8
> Reporter: dgü
> Assignee: Thomas Wolf
> Priority: Major
> Fix For: 2.9.2
>
> Time Spent: 50m
> Remaining Estimate: 0h
>
> Hello!
> As I understand, if I call {_}ChannelExec#setRedirectErrorStream(true){_},
> then _ChannelExec#getInvertedErr()_ and _ChannelExec#getInvertedOut()_ return
> the same input stream.
> If I redirect error stream and read the error stream before the input stream,
> then the error stream returns the message even if there is an error or not,
> which is not expected.
> Here is the test case
> {code:java}
> BufferedReader input;
> String line;
>
> //process.getErrorStream() gets its value from
> ChannelExec#getInvertedErr()
> System.out.println("getErrorStream: " + process.getErrorStream());
> input = new BufferedReader(new
> InputStreamReader(process.getErrorStream()));
> while ((line = input.readLine()) != null) {
> System.out.println(line);
> }
> //process.getInputStream() gets its value from
> ChannelExec#getInvertedOut()
> System.out.println("getInputStream: " + process.getInputStream());
> input = new BufferedReader(new
> InputStreamReader(process.getInputStream()));
> while ((line = input.readLine()) != null) {
> System.out.println(line);
> }
> {code}
> Here is an output excerpt:
> {quote}getErrorStream:
> org.apache.sshd.common.channel.ChannelPipedInputStream@bd8db5a
> total 0
> drwx------. 3 root root 17 Oct 17 10:31
> systemd-private-c3ce924f90c24e4a86f637831f434fe3-chronyd.service-DwM2fR
> drwx------. 3 root root 17 Oct 14 13:22
> systemd-private-e0701fd845894b6087a236a976c00b35-chronyd.service-2z3OOv
> getInputStream: org.apache.sshd.common.channel.ChannelPipedInputStream@bd8db5a
> Exception in thread "main" java.io.IOException: Pipe closed after 0 cycles
> at
> org.apache.sshd.common.channel.ChannelPipedInputStream.read(ChannelPipedInputStream.java:126)
> at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)
> at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)
> at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
> at java.io.InputStreamReader.read(InputStreamReader.java:184)
> at java.io.BufferedReader.fill(BufferedReader.java:161)
> at java.io.BufferedReader.readLine(BufferedReader.java:324)
> at java.io.BufferedReader.readLine(BufferedReader.java:389)
> {quote}
> As seen above, _ls_ command output comes from the error stream even if the
> error redirection is set to _true_ and command runs {_}successfully{_}.
> The second problem is an exception problem. It is independent from the error
> stream redirection. I have openned SSHD-1302 for this.
> Requests:
> - Is it possible to make ChannelExec#getInvertedErr() and
> ChannelExec#getInvertedOut() two separate input streams ?
> - Is it possible to rely on java.lang.ProcessBuilder, so that the stream
> returned from error stream will always be a _null input stream_ as below from
> Java 8 source code:
> static class NullInputStream extends InputStream {
> static final NullInputStream INSTANCE = new NullInputStream();
> private NullInputStream() {}
> public int read() \{ return -1; }
> public int available()
> { return 0; }
> }
> Thanks in advance...
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]