mirror of
https://github.com/mirror/wget.git
synced 2025-03-25 17:20:13 +08:00
Fix double free in FTP Code
* src/ftp.c(getftp): Don't free `target`. If it is not pointing to targetbuf, then it still pointing to its original location of u->dir. This location will be free'd later. Doing so now causes a double free and hence crashes Wget * tests/Test-ftp-dir.px: New test to show double free error * tests/Makefile.am: Add new test
This commit is contained in:
parent
51ee45f017
commit
f7835691b4
@ -992,9 +992,6 @@ Error in server response, closing control connection.\n"));
|
||||
|
||||
/* 2004-09-20 SMS. */
|
||||
|
||||
if (target != targetbuf)
|
||||
xfree (target);
|
||||
|
||||
} /* else */
|
||||
}
|
||||
else /* do not CWD */
|
||||
|
@ -58,6 +58,7 @@ PX_TESTS = \
|
||||
Test-E-k-K.px \
|
||||
Test-E-k.px \
|
||||
Test-ftp.px \
|
||||
Test-ftp-dir.px \
|
||||
Test-ftp-pasv-fail.px \
|
||||
Test-ftp-bad-list.px \
|
||||
Test-ftp-recursive.px \
|
||||
|
44
tests/Test-ftp-dir.px
Executable file
44
tests/Test-ftp-dir.px
Executable file
@ -0,0 +1,44 @@
|
||||
#!/usr/bin/env perl
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use FTPTest;
|
||||
|
||||
|
||||
###############################################################################
|
||||
|
||||
my $afile = <<EOF;
|
||||
Some text.
|
||||
EOF
|
||||
|
||||
$afile =~ s/\n/\r\n/;
|
||||
|
||||
|
||||
# code, msg, headers, content
|
||||
my %urls = (
|
||||
'/dir/afile.txt' => {
|
||||
content => $afile,
|
||||
},
|
||||
);
|
||||
|
||||
my $cmdline = $WgetTest::WGETPATH . " -S ftp://localhost:{{port}}//dir/afile.txt";
|
||||
|
||||
my $expected_error_code = 0;
|
||||
|
||||
my %expected_downloaded_files = (
|
||||
'afile.txt' => {
|
||||
content => $afile,
|
||||
},
|
||||
);
|
||||
|
||||
###############################################################################
|
||||
|
||||
my $the_test = FTPTest->new (
|
||||
input => \%urls,
|
||||
cmdline => $cmdline,
|
||||
errcode => $expected_error_code,
|
||||
output => \%expected_downloaded_files);
|
||||
exit $the_test->run();
|
||||
|
||||
# vim: et ts=4 sw=4
|
Loading…
Reference in New Issue
Block a user