[BUGFIX] Shell command arguments are not escaped
authorDmitry Dulepov <dmitry@typo3.org>
Mon, 21 Nov 2011 14:54:52 +0000 (16:54 +0200)
committerSteffen Ritter <info@rs-websystems.de>
Wed, 7 Mar 2012 19:39:37 +0000 (20:39 +0100)
Shell command arguments should be escaped with escapeshellarg()
PHP function, which adds single quotes around the argument and
escapes all single quotes inside the argument.

Change-Id: I4fb655e6496e1d0f09d6386831daa8d2f7a95351
Resolves: #31278
Releases: 4.7, 4.6, 4.5
Reviewed-on: http://review.typo3.org/6779
Reviewed-by: Oliver Hader
Reviewed-by: Tolleiv Nietsch
Tested-by: Tolleiv Nietsch
Reviewed-by: Andy Grunwald
Reviewed-by: Wouter Wolters
Reviewed-by: Steffen Ritter
Tested-by: Steffen Ritter
t3lib/class.t3lib_extfilefunc.php

index 18e5ba7..139aaa1 100644 (file)
@@ -494,7 +494,7 @@ class t3lib_extFileFunctions extends t3lib_basicFileFunctions {
                        if ($this->PHPFileFunctions) {
                                copy($theFile, $theDestFile);
                        } else {
-                               $cmd = 'cp "' . $theFile . '" "' . $theDestFile . '"';
+                               $cmd = 'cp ' . escapeshellarg($theFile) . ' ' . escapeshellarg($theDestFile);
                                t3lib_utility_Command::exec($cmd);
                        }
                        t3lib_div::fixPermissions($theDestFile);
@@ -543,7 +543,7 @@ class t3lib_extFileFunctions extends t3lib_basicFileFunctions {
                                return FALSE;
                        }
                                // No way to do this under windows!
-                       $cmd = 'cp -R "' . $theFile . '" "' . $theDestFile . '"';
+                       $cmd = 'cp -R ' . escapeshellarg($theFile) . ' ' . escapeshellarg($theDestFile);
                        t3lib_utility_Command::exec($cmd);
                        clearstatcache();
                        if (@is_dir($theDestFile)) {
@@ -616,7 +616,7 @@ class t3lib_extFileFunctions extends t3lib_basicFileFunctions {
                        if ($this->PHPFileFunctions) {
                                @rename($theFile, $theDestFile);
                        } else {
-                               $cmd = 'mv "' . $theFile . '" "' . $theDestFile . '"';
+                               $cmd = 'mv ' . escapeshellarg($theFile) . ' ' . escapeshellarg($theDestFile);
                                t3lib_utility_Command::exec($cmd);
                        }
                        clearstatcache();
@@ -665,7 +665,7 @@ class t3lib_extFileFunctions extends t3lib_basicFileFunctions {
                        if ($this->PHPFileFunctions) {
                                @rename($theFile, $theDestFile);
                        } else {
-                               $cmd = 'mv "' . $theFile . '" "' . $theDestFile . '"';
+                               $cmd = 'mv ' . escapeshellarg($theFile) . ' ' . escapeshellarg($theDestFile);
                                $errArr = array();
                                t3lib_utility_Command::exec($cmd, $errArr);
                        }
@@ -1009,7 +1009,7 @@ class t3lib_extFileFunctions extends t3lib_basicFileFunctions {
                }
                if ($this->checkPathAgainstMounts($theFile) && $this->checkPathAgainstMounts($theDest . '/')) {
                                // No way to do this under windows.
-                       $cmd = $this->unzipPath . 'unzip -qq "' . $theFile . '" -d "' . $theDest . '"';
+                       $cmd = $this->unzipPath . 'unzip -qq ' . escapeshellarg($theFile) . ' -d ' . escapeshellarg($theDest);
                        t3lib_utility_Command::exec($cmd);
                        $this->writelog(7, 0, 1, 'Unzipping file "%s" in "%s"', array($theFile, $theDest));
                        return TRUE;
@@ -1024,4 +1024,4 @@ if (defined('TYPO3_MODE') && isset($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLA
        include_once($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['t3lib/class.t3lib_extfilefunc.php']);
 }
 
-?>
\ No newline at end of file
+?>