diff --git a/lib/private/largefilehelper.php b/lib/private/largefilehelper.php index 751e60de53..5f5e14aca3 100644 --- a/lib/private/largefilehelper.php +++ b/lib/private/largefilehelper.php @@ -92,17 +92,26 @@ class LargeFileHelper { public function getFilesizeViaExec($filename) { if (\OC_Helper::is_function_enabled('exec')) { $os = strtolower(php_uname('s')); + $arg = escapeshellarg($filename); $result = ''; if (strpos($os, 'linux') !== false) { - $result = trim(exec('stat -c %s ' . escapeshellarg($filename))); + $result = $this->exec("stat -c %s $arg"); } else if (strpos($os, 'bsd') !== false) { - $result = trim(exec('stat -f %z ' . escapeshellarg($filename))); - } - - if (ctype_digit($result)) { - return 0 + $result; + $result = $this->exec("stat -f %z $arg"); + } else if (strpos($os, 'win') !== false) { + $result = $this->exec("for %F in ($arg) do @echo %~zF"); + if (is_null($result)) { + // PowerShell + $result = $this->exec("(Get-Item $arg).length"); + } } + return $result; } return null; } + + protected function exec($cmd) { + $result = trim(exec($cmd)); + return ctype_digit($result) ? 0 + $result : null; + } }