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, 9 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;