summaryrefslogtreecommitdiff
path: root/ext/ftp
diff options
context:
space:
mode:
authorVille Hukkamaki <vhu@iki.fi>2018-08-24 22:49:53 +0200
committerNikita Popov <nikita.ppv@gmail.com>2018-09-04 04:53:38 +0200
commit742783c3ee4df424b5bd9130028951259ca52860 (patch)
treea03a2d5a842075d26e5b02a5a1796fa824760f4a /ext/ftp
parentf26172f9343cf49d62bbefff355bb76d6adf7ebe (diff)
downloadphp-git-742783c3ee4df424b5bd9130028951259ca52860.tar.gz
Fixed bug #73457
Correctly report errors when opening FTP data connection.
Diffstat (limited to 'ext/ftp')
-rw-r--r--ext/ftp/tests/server.inc44
1 files changed, 28 insertions, 16 deletions
diff --git a/ext/ftp/tests/server.inc b/ext/ftp/tests/server.inc
index 06c0d0d6db..2d4055f0d0 100644
--- a/ext/ftp/tests/server.inc
+++ b/ext/ftp/tests/server.inc
@@ -335,7 +335,7 @@ if ($pid) {
fputs($s, "550 No file named \"{$matches [1]}\"\r\n");
break;
}
- }elseif (preg_match('/^RETR ([\w\h]+)/', $buf, $matches)) {
+ }elseif (preg_match('/^RETR ([\/]*[\w\h]+)/', $buf, $matches)) {
if(!empty($pasv)){
;
}
@@ -391,6 +391,10 @@ if ($pid) {
fputs($fs, "This is line $i of the test data.\n");
}
fputs($s, "226 Closing data Connection.\r\n");
+ break;
+ case "/bug73457":
+ fputs($s, "150 File status okay; about to open data connection.\r\n");
+ break;
default:
fputs($s, "550 {$matches[1]}: No such file or directory \r\n");
@@ -405,29 +409,35 @@ if ($pid) {
$host = "127.0.0.1";
$i=0;
- do {
- if (!empty($ssl)) {
- $soc = @stream_socket_server("tcp://127.0.0.1:$pasv_port", $errno, $errstr, STREAM_SERVER_BIND|STREAM_SERVER_LISTEN, $context);
- } else {
- $soc = @stream_socket_server("tcp://127.0.0.1:$pasv_port");
- }
- /* Could bind port, Try another port */
+ if (empty($bug73457)) {
+ do {
+ if (!empty($ssl)) {
+ $soc = @stream_socket_server("tcp://127.0.0.1:$pasv_port", $errno, $errstr, STREAM_SERVER_BIND|STREAM_SERVER_LISTEN, $context);
+ } else {
+ $soc = @stream_socket_server("tcp://127.0.0.1:$pasv_port");
+ }
+ /* Could bind port, Try another port */
+ if (!$soc) {
+ $pasv_port = rand(50000, 65535);
+ }
+ $i++;
+ } while ($i<10 && !$soc);
+
if (!$soc) {
- $pasv_port = rand(50000, 65535);
+ echo "$errstr ($errno)\n";
+ die("could not bind passive port\n");
}
- $i++;
- } while ($i<10 && !$soc);
-
- if (!$soc) {
- echo "$errstr ($errno)\n";
- die("could not bind passive port\n");
+ } else {
+ $pasv_port=1234;
}
$p2 = $pasv_port % ((int) 1 << 8);
$p1 = ($pasv_port-$p2)/((int) 1 << 8);
fputs($s, "227 Entering Passive Mode. (127,0,0,1,{$p1},{$p2})\r\n");
- $pasvs = stream_socket_accept($soc,10);
+ if (empty($bug73457)) {
+ $pasvs = stream_socket_accept($soc,10);
+ }
} elseif (preg_match('/^EPSV/', $buf, $matches)) {
fputs($s, "550 Extended passsive mode not supported.\r\n");
@@ -455,6 +465,8 @@ if ($pid) {
fputs($s, "350 OK\r\n");
}elseif (preg_match('/^SIZE largefile/', $buf)) {
fputs($s, "213 5368709120\r\n");
+ }elseif (preg_match('/^SIZE \/bug73457/', $buf)) {
+ fputs($s, "213 10\r\n");
}else {
fputs($s, "500 Syntax error, command unrecognized.\r\n");
dump_and_exit($buf);