JIRA created:

https://issues.apache.org/jira/browse/CAMEL-6335

/Bengt


2013/5/6 Bengt Rodehav <be...@rodehav.com>

> Hello Hadrian,
>
> I'm not really interested in the blame issue. I'm really glad that there
> are so many competent people developing Camel which I think is a great
> product. It might be interesting, though, to see how long the bug has been
> there and what versions are affected.
>
> I've also been thinking why it hasn't been picked up by any tests. I
> realize that it must be very difficult to design tests for integration
> components like sftp. Ideally you would have a number of ftp/ftps/sftp
> servers to perform integration tests against. But I guess that is hard to
> maintain. I don't think unit tests (with mocking) will catch bugs like the
> above. How are ftp/ftps/sftp integrations tested?
>
> I have noticed that some sftp servers silently ignore attempts to change
> directory to a non-existing directory - you won't get there but you won't
> get an error code either. But some will give you an error code (like the
> one we are integrating to right now).
>
> I will create a JIRA. As for patching I guess the most important part is
> to determine if it is necessary to change back to the home directory in a
> stepwise fashion or not. If not, then I think we can just remove that code.
> If it is necessary, then we must instead fix it.
>
> /Bengt
>
>
>
> 2013/5/3 Hadrian Zbarcea <hzbar...@gmail.com>
>
>> Bengt, many thanks for reporting this.
>>
>> Either svn or git tells you pretty quickly how that code got there (git
>> blame). Do you mind raising a jira for this embarrassing bug? If you want
>> to contribute a patch it'd be highly appreciated. That aside, I'll look
>> into it in the afternoon. I'll need to check if that piece of code was
>> meant to address another usecase or was an oversight and insufficient
>> testing.
>>
>> Cheers,
>> Hadrian
>>
>>
>>
>> On 05/03/2013 10:35 AM, Bengt Rodehav wrote:
>>
>>> Unfortunately I seem to have found another bug in Camel 2.11.0 regarding
>>> sftp. I noticed it when I removed the "stepwise=false" argument from my
>>> routes thus enabling the default stepwise way of changing directory.
>>>
>>> The problematic section begins at line 404 in SftpOperations.java:
>>>
>>> *404:*        if (getCurrentDirectory().**startsWith(path)) {
>>> *405:*            // use relative path
>>> *406:*            String p = getCurrentDirectory().**
>>> substring(path.length());
>>> *407:*            if (p.length() == 0) {
>>> *408:*                return;
>>> *409:*            }
>>> *410:*            // the first character must be '/' and hence removed
>>> *411:*            path =
>>> UP_DIR_PATTERN.matcher(p).**replaceAll("/..").substring(1)**;
>>> *412:*        }
>>>
>>>
>>>
>>> The problem does not arise when stepping down into the directory to poll
>>> but when going back to the directory where we started. Assume that the
>>> home
>>> directory in the sftp server is "/" and I want to poll the directory "in"
>>> relative to the root. My endpoint would look something like this:
>>>
>>>    sftp://user@server/in?**password=secret
>>>
>>> What happens is that the "i" in "in" is removed and Camel attempts to
>>> change to directory "n". Looking at the code above, the following
>>> happens:
>>>
>>> - The current directory is "/in" since we have previously succeeded in
>>> moving there and polling for files. We are now attempting to go back to
>>> where we started, therefore "path" is "/".
>>> - On line 406, the variable "p" will be set to "in", thus removing the
>>> leading "/".
>>> - On line 411 an incorrect assumption is made: It is assumed that the
>>> first
>>> character must be "/" but the leading "/" was removed on line 406. The
>>> result is therefore that "path" is set to "n" instead of "in".
>>>
>>> I haven't investigated when this error was introduced. I did however
>>> compare with the corresponding logic in FtpOperations.java. In that file
>>> the section quoted above does not exist at all. It seems to me that the
>>> purpose with this code is to, stepwise, change directory up to ".." - one
>>> directory at a time instead of going straight to "/". It seems very
>>> unnecessary to me but I assume there is a reason for it. Otherwise, the
>>> easiest change would be to just remove the code above and use the same
>>> logic as in FtpOperations.java.
>>>
>>> Currently my only workaround is to use "stepwise=false".
>>>
>>> /Bengt
>>>
>>>
>

Reply via email to