Filesystem API: Return false for empty paths in FTP ::exists() methods.

When `ftp_nlist()` receives an empty path, it checks the current working directory and may return `true`.

This affects:
* `WP_Filesystem_FTPext::exists()`
* `WP_Filesystem_ftpsockets::exists()`

As the purpose of the API is to provide a consistent interface for various filesystem implementations, this commit updates the affected methods to returns `false` when an empty path is provided, bringing consistency with the other filesystem abstraction classes, specifically `WP_Filesystem_Direct` and `WP_Filesystem_SSH2`.

Follow-up to [6779], [11821], [25274], [31815].

Props mkox, costdev, Zdrobau, dd32, pbiron, azaozz, mukesh27, SergeyBiryukov.
Fixes #33058.

git-svn-id: https://develop.svn.wordpress.org/trunk@55556 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Sergey Biryukov 2023-03-16 16:12:51 +00:00
parent f2028e108e
commit afbb9ef0e3
2 changed files with 22 additions and 0 deletions

View File

@ -419,11 +419,22 @@ class WP_Filesystem_FTPext extends WP_Filesystem_Base {
* Checks if a file or directory exists.
*
* @since 2.5.0
* @since 6.3.0 Returns false for an empty path.
*
* @param string $path Path to file or directory.
* @return bool Whether $path exists or not.
*/
public function exists( $path ) {
/*
* Check for empty path. If ftp_nlist() receives an empty path,
* it checks the current working directory and may return true.
*
* See https://core.trac.wordpress.org/ticket/33058.
*/
if ( '' === $path ) {
return false;
}
$list = ftp_nlist( $this->link, $path );
if ( empty( $list ) && $this->is_dir( $path ) ) {

View File

@ -421,11 +421,22 @@ class WP_Filesystem_ftpsockets extends WP_Filesystem_Base {
* Checks if a file or directory exists.
*
* @since 2.5.0
* @since 6.3.0 Returns false for an empty path.
*
* @param string $path Path to file or directory.
* @return bool Whether $path exists or not.
*/
public function exists( $path ) {
/*
* Check for empty path. If ftp::nlist() receives an empty path,
* it checks the current working directory and may return true.
*
* See https://core.trac.wordpress.org/ticket/33058.
*/
if ( '' === $path ) {
return false;
}
$list = $this->ftp->nlist( $path );
if ( empty( $list ) && $this->is_dir( $path ) ) {