Skip to content
Snippets Groups Projects
Commit fb899460 authored by Thomas Müller's avatar Thomas Müller
Browse files

Merge pull request #15252 from owncloud/prevent-directory-characters-in-temporary-path

Filter potential dangerous characters in path name
parents 71049840 9622fbdf
Branches
No related tags found
No related merge requests found
...@@ -54,10 +54,15 @@ class TempManager implements ITempManager { ...@@ -54,10 +54,15 @@ class TempManager implements ITempManager {
$this->log = $logger; $this->log = $logger;
} }
/**
* @param string $postFix
* @return string
*/
protected function generatePath($postFix) { protected function generatePath($postFix) {
if ($postFix) { if ($postFix) {
$postFix = '.' . ltrim($postFix, '.'); $postFix = '.' . ltrim($postFix, '.');
} }
$postFix = str_replace(['\\', '/'], '', $postFix);
return $this->tmpBaseDir . '/oc_tmp_' . md5(time() . rand()) . $postFix; return $this->tmpBaseDir . '/oc_tmp_' . md5(time() . rand()) . $postFix;
} }
......
...@@ -151,4 +151,17 @@ class TempManager extends \Test\TestCase { ...@@ -151,4 +151,17 @@ class TempManager extends \Test\TestCase {
->with($this->stringContains('Can not create a temporary folder in directory')); ->with($this->stringContains('Can not create a temporary folder in directory'));
$this->assertFalse($manager->getTemporaryFolder()); $this->assertFalse($manager->getTemporaryFolder());
} }
public function testGeneratePathTraversal() {
$logger = $this->getMock('\Test\NullLogger');
$tmpManager = \Test_Helper::invokePrivate(
$this->getManager($logger),
'generatePath',
['../Traversal\\../FileName']
);
$this->assertStringEndsNotWith('./Traversal\\../FileName', $tmpManager);
$this->assertStringEndsWith('.Traversal..FileName', $tmpManager);
}
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment