[ 
https://issues.apache.org/jira/browse/SSHD-1303?focusedWorklogId=818906&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-818906
 ]

ASF GitHub Bot logged work on SSHD-1303:
----------------------------------------

                Author: ASF GitHub Bot
            Created on: 20/Oct/22 19:06
            Start Date: 20/Oct/22 19:06
    Worklog Time Spent: 10m 
      Work Description: tomaswolf opened a new pull request, #255:
URL: https://github.com/apache/mina-sshd/pull/255

   If a channel's error stream has been redirected to the output stream, return 
null streams from getAsyncErr() and getInvertedErr(). Since they are 
redirected, application code should never see any data on them.
   
   Also document the IoReadFuture better, and change the single implementation 
of that interface to match. While the future is not done, operations return 
null or zero. EOF is signaled by getRead() == -1, or getException() returning 
an EOFException.




Issue Time Tracking
-------------------

            Worklog Id:     (was: 818906)
    Remaining Estimate: 0h
            Time Spent: 10m

> 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: Improvement
>    Affects Versions: 2.9.1
>         Environment: Java 8
>            Reporter: dgü
>            Priority: Major
>          Time Spent: 10m
>  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: dev-unsubscr...@mina.apache.org
For additional commands, e-mail: dev-h...@mina.apache.org

Reply via email to