summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobin Appelman <icewind@owncloud.com>2013-09-22 01:23:18 +0200
committerRobin Appelman <icewind@owncloud.com>2013-09-22 01:24:12 +0200
commita1d4eb1f956148fe9002dd17bdfef3bd66063bf0 (patch)
treee0fb4b9afb432aa6cf997bda3b91bf2c818c4ad2
parent5b95e7aa0f0487d7ddb07588c71d25cd973c2bb6 (diff)
downloadnextcloud-server-a1d4eb1f956148fe9002dd17bdfef3bd66063bf0.tar.gz
nextcloud-server-a1d4eb1f956148fe9002dd17bdfef3bd66063bf0.zip
files: when filtering search results, ensure results are children of the fakeroot not just path starting the same
-rw-r--r--lib/files/view.php14
-rw-r--r--tests/lib/files/view.php14
2 files changed, 22 insertions, 6 deletions
diff --git a/lib/files/view.php b/lib/files/view.php
index 968b755a661..aa08a5f7cc9 100644
--- a/lib/files/view.php
+++ b/lib/files/view.php
@@ -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;
+ }
}
}
}
diff --git a/tests/lib/files/view.php b/tests/lib/files/view.php
index 0de436f570a..3043f132b73 100644
--- a/tests/lib/files/view.php
+++ b/tests/lib/files/view.php
@@ -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') {