diff options
author | Roeland Jago Douma <rullzer@users.noreply.github.com> | 2017-07-23 14:05:17 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-07-23 14:05:17 +0200 |
commit | 4ec8cac3ecdc1e3548d9925a42b59d8205a4871f (patch) | |
tree | 203db8fd2b80c402d99562cde44bf3bc5421efbb | |
parent | 12590bf3d8c5dea707e48c149ee0bb02b92353e4 (diff) | |
parent | 13831085c3a20c856b29dd8420b8bc225a809f59 (diff) | |
download | nextcloud-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.php | 2 | ||||
-rw-r--r-- | tests/lib/Files/Cache/CacheTest.php | 74 |
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() { |