summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoeland Jago Douma <rullzer@users.noreply.github.com>2017-07-23 14:05:17 +0200
committerGitHub <noreply@github.com>2017-07-23 14:05:17 +0200
commit4ec8cac3ecdc1e3548d9925a42b59d8205a4871f (patch)
tree203db8fd2b80c402d99562cde44bf3bc5421efbb
parent12590bf3d8c5dea707e48c149ee0bb02b92353e4 (diff)
parent13831085c3a20c856b29dd8420b8bc225a809f59 (diff)
downloadnextcloud-server-4ec8cac3ecdc1e3548d9925a42b59d8205a4871f.tar.gz
nextcloud-server-4ec8cac3ecdc1e3548d9925a42b59d8205a4871f.zip
Merge pull request #5830 from nextcloud/12-5812
[stable12] Fix for mb strlen
-rw-r--r--lib/private/Files/Cache/Cache.php2
-rw-r--r--tests/lib/Files/Cache/CacheTest.php74
2 files changed, 39 insertions, 37 deletions
diff --git a/lib/private/Files/Cache/Cache.php b/lib/private/Files/Cache/Cache.php
index 9d8e67d1d12..481a384a6e1 100644
--- a/lib/private/Files/Cache/Cache.php
+++ b/lib/private/Files/Cache/Cache.php
@@ -526,7 +526,7 @@ class Cache implements ICache {
$this->connection->beginTransaction();
if ($sourceData['mimetype'] === 'httpd/unix-directory') {
//update all child entries
- $sourceLength = strlen($sourcePath);
+ $sourceLength = mb_strlen($sourcePath);
$query = $this->connection->getQueryBuilder();
$fun = $query->func();
diff --git a/tests/lib/Files/Cache/CacheTest.php b/tests/lib/Files/Cache/CacheTest.php
index 0038cef1f63..5e6301d689a 100644
--- a/tests/lib/Files/Cache/CacheTest.php
+++ b/tests/lib/Files/Cache/CacheTest.php
@@ -488,48 +488,50 @@ class CacheTest extends \Test\TestCase {
, 10, 0, [], $user)));
}
- function testMove() {
- $file1 = 'folder';
- $file2 = 'folder/bar';
- $file3 = 'folder/foo';
- $file4 = 'folder/foo/1';
- $file5 = 'folder/foo/2';
+ function movePathProvider() {
+ return [
+ ['folder/foo', 'folder/foobar', ['1', '2']],
+ ['folder/foo', 'foo', ['1', '2']],
+ ['files/Индустрия_Инженерные системы ЦОД', 'files/Индустрия_Инженерные системы ЦОД1', ['1', '2']],
+ ];
+ }
+
+ /**
+ * @dataProvider movePathProvider
+ */
+ function testMove($sourceFolder, $targetFolder, $children) {
$data = array('size' => 100, 'mtime' => 50, 'mimetype' => 'foo/bar');
$folderData = array('size' => 100, 'mtime' => 50, 'mimetype' => 'httpd/unix-directory');
- $this->cache->put($file1, $folderData);
- $this->cache->put($file2, $folderData);
- $this->cache->put($file3, $folderData);
- $this->cache->put($file4, $data);
- $this->cache->put($file5, $data);
+ // create folders
+ foreach ([$sourceFolder, $targetFolder] as $current) {
+ while (strpos($current, '/') > 0) {
+ $current = dirname($current);
+ $this->cache->put($current, $folderData);
+ $this->cache2->put($current, $folderData);
+ }
+ }
- /* simulate a second user with a different storage id but the same folder structure */
- $this->cache2->put($file1, $folderData);
- $this->cache2->put($file2, $folderData);
- $this->cache2->put($file3, $folderData);
- $this->cache2->put($file4, $data);
- $this->cache2->put($file5, $data);
+ $this->cache->put($sourceFolder, $folderData);
+ $this->cache2->put($sourceFolder, $folderData);
+ foreach ($children as $child) {
+ $this->cache->put($sourceFolder . '/' . $child, $data);
+ $this->cache2->put($sourceFolder . '/' . $child, $data);
+ }
- $this->cache->move('folder/foo', 'folder/foobar');
+ $this->cache->move($sourceFolder, $targetFolder);
- $this->assertFalse($this->cache->inCache('folder/foo'));
- $this->assertFalse($this->cache->inCache('folder/foo/1'));
- $this->assertFalse($this->cache->inCache('folder/foo/2'));
-
- $this->assertTrue($this->cache->inCache('folder/bar'));
- $this->assertTrue($this->cache->inCache('folder/foobar'));
- $this->assertTrue($this->cache->inCache('folder/foobar/1'));
- $this->assertTrue($this->cache->inCache('folder/foobar/2'));
-
- /* the folder structure of the second user must not change! */
- $this->assertTrue($this->cache2->inCache('folder/bar'));
- $this->assertTrue($this->cache2->inCache('folder/foo'));
- $this->assertTrue($this->cache2->inCache('folder/foo/1'));
- $this->assertTrue($this->cache2->inCache('folder/foo/2'));
-
- $this->assertFalse($this->cache2->inCache('folder/foobar'));
- $this->assertFalse($this->cache2->inCache('folder/foobar/1'));
- $this->assertFalse($this->cache2->inCache('folder/foobar/2'));
+
+ $this->assertFalse($this->cache->inCache($sourceFolder));
+ $this->assertTrue($this->cache2->inCache($sourceFolder));
+ $this->assertTrue($this->cache->inCache($targetFolder));
+ $this->assertFalse($this->cache2->inCache($targetFolder));
+ foreach ($children as $child) {
+ $this->assertFalse($this->cache->inCache($sourceFolder . '/' . $child));
+ $this->assertTrue($this->cache2->inCache($sourceFolder . '/' . $child));
+ $this->assertTrue($this->cache->inCache($targetFolder . '/' . $child));
+ $this->assertFalse($this->cache2->inCache($targetFolder . '/' . $child));
+ }
}
function testGetIncomplete() {