mina-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Chris Lowe (JIRA)" <j...@apache.org>
Subject [jira] [Created] (SSHD-133) E command not handled for single file upload
Date Sun, 05 Jun 2011 11:20:47 GMT
E command not handled for single file upload
--------------------------------------------

                 Key: SSHD-133
                 URL: https://issues.apache.org/jira/browse/SSHD-133
             Project: MINA SSHD
          Issue Type: Bug
            Reporter: Chris Lowe


Using the Ganymed SSH2 client (build 210 from here http://www.ganymed.ethz.ch/ssh2/) uploading
a file to an instance of Mina SSHD causes the following exception:

java.io.IOException: Expected a C message but got 'E'
	at org.apache.sshd.server.command.ScpCommand.writeFile(ScpCommand.java:299)
	at org.apache.sshd.server.command.ScpCommand.run(ScpCommand.java:174)
	at java.lang.Thread.run(Thread.java:662)

Further investigation into the issue reveals that the Ganymed client ends the C command sequence
with an E command.  Looking at the code for ScpCommand run() method I notice the following
switch statement:

                    switch (c)
                    {
                        case -1:
                            return;
                        case 'D':
                            isDir = true;
                        case 'C':
                        case 'E':
                            line = ((char) c) + readLine();
                            break;
                        default:
                            //a real ack that has been acted upon already
                            continue;
                    }

The E command is part of the fall through for C and D command where the respective handlers
for these commands assert that a command is either a C or D.  If either of these handlers
receive an E then an exception is raised.

Changing the switch statement to prevent the E from reaching the writeFile or writeDir as
follows remedies the issue for me:

                    switch (c)
                    {
                        case -1:
                            return;
                        case 'D':
                            isDir = true;
                        case 'C':
                            line = ((char) c) + readLine();
                            break;
                        case 'E':
                            readLine(); // consume remainder of line
                            return;
                        default:
                            //a real ack that has been acted upon already
                            continue;
                    }

I'm using a version compiled from the current SVN head revision 1132372

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

Mime
View raw message