mirror of
https://github.com/php/php-src.git
synced 2025-08-16 05:58:45 +02:00
Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4: Fix #79100: Wrong FTP error messages
This commit is contained in:
commit
c2a06f5d9a
5 changed files with 112 additions and 42 deletions
1
NEWS
1
NEWS
|
@ -11,6 +11,7 @@ PHP NEWS
|
|||
|
||||
- FTP:
|
||||
. Fixed bug #80901 (Info leak in ftp extension). (cmb)
|
||||
. Fixed bug #79100 (Wrong FTP error messages). (cmb)
|
||||
|
||||
- ODBC:
|
||||
. Fixed bug #80460 (ODBC doesn't account for SQL_NO_TOTAL indicator). (cmb)
|
||||
|
|
|
@ -59,6 +59,11 @@
|
|||
#include "ftp.h"
|
||||
#include "ext/standard/fsock.h"
|
||||
|
||||
#ifdef PHP_WIN32
|
||||
# undef ETIMEDOUT
|
||||
# define ETIMEDOUT WSAETIMEDOUT
|
||||
#endif
|
||||
|
||||
/* sends an ftp command, returns true on success, false on error.
|
||||
* it sends the string "cmd args\r\n" if args is non-null, or
|
||||
* "cmd\r\n" if args is null
|
||||
|
@ -1260,7 +1265,8 @@ ftp_putcmd(ftpbuf_t *ftp, const char *cmd, const size_t cmd_len, const char *arg
|
|||
|
||||
data = ftp->outbuf;
|
||||
|
||||
/* Clear the extra-lines buffer */
|
||||
/* Clear the inbuf and extra-lines buffer */
|
||||
ftp->inbuf[0] = '\0';
|
||||
ftp->extra = NULL;
|
||||
|
||||
if (my_send(ftp, ftp->fd, data, size) != size) {
|
||||
|
@ -1430,15 +1436,15 @@ my_send(ftpbuf_t *ftp, php_socket_t s, void *buf, size_t len)
|
|||
n = php_pollfd_for_ms(s, POLLOUT, ftp->timeout_sec * 1000);
|
||||
|
||||
if (n < 1) {
|
||||
char buf[256];
|
||||
if (n == 0) {
|
||||
#ifdef PHP_WIN32
|
||||
if (n == 0) {
|
||||
_set_errno(ETIMEDOUT);
|
||||
}
|
||||
#else
|
||||
if (n == 0) {
|
||||
errno = ETIMEDOUT;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
php_error_docref(NULL, E_WARNING, "%s", php_socket_strerror(errno, buf, sizeof buf));
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -1466,18 +1472,17 @@ my_recv(ftpbuf_t *ftp, php_socket_t s, void *buf, size_t len)
|
|||
SSL *handle = NULL;
|
||||
php_socket_t fd;
|
||||
#endif
|
||||
|
||||
n = php_pollfd_for_ms(s, PHP_POLLREADABLE, ftp->timeout_sec * 1000);
|
||||
if (n < 1) {
|
||||
char buf[256];
|
||||
if (n == 0) {
|
||||
#ifdef PHP_WIN32
|
||||
if (n == 0) {
|
||||
_set_errno(ETIMEDOUT);
|
||||
}
|
||||
#else
|
||||
if (n == 0) {
|
||||
errno = ETIMEDOUT;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
php_error_docref(NULL, E_WARNING, "%s", php_socket_strerror(errno, buf, sizeof buf));
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -1543,15 +1548,15 @@ data_available(ftpbuf_t *ftp, php_socket_t s)
|
|||
|
||||
n = php_pollfd_for_ms(s, PHP_POLLREADABLE, 1000);
|
||||
if (n < 1) {
|
||||
char buf[256];
|
||||
if (n == 0) {
|
||||
#ifdef PHP_WIN32
|
||||
if (n == 0) {
|
||||
_set_errno(ETIMEDOUT);
|
||||
}
|
||||
#else
|
||||
if (n == 0) {
|
||||
errno = ETIMEDOUT;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
php_error_docref(NULL, E_WARNING, "%s", php_socket_strerror(errno, buf, sizeof buf));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1566,15 +1571,15 @@ data_writeable(ftpbuf_t *ftp, php_socket_t s)
|
|||
|
||||
n = php_pollfd_for_ms(s, POLLOUT, 1000);
|
||||
if (n < 1) {
|
||||
char buf[256];
|
||||
if (n == 0) {
|
||||
#ifdef PHP_WIN32
|
||||
if (n == 0) {
|
||||
_set_errno(ETIMEDOUT);
|
||||
}
|
||||
#else
|
||||
if (n == 0) {
|
||||
errno = ETIMEDOUT;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
php_error_docref(NULL, E_WARNING, "%s", php_socket_strerror(errno, buf, sizeof buf));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1590,15 +1595,15 @@ my_accept(ftpbuf_t *ftp, php_socket_t s, struct sockaddr *addr, socklen_t *addrl
|
|||
|
||||
n = php_pollfd_for_ms(s, PHP_POLLREADABLE, ftp->timeout_sec * 1000);
|
||||
if (n < 1) {
|
||||
char buf[256];
|
||||
if (n == 0) {
|
||||
#ifdef PHP_WIN32
|
||||
if (n == 0) {
|
||||
_set_errno(ETIMEDOUT);
|
||||
}
|
||||
#else
|
||||
if (n == 0) {
|
||||
errno = ETIMEDOUT;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
php_error_docref(NULL, E_WARNING, "%s", php_socket_strerror(errno, buf, sizeof buf));
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
|
|
@ -200,7 +200,9 @@ PHP_FUNCTION(ftp_login)
|
|||
|
||||
/* log in */
|
||||
if (!ftp_login(ftp, user, user_len, pass, pass_len)) {
|
||||
php_error_docref(NULL, E_WARNING, "%s", ftp->inbuf);
|
||||
if (*ftp->inbuf) {
|
||||
php_error_docref(NULL, E_WARNING, "%s", ftp->inbuf);
|
||||
}
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
|
@ -224,7 +226,9 @@ PHP_FUNCTION(ftp_pwd)
|
|||
}
|
||||
|
||||
if (!(pwd = ftp_pwd(ftp))) {
|
||||
php_error_docref(NULL, E_WARNING, "%s", ftp->inbuf);
|
||||
if (*ftp->inbuf) {
|
||||
php_error_docref(NULL, E_WARNING, "%s", ftp->inbuf);
|
||||
}
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
|
@ -247,7 +251,9 @@ PHP_FUNCTION(ftp_cdup)
|
|||
}
|
||||
|
||||
if (!ftp_cdup(ftp)) {
|
||||
php_error_docref(NULL, E_WARNING, "%s", ftp->inbuf);
|
||||
if (*ftp->inbuf) {
|
||||
php_error_docref(NULL, E_WARNING, "%s", ftp->inbuf);
|
||||
}
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
|
@ -273,7 +279,9 @@ PHP_FUNCTION(ftp_chdir)
|
|||
|
||||
/* change directories */
|
||||
if (!ftp_chdir(ftp, dir, dir_len)) {
|
||||
php_error_docref(NULL, E_WARNING, "%s", ftp->inbuf);
|
||||
if (*ftp->inbuf) {
|
||||
php_error_docref(NULL, E_WARNING, "%s", ftp->inbuf);
|
||||
}
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
|
@ -299,7 +307,9 @@ PHP_FUNCTION(ftp_exec)
|
|||
|
||||
/* execute serverside command */
|
||||
if (!ftp_exec(ftp, cmd, cmd_len)) {
|
||||
php_error_docref(NULL, E_WARNING, "%s", ftp->inbuf);
|
||||
if (*ftp->inbuf) {
|
||||
php_error_docref(NULL, E_WARNING, "%s", ftp->inbuf);
|
||||
}
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
|
@ -347,7 +357,9 @@ PHP_FUNCTION(ftp_mkdir)
|
|||
|
||||
/* create directory */
|
||||
if (NULL == (tmp = ftp_mkdir(ftp, dir, dir_len))) {
|
||||
php_error_docref(NULL, E_WARNING, "%s", ftp->inbuf);
|
||||
if (*ftp->inbuf) {
|
||||
php_error_docref(NULL, E_WARNING, "%s", ftp->inbuf);
|
||||
}
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
|
@ -373,7 +385,9 @@ PHP_FUNCTION(ftp_rmdir)
|
|||
|
||||
/* remove directorie */
|
||||
if (!ftp_rmdir(ftp, dir, dir_len)) {
|
||||
php_error_docref(NULL, E_WARNING, "%s", ftp->inbuf);
|
||||
if (*ftp->inbuf) {
|
||||
php_error_docref(NULL, E_WARNING, "%s", ftp->inbuf);
|
||||
}
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
|
@ -399,7 +413,9 @@ PHP_FUNCTION(ftp_chmod)
|
|||
}
|
||||
|
||||
if (!ftp_chmod(ftp, mode, filename, filename_len)) {
|
||||
php_error_docref(NULL, E_WARNING, "%s", ftp->inbuf);
|
||||
if (*ftp->inbuf) {
|
||||
php_error_docref(NULL, E_WARNING, "%s", ftp->inbuf);
|
||||
}
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
|
@ -548,7 +564,9 @@ PHP_FUNCTION(ftp_systype)
|
|||
}
|
||||
|
||||
if (NULL == (syst = ftp_syst(ftp))) {
|
||||
php_error_docref(NULL, E_WARNING, "%s", ftp->inbuf);
|
||||
if (*ftp->inbuf) {
|
||||
php_error_docref(NULL, E_WARNING, "%s", ftp->inbuf);
|
||||
}
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
|
@ -593,7 +611,9 @@ PHP_FUNCTION(ftp_fget)
|
|||
}
|
||||
|
||||
if (!ftp_get(ftp, stream, file, file_len, xtype, resumepos)) {
|
||||
php_error_docref(NULL, E_WARNING, "%s", ftp->inbuf);
|
||||
if (*ftp->inbuf) {
|
||||
php_error_docref(NULL, E_WARNING, "%s", ftp->inbuf);
|
||||
}
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
|
@ -642,7 +662,9 @@ PHP_FUNCTION(ftp_nb_fget)
|
|||
ftp->closestream = 0; /* do not close */
|
||||
|
||||
if ((ret = ftp_nb_get(ftp, stream, file, file_len, xtype, resumepos)) == PHP_FTP_FAILED) {
|
||||
php_error_docref(NULL, E_WARNING, "%s", ftp->inbuf);
|
||||
if (*ftp->inbuf) {
|
||||
php_error_docref(NULL, E_WARNING, "%s", ftp->inbuf);
|
||||
}
|
||||
RETURN_LONG(ret);
|
||||
}
|
||||
|
||||
|
@ -728,7 +750,9 @@ PHP_FUNCTION(ftp_get)
|
|||
if (!ftp_get(ftp, outstream, remote, remote_len, xtype, resumepos)) {
|
||||
php_stream_close(outstream);
|
||||
VCWD_UNLINK(local);
|
||||
php_error_docref(NULL, E_WARNING, "%s", ftp->inbuf);
|
||||
if (*ftp->inbuf) {
|
||||
php_error_docref(NULL, E_WARNING, "%s", ftp->inbuf);
|
||||
}
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
|
@ -796,7 +820,9 @@ PHP_FUNCTION(ftp_nb_get)
|
|||
php_stream_close(outstream);
|
||||
ftp->stream = NULL;
|
||||
VCWD_UNLINK(local);
|
||||
php_error_docref(NULL, E_WARNING, "%s", ftp->inbuf);
|
||||
if (*ftp->inbuf) {
|
||||
php_error_docref(NULL, E_WARNING, "%s", ftp->inbuf);
|
||||
}
|
||||
RETURN_LONG(PHP_FTP_FAILED);
|
||||
}
|
||||
|
||||
|
@ -888,7 +914,9 @@ PHP_FUNCTION(ftp_fput)
|
|||
}
|
||||
|
||||
if (!ftp_put(ftp, remote, remote_len, stream, xtype, startpos)) {
|
||||
php_error_docref(NULL, E_WARNING, "%s", ftp->inbuf);
|
||||
if (*ftp->inbuf) {
|
||||
php_error_docref(NULL, E_WARNING, "%s", ftp->inbuf);
|
||||
}
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
|
@ -941,7 +969,9 @@ PHP_FUNCTION(ftp_nb_fput)
|
|||
ftp->closestream = 0; /* do not close */
|
||||
|
||||
if (((ret = ftp_nb_put(ftp, remote, remote_len, stream, xtype, startpos)) == PHP_FTP_FAILED)) {
|
||||
php_error_docref(NULL, E_WARNING, "%s", ftp->inbuf);
|
||||
if (*ftp->inbuf) {
|
||||
php_error_docref(NULL, E_WARNING, "%s", ftp->inbuf);
|
||||
}
|
||||
RETURN_LONG(ret);
|
||||
}
|
||||
|
||||
|
@ -994,7 +1024,9 @@ PHP_FUNCTION(ftp_put)
|
|||
|
||||
if (!ftp_put(ftp, remote, remote_len, instream, xtype, startpos)) {
|
||||
php_stream_close(instream);
|
||||
php_error_docref(NULL, E_WARNING, "%s", ftp->inbuf);
|
||||
if (*ftp->inbuf) {
|
||||
php_error_docref(NULL, E_WARNING, "%s", ftp->inbuf);
|
||||
}
|
||||
RETURN_FALSE;
|
||||
}
|
||||
php_stream_close(instream);
|
||||
|
@ -1029,7 +1061,9 @@ PHP_FUNCTION(ftp_append)
|
|||
|
||||
if (!ftp_append(ftp, remote, remote_len, instream, xtype)) {
|
||||
php_stream_close(instream);
|
||||
php_error_docref(NULL, E_WARNING, "%s", ftp->inbuf);
|
||||
if (*ftp->inbuf) {
|
||||
php_error_docref(NULL, E_WARNING, "%s", ftp->inbuf);
|
||||
}
|
||||
RETURN_FALSE;
|
||||
}
|
||||
php_stream_close(instream);
|
||||
|
@ -1159,7 +1193,9 @@ PHP_FUNCTION(ftp_rename)
|
|||
|
||||
/* rename the file */
|
||||
if (!ftp_rename(ftp, src, src_len, dest, dest_len)) {
|
||||
php_error_docref(NULL, E_WARNING, "%s", ftp->inbuf);
|
||||
if (*ftp->inbuf) {
|
||||
php_error_docref(NULL, E_WARNING, "%s", ftp->inbuf);
|
||||
}
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
|
@ -1185,7 +1221,9 @@ PHP_FUNCTION(ftp_delete)
|
|||
|
||||
/* delete the file */
|
||||
if (!ftp_delete(ftp, file, file_len)) {
|
||||
php_error_docref(NULL, E_WARNING, "%s", ftp->inbuf);
|
||||
if (*ftp->inbuf) {
|
||||
php_error_docref(NULL, E_WARNING, "%s", ftp->inbuf);
|
||||
}
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
|
@ -1211,7 +1249,9 @@ PHP_FUNCTION(ftp_site)
|
|||
|
||||
/* send the site command */
|
||||
if (!ftp_site(ftp, cmd, cmd_len)) {
|
||||
php_error_docref(NULL, E_WARNING, "%s", ftp->inbuf);
|
||||
if (*ftp->inbuf) {
|
||||
php_error_docref(NULL, E_WARNING, "%s", ftp->inbuf);
|
||||
}
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
|
|
22
ext/ftp/tests/bug79100.phpt
Normal file
22
ext/ftp/tests/bug79100.phpt
Normal file
|
@ -0,0 +1,22 @@
|
|||
--TEST--
|
||||
Bug #79100 (Wrong FTP error messages)
|
||||
--SKIPIF--
|
||||
<?php
|
||||
require 'skipif.inc';
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
$bug79100 = true;
|
||||
require 'server.inc';
|
||||
|
||||
$ftp = ftp_connect("127.0.0.1", $port);
|
||||
if (!$ftp) die("Couldn't connect to the server");
|
||||
var_dump(ftp_login($ftp, 'user', 'pass'));
|
||||
var_dump(ftp_set_option($ftp, FTP_TIMEOUT_SEC, 1));
|
||||
ftp_systype($ftp);
|
||||
?>
|
||||
--EXPECTF--
|
||||
bool(true)
|
||||
bool(true)
|
||||
|
||||
Warning: ftp_systype(): %rConnection|Operation%r timed out in %s on line %d
|
|
@ -198,6 +198,8 @@ if ($pid) {
|
|||
} elseif ($buf === "SYST\r\n") {
|
||||
if (isset($bug27809)) {
|
||||
fputs($s, "215 OS/400 is the remote operating system. The TCP/IP version is \"V5R2M0\"\r\n");
|
||||
} elseif (isset($bug79100)) {
|
||||
// do nothing so test hits timeout
|
||||
} elseif (isset($bug80901)) {
|
||||
fputs($s, "\r\n" . str_repeat("*", 4096) . "\r\n");
|
||||
} else {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue