Merge pull request #14776 from owncloud/fix-14629-master
verify the file name length not to exceed 255 characters + verify path d...
This commit is contained in:
commit
6927773648
|
@ -13,6 +13,7 @@ use OC\Files\Cache\Scanner;
|
||||||
use OC\Files\Cache\Storage;
|
use OC\Files\Cache\Storage;
|
||||||
use OC\Files\Filesystem;
|
use OC\Files\Filesystem;
|
||||||
use OC\Files\Cache\Watcher;
|
use OC\Files\Cache\Watcher;
|
||||||
|
use OCP\Files\FileNameTooLongException;
|
||||||
use OCP\Files\InvalidCharacterInPathException;
|
use OCP\Files\InvalidCharacterInPathException;
|
||||||
use OCP\Files\InvalidPathException;
|
use OCP\Files\InvalidPathException;
|
||||||
use OCP\Files\ReservedWordException;
|
use OCP\Files\ReservedWordException;
|
||||||
|
@ -460,6 +461,10 @@ abstract class Common implements \OC\Files\Storage\Storage {
|
||||||
* @inheritdoc
|
* @inheritdoc
|
||||||
*/
|
*/
|
||||||
public function verifyPath($path, $fileName) {
|
public function verifyPath($path, $fileName) {
|
||||||
|
if (isset($fileName[255])) {
|
||||||
|
throw new FileNameTooLongException();
|
||||||
|
}
|
||||||
|
|
||||||
// NOTE: $path will remain unverified for now
|
// NOTE: $path will remain unverified for now
|
||||||
if (\OC_Util::runningOnWindows()) {
|
if (\OC_Util::runningOnWindows()) {
|
||||||
$this->verifyWindowsPath($fileName);
|
$this->verifyWindowsPath($fileName);
|
||||||
|
|
|
@ -11,6 +11,7 @@ namespace OC\Files;
|
||||||
|
|
||||||
use OC\Files\Cache\Updater;
|
use OC\Files\Cache\Updater;
|
||||||
use OC\Files\Mount\MoveableMount;
|
use OC\Files\Mount\MoveableMount;
|
||||||
|
use OCP\Files\FileNameTooLongException;
|
||||||
use OCP\Files\InvalidCharacterInPathException;
|
use OCP\Files\InvalidCharacterInPathException;
|
||||||
use OCP\Files\InvalidPathException;
|
use OCP\Files\InvalidPathException;
|
||||||
use OCP\Files\ReservedWordException;
|
use OCP\Files\ReservedWordException;
|
||||||
|
@ -585,6 +586,8 @@ class View {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if ($run) {
|
if ($run) {
|
||||||
|
$this->verifyPath(dirname($path2), basename($path2));
|
||||||
|
|
||||||
$mp1 = $this->getMountPoint($path1 . $postFix1);
|
$mp1 = $this->getMountPoint($path1 . $postFix1);
|
||||||
$mp2 = $this->getMountPoint($path2 . $postFix2);
|
$mp2 = $this->getMountPoint($path2 . $postFix2);
|
||||||
$manager = Filesystem::getMountManager();
|
$manager = Filesystem::getMountManager();
|
||||||
|
@ -1573,6 +1576,8 @@ class View {
|
||||||
throw new InvalidPathException($l10n->t('File name is a reserved word'));
|
throw new InvalidPathException($l10n->t('File name is a reserved word'));
|
||||||
} catch (InvalidCharacterInPathException $ex) {
|
} catch (InvalidCharacterInPathException $ex) {
|
||||||
throw new InvalidPathException($l10n->t('File name contains at least one invalid character'));
|
throw new InvalidPathException($l10n->t('File name contains at least one invalid character'));
|
||||||
|
} catch (FileNameTooLongException $ex) {
|
||||||
|
throw new InvalidPathException($l10n->t('File name is too long'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* ownCloud
|
||||||
|
*
|
||||||
|
* @author Thomas Müller
|
||||||
|
* @copyright 2013 Thomas Müller deepdiver@owncloud.com
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 3 of the License, or any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public
|
||||||
|
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Public interface of ownCloud for apps to use.
|
||||||
|
* Files/ReservedWordException class
|
||||||
|
*/
|
||||||
|
|
||||||
|
// use OCP namespace for all classes that are considered public.
|
||||||
|
// This means that they should be used by apps instead of the internal ownCloud classes
|
||||||
|
namespace OCP\Files;
|
||||||
|
|
||||||
|
|
||||||
|
class FileNameTooLongException extends InvalidPathException {
|
||||||
|
}
|
|
@ -22,6 +22,16 @@ class PathVerification extends \Test\TestCase {
|
||||||
$this->view = new View();
|
$this->view = new View();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @expectedException \OCP\Files\InvalidPathException
|
||||||
|
* @expectedExceptionMessage File name is too long
|
||||||
|
*/
|
||||||
|
public function testPathVerificationFileNameTooLong() {
|
||||||
|
$fileName = str_repeat('a', 500);
|
||||||
|
$this->view->verifyPath('', $fileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @dataProvider providesEmptyFiles
|
* @dataProvider providesEmptyFiles
|
||||||
* @expectedException \OCP\Files\InvalidPathException
|
* @expectedException \OCP\Files\InvalidPathException
|
||||||
|
|
Loading…
Reference in New Issue