Tests: fix TYPE and RETR command handling.

- FTPServer.pm's handling of TYPE command would ignore binary mode
   transfer request.
 - The FTP server would run into dead loop sending the same content
   forever.

Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com>
This commit is contained in:
Yousong Zhou 2014-03-19 23:42:05 +08:00 committed by Giuseppe Scrivano
parent dfa1f4e064
commit 701e407af5
2 changed files with 12 additions and 5 deletions

View File

@ -1,3 +1,8 @@
2014-02-13 Yousong Zhou <yszhou4tech@gmail.com>
* FTPServer.pm: Fix the handling of TYPE command and avoid endless
loop when doing binary mode RETR.
2014-01-23 Lars Wendler <polynomial-c@gentoo.org> (tiny change)
* Test--post-file.px: Do not fail when wget has no debug support.

View File

@ -298,12 +298,13 @@ sub _RETR_command
# What mode are we sending this file in?
unless ($conn->{type} eq 'A') # Binary type.
{
my ($r, $buffer, $n, $w);
my ($r, $buffer, $n, $w, $sent);
# Copy data.
while ($buffer = substr($content, 0, 65536))
$sent = 0;
while ($sent < length($content))
{
$buffer = substr($content, $sent, 65536);
$r = length $buffer;
# Restart alarm clock timer.
@ -330,6 +331,7 @@ sub _RETR_command
print {$conn->{socket}} "426 Transfer aborted. Data connection closed.\r\n";
return;
}
$sent += $r;
}
# Cleanup and exit if there was an error.
@ -410,9 +412,9 @@ sub _TYPE_command
# See RFC 959 section 5.3.2.
if ($type =~ /^([AI])$/i) {
$conn->{type} = 'A';
$conn->{type} = $1;
} elsif ($type =~ /^([AI])\sN$/i) {
$conn->{type} = 'A';
$conn->{type} = $1;
} elsif ($type =~ /^L\s8$/i) {
$conn->{type} = 'L8';
} else {