aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArthur Schiwon <blizzz@arthur-schiwon.de>2023-03-15 14:41:10 +0100
committerGitHub <noreply@github.com>2023-03-15 14:41:10 +0100
commita3a05f4a0634fe2d5f904e4c1af7a48d8cb9b310 (patch)
tree80b85ffee18c09498d9384a21eb9dbcb19cd6828
parent0a9f73caa8ee32a1d41e66f5ce2fc2c1b39326a7 (diff)
parent60395a898e191f0e611209b756c6dc6da050c88d (diff)
downloadnextcloud-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.php8
-rw-r--r--tests/lib/SystemTag/SystemTagManagerTest.php13
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);