From b858332f9f30ddbd2c930ba5d45b4484f021a771 Mon Sep 17 00:00:00 2001 From: ArthurHoaro Date: Sat, 18 Mar 2023 11:59:00 -0400 Subject: [PATCH] Fix a bug when using '/' as a tag separator (#1953) --- application/bookmark/LinkUtils.php | 4 ++-- tests/bookmark/LinkUtilsTest.php | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/application/bookmark/LinkUtils.php b/application/bookmark/LinkUtils.php index 112b6f00..601e352b 100644 --- a/application/bookmark/LinkUtils.php +++ b/application/bookmark/LinkUtils.php @@ -217,9 +217,9 @@ function is_note($linkUrl) function tags_str2array(?string $tags, string $separator): array { // For whitespaces, we use the special \s regex character - $separator = $separator === ' ' ? '\s' : $separator; + $separator = str_replace([' ', '/'], ['\s', '\/'], $separator); - return preg_split('/\s*' . $separator . '+\s*/', trim($tags ?? ''), -1, PREG_SPLIT_NO_EMPTY); + return preg_split('/\s*' . $separator . '+\s*/', trim($tags ?? ''), -1, PREG_SPLIT_NO_EMPTY) ?: []; } /** diff --git a/tests/bookmark/LinkUtilsTest.php b/tests/bookmark/LinkUtilsTest.php index 873e6549..922bb484 100644 --- a/tests/bookmark/LinkUtilsTest.php +++ b/tests/bookmark/LinkUtilsTest.php @@ -652,6 +652,25 @@ class LinkUtilsTest extends TestCase static::assertSame([], tags_str2array(null, $separator)); } + /** + * Test tags_str2array with / separator. + */ + public function testTagsStr2ArrayWithRegexDelimiterSeparator(): void + { + $separator = '/'; + + static::assertSame(['tag1', 'tag2', 'tag3'], tags_str2array('tag1/tag2/tag3', $separator)); + static::assertSame(['tag1', 'tag2', 'tag3'], tags_str2array('tag1////tag2////tag3', $separator)); + static::assertSame(['tag1', 'tag2', 'tag3'], tags_str2array('///tag1///tag2////tag3//', $separator)); + static::assertSame( + ['tag1#', 'tag2, and other', '.tag3'], + tags_str2array('/// tag1# /// tag2, and other ////.tag3//', $separator) + ); + static::assertSame([], tags_str2array('', $separator)); + static::assertSame([], tags_str2array(' ', $separator)); + static::assertSame([], tags_str2array(null, $separator)); + } + /** * Test tags_array2str with ' ' separator. */