diff options
author | Arthur Schiwon <blizzz@arthur-schiwon.de> | 2023-03-15 14:41:10 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-15 14:41:10 +0100 |
commit | a3a05f4a0634fe2d5f904e4c1af7a48d8cb9b310 (patch) | |
tree | 80b85ffee18c09498d9384a21eb9dbcb19cd6828 | |
parent | 0a9f73caa8ee32a1d41e66f5ce2fc2c1b39326a7 (diff) | |
parent | 60395a898e191f0e611209b756c6dc6da050c88d (diff) | |
download | nextcloud-server-a3a05f4a0634fe2d5f904e4c1af7a48d8cb9b310.tar.gz nextcloud-server-a3a05f4a0634fe2d5f904e4c1af7a48d8cb9b310.zip |
Merge pull request #36900 from nextcloud/backport/stable24/36837
[stable24] fix(SystemTagManager): Truncate overlong tag names
-rw-r--r-- | lib/private/SystemTag/SystemTagManager.php | 8 | ||||
-rw-r--r-- | tests/lib/SystemTag/SystemTagManagerTest.php | 13 |
2 files changed, 14 insertions, 7 deletions
diff --git a/lib/private/SystemTag/SystemTagManager.php b/lib/private/SystemTag/SystemTagManager.php index 4524aeaf7bc..79c5adcf450 100644 --- a/lib/private/SystemTag/SystemTagManager.php +++ b/lib/private/SystemTag/SystemTagManager.php @@ -193,10 +193,12 @@ class SystemTagManager implements ISystemTagManager { * {@inheritdoc} */ public function createTag(string $tagName, bool $userVisible, bool $userAssignable): ISystemTag { + // Length of name column is 64 + $truncatedTagName = substr($tagName, 0, 64); $query = $this->connection->getQueryBuilder(); $query->insert(self::TAG_TABLE) ->values([ - 'name' => $query->createNamedParameter($tagName), + 'name' => $query->createNamedParameter($truncatedTagName), 'visibility' => $query->createNamedParameter($userVisible ? 1 : 0), 'editable' => $query->createNamedParameter($userAssignable ? 1 : 0), ]); @@ -205,7 +207,7 @@ class SystemTagManager implements ISystemTagManager { $query->execute(); } catch (UniqueConstraintViolationException $e) { throw new TagAlreadyExistsException( - 'Tag ("' . $tagName . '", '. $userVisible . ', ' . $userAssignable . ') already exists', + 'Tag ("' . $truncatedTagName . '", '. $userVisible . ', ' . $userAssignable . ') already exists', 0, $e ); @@ -215,7 +217,7 @@ class SystemTagManager implements ISystemTagManager { $tag = new SystemTag( (string)$tagId, - $tagName, + $truncatedTagName, $userVisible, $userAssignable ); diff --git a/tests/lib/SystemTag/SystemTagManagerTest.php b/tests/lib/SystemTag/SystemTagManagerTest.php index 698c2582b83..253efe8fcbe 100644 --- a/tests/lib/SystemTag/SystemTagManagerTest.php +++ b/tests/lib/SystemTag/SystemTagManagerTest.php @@ -260,6 +260,11 @@ class SystemTagManagerTest extends TestCase { $this->tagManager->createTag($name, $userVisible, $userAssignable); } + public function testCreateOverlongName() { + $tag = $this->tagManager->createTag('Zona circundante do Palácio Nacional da Ajuda (Jardim das Damas, Salão de Física, Torre Sineira, Paço Velho e Jardim Botânico)', true, true); + $this->assertSame('Zona circundante do Palácio Nacional da Ajuda (Jardim das Damas', $tag->getName()); // 63 characters but 64 bytes due to "á" + } + /** * @dataProvider oneTagMultipleFlagsProvider */ @@ -282,14 +287,14 @@ class SystemTagManagerTest extends TestCase { $this->assertSameTag($tag2, $tagList[$tag2->getId()]); } - + public function testGetNonExistingTag() { $this->expectException(\OCP\SystemTag\TagNotFoundException::class); $this->tagManager->getTag('nonexist', false, false); } - + public function testGetNonExistingTagsById() { $this->expectException(\OCP\SystemTag\TagNotFoundException::class); @@ -297,7 +302,7 @@ class SystemTagManagerTest extends TestCase { $this->tagManager->getTagsByIds([$tag1->getId(), 100, 101]); } - + public function testGetInvalidTagIdFormat() { $this->expectException(\InvalidArgumentException::class); @@ -392,7 +397,7 @@ class SystemTagManagerTest extends TestCase { $this->assertEmpty($this->tagManager->getAllTags()); } - + public function testDeleteNonExistingTag() { $this->expectException(\OCP\SystemTag\TagNotFoundException::class); |