files: when filtering search results, ensure results are children of the fakeroot not just path starting the same

This commit is contained in:
Robin Appelman 2013-09-22 01:23:18 +02:00
parent 5b95e7aa0f
commit a1d4eb1f95
2 changed files with 22 additions and 6 deletions

View File

@ -500,7 +500,7 @@ class View {
} else {
if ($this->is_dir($path1) && ($dh = $this->opendir($path1))) {
$result = $this->mkdir($path2);
if(is_resource($dh)) {
if (is_resource($dh)) {
while (($file = readdir($dh)) !== false) {
if (!Filesystem::isIgnoredDir($file)) {
$result = $this->copy($path1 . '/' . $file, $path2 . '/' . $file);
@ -975,7 +975,7 @@ class View {
/**
* search for files by mimetype
*
* @param string $query
* @param string $mimetype
* @return array
*/
public function searchByMime($mimetype) {
@ -998,7 +998,7 @@ class View {
$results = $cache->$method($query);
foreach ($results as $result) {
if (substr($mountPoint . $result['path'], 0, $rootLength) === $this->fakeRoot) {
if (substr($mountPoint . $result['path'], 0, $rootLength + 1) === $this->fakeRoot . '/') {
$result['path'] = substr($mountPoint . $result['path'], $rootLength);
$files[] = $result;
}
@ -1012,9 +1012,11 @@ class View {
$relativeMountPoint = substr($mountPoint, $rootLength);
$results = $cache->$method($query);
foreach ($results as $result) {
$result['path'] = $relativeMountPoint . $result['path'];
$files[] = $result;
if ($results) {
foreach ($results as $result) {
$result['path'] = $relativeMountPoint . $result['path'];
$files[] = $result;
}
}
}
}

View File

@ -354,8 +354,22 @@ class View extends \PHPUnit_Framework_TestCase {
$this->hookPath = $params['path'];
}
public function testSearchNotOutsideView() {
$storage1 = $this->getTestStorage();
\OC\Files\Filesystem::mount($storage1, array(), '/');
$storage1->rename('folder', 'foo');
$scanner = $storage1->getScanner();
$scanner->scan('');
$view = new \OC\Files\View('/foo');
$result = $view->search('.txt');
$this->assertCount(1, $result);
}
/**
* @param bool $scan
* @param string $class
* @return \OC\Files\Storage\Storage
*/
private function getTestStorage($scan = true, $class = '\OC\Files\Storage\Temporary') {