WordPress.org

Make WordPress Core

Ticket #8210: ssh2.dash_and_shell.patch

File ssh2.dash_and_shell.patch, 3.7 KB (added by t.baboon, 5 years ago)
  • wp-admin/includes/class-wp-filesystem-ssh2.php

     
    217217                return $ret; 
    218218        } 
    219219 
     220        function escape_dot($str) { 
     221                if (substr($str, 0, 1) != '/') # not an absolute path 
     222                        $str = "./$str"; # assumes that "/" separates directories 
     223                $str = escapeshellarg($str); 
     224                return $str; 
     225        } 
     226 
    220227        function cwd() { 
    221228                $this->debug("cwd();"); 
    222229                $cwd = $this->run_command($this->link, 'pwd'); 
     
    227234 
    228235        function chdir($dir) { 
    229236                $this->debug("chdir();"); 
    230                 return $this->run_command($this->link, 'cd ' . $dir, true); 
     237                return $this->run_command($this->link, 'cd ' . escape_dot($dir), true); 
    231238        } 
    232239 
    233240        function chgrp($file, $group, $recursive = false ) { 
     
    235242                if ( ! $this->exists($file) ) 
    236243                        return false; 
    237244                if ( ! $recursive || ! $this->is_dir($file) ) 
    238                         return $this->run_command($this->link, sprintf('chgrp %o %s', $mode, $file), true); 
    239                 return $this->run_command($this->link, sprintf('chgrp -R %o %s', $mode, $file), true); 
     245                        return $this->run_command($this->link, sprintf('chgrp %o %s', $mode, escape_dot($file)), true); 
     246                return $this->run_command($this->link, sprintf('chgrp -R %o %s', $mode, escape_dot($file)), true); 
    240247        } 
    241248 
    242249        function chmod($file, $mode = false, $recursive = false) { 
     
    248255                if ( ! $this->exists($file) ) 
    249256                        return false; 
    250257                if ( ! $recursive || ! $this->is_dir($file) ) 
    251                         return $this->run_command($this->link, sprintf('chmod %o %s', $mode, $file), true); 
    252                 return $this->run_command($this->link, sprintf('chmod -R %o %s', $mode, $file), true); 
     258                        return $this->run_command($this->link, sprintf('chmod %o %s', $mode, escape_dot($file)), true); 
     259                return $this->run_command($this->link, sprintf('chmod -R %o %s', $mode, escape_dot($file)), true); 
    253260        } 
    254261 
    255262        function chown($file, $owner, $recursive = false ) { 
     
    257264                if ( ! $this->exists($file) ) 
    258265                        return false; 
    259266                if ( ! $recursive || ! $this->is_dir($file) ) 
    260                         return $this->run_command($this->link, sprintf('chown %o %s', $mode, $file), true); 
    261                 return $this->run_command($this->link, sprintf('chown -R %o %s', $mode, $file), true); 
     267                        return $this->run_command($this->link, sprintf('chown %o %s', $mode, escape_dot($file)), true); 
     268                return $this->run_command($this->link, sprintf('chown -R %o %s', $mode, escape_dot($file)), true); 
    262269        } 
    263270 
    264271        function owner($file) { 
     
    311318 
    312319        function exists($file) { 
    313320                $this->debug("exists();"); 
    314                 return $this->run_command($this->link, sprintf('ls -lad %s', $file), true); 
     321                return $this->run_command($this->link, sprintf('ls -lad %s', escape_dot($file)), true); 
    315322        } 
    316323 
    317324        function is_file($file) { 
    318325                $this->debug("is_file();"); 
    319326                //DO NOT RELY ON dirlist()! 
    320                 $list = $this->run_command($this->link, sprintf('ls -lad %s', $file)); 
     327                $list = $this->run_command($this->link, sprintf('ls -lad %s', escape_dot($file))); 
    321328                $list = $this->parselisting($list); 
    322329                if ( ! $list ) 
    323330                        return false; 
     
    328335        function is_dir($path) { 
    329336                $this->debug("is_dir();"); 
    330337                //DO NOT RELY ON dirlist()! 
    331                 $list = $this->parselisting($this->run_command($this->link, sprintf('ls -lad %s', untrailingslashit($path)))); 
     338                $list = $this->parselisting($this->run_command($this->link, sprintf('ls -lad %s', 
     339                                                               escape_dot(untrailingslashit($path))))); 
    332340                if ( ! $list ) 
    333341                        return false; 
    334342                else 
     
    448456                        $limitFile = false; 
    449457                } 
    450458 
    451                 $list = $this->run_command($this->link, sprintf('ls -la %s', $path)); 
     459                $list = $this->run_command($this->link, sprintf('ls -la %s', escape_dot($path))); 
    452460 
    453461                if ( $list === false ) 
    454462                        return false;