PEAR is archived and read-only

This mirror preserves historical PEAR package releases and metadata so existing references remain available.

Home » Networking » Net_FTP » Bug #8102

Loading file extension and checking extension gives binary for ascii files

Details

Submitted2006-07-02 18:09 UTC
Fromroychri at php dot net
Assignedjorrit
StatusClosed
PackageNet_FTP
PHP Version4.3.11
OSMandrake Linux release 8.2 (Blue
Roadmaps1.3.3

Comments

[2006-07-02 18:09 UTC] roychri at php dot net

Description:
------------
I use getExtensionsFile() to load the ini file and then I use checkFileExtension() to determine the transfer mode based on the file extension.

The function getExtensionsFile() is assigning the ini file parsed into a variable called _file_extension but everywhere in the FTP.php uses _file_extensions. I think that's a simple typo mistake in FTP.php.

The function checkFileExtension() is using empty() to find out if that extension exists in the _file_extensions array but since the value is set to 0 for ascii, it thinks it's not in the in file and therefor return the default mode (binary).

The function checkFileExtension() regular expression assumes there's only one dot in the filename and therefor cannot extract the correct extension from the filename when it contains multiple dots.

To make it work, here are the changes I've made (patch format):

--- /usr/local/lib/php/Net/FTP.php~ Sat Jul 1 10:03:22 2006
+++ /usr/local/lib/php/Net/FTP.php Sun Jul 2 10:52:28 2006
@@ -1427,7 +1427,7 @@

function checkFileExtension($filename)
{
- $pattern = "/\.(.*)$/";
+ $pattern = "/\.([^\.]+)$/";
$has_extension = preg_match($pattern, $filename, $eregs);
if (!$has_extension) {
return $this->_mode;
@@ -1435,7 +1435,7 @@
$ext = $eregs[1];
}

- if (!empty($this->_file_extensions[$ext])) {
+ if (isset($this->_file_extensions[$ext])) {
return $this->_file_extensions[$ext];
}

@@ -1642,7 +1642,7 @@
return $this->raiseError("Extensions-file '$filename' is not readable", NET_FTP_ERR_EXTFILEREAD_FAILED);
}

- $this->_file_extension = @parse_ini_file($filename);
+ $this->_file_extensions = @parse_ini_file($filename);
return true;
}

I hope this helps. Let me know if you need any more info.

Thanks.

-- christian roy

Test script:
---------------
$ftp =& new Net_FTP();
$loaded = $ftp->getExtensionsFile($path_to_ext_file."extensions.ini");
$type = $ftp->checkFileExtension("index.html");
print "index.html: type = $type\n";
$type = $ftp->checkFileExtension("www.google.com.html");
print "www.google.com.html: type = $type\n";

Expected result:
----------------
index.html: type = 0
www.google.com.html: type = 0

Actual result:
--------------
index.html: type = 1
www.google.com.html: type = 1