Check target name on rename with web UI

When renaming over the web UI, check early that the target name is
valid.

This prevents nonsensical error messages when renaming to a name with a
trailing backslash.
This commit is contained in:
Vincent Petry 2015-05-29 19:30:09 +02:00
parent 01a241f711
commit 13617c8bf1
2 changed files with 16 additions and 24 deletions

View File

@ -74,6 +74,17 @@ class App {
'data' => NULL
);
try {
// check if the new name is conform to file name restrictions
$this->view->verifyPath($dir, $newname);
} catch (\OCP\Files\InvalidPathException $ex) {
$result['data'] = array(
'message' => $this->l10n->t($ex->getMessage()),
'code' => 'invalidname',
);
return $result;
}
$normalizedOldPath = \OC\Files\Filesystem::normalizePath($dir . '/' . $oldname);
$normalizedNewPath = \OC\Files\Filesystem::normalizePath($dir . '/' . $newname);

View File

@ -222,36 +222,17 @@ class Test_OC_Files_App_Rename extends \Test\TestCase {
}
/**
* Test move to a folder that doesn't exist any more
* Test move to invalid name
*/
function testRenameToNonExistingFolder() {
function testRenameToInvalidName() {
$dir = '/';
$oldname = 'oldname';
$newname = '/unexist/newname';
$this->viewMock->expects($this->any())
->method('file_exists')
->with($this->anything())
->will($this->returnValueMap(array(
array('/oldname', true),
array('/unexist', false)
)));
$this->viewMock->expects($this->any())
->method('getFileInfo')
->will($this->returnValue(array(
'fileid' => 123,
'type' => 'dir',
'mimetype' => 'httpd/unix-directory',
'size' => 18,
'etag' => 'abcdef',
'directory' => '/unexist',
'name' => 'new_name',
)));
$newname = 'abc\\';
$result = $this->files->rename($dir, $oldname, $newname);
$this->assertFalse($result['success']);
$this->assertEquals('targetnotfound', $result['data']['code']);
$this->assertEquals('File name contains at least one invalid character', $result['data']['message']);
$this->assertEquals('invalidname', $result['data']['code']);
}
}