From f5b6b4d7906292f28f02aa7604cd45a8fcab720f Mon Sep 17 00:00:00 2001 From: sentriz Date: Fri, 22 Dec 2023 12:59:48 +0000 Subject: [PATCH] fix substring checking in scanner musicDirRelative related https://github.com/sentriz/gonic/issues/437 --- scanner/scanner.go | 2 +- scanner/scanner_test.go | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/scanner/scanner.go b/scanner/scanner.go index d9331ce..1a32859 100644 --- a/scanner/scanner.go +++ b/scanner/scanner.go @@ -721,7 +721,7 @@ func parseMulti(parser tagcommon.Info, setting MultiValueSetting, getMulti func( func musicDirRelative(musicDirs []string, absPath string) (musicDir, relPath string) { for _, musicDir := range musicDirs { - if strings.HasPrefix(absPath, musicDir) { + if absPath == musicDir || strings.HasPrefix(absPath, filepath.Clean(musicDir)+string(filepath.Separator)) { // ensure trailing slash for substring check relPath, _ = filepath.Rel(musicDir, absPath) return musicDir, relPath } diff --git a/scanner/scanner_test.go b/scanner/scanner_test.go index 0541184..c2b281b 100644 --- a/scanner/scanner_test.go +++ b/scanner/scanner_test.go @@ -787,3 +787,26 @@ func TestRootNoClobberOnError(t *testing.T) { require.Equal(t, ".", roots[0].RightPath) require.Equal(t, 0, roots[0].ParentID) } + +// https://github.com/sentriz/gonic/issues/437 +func TestPrefixOverlap(t *testing.T) { + t.Parallel() + + m := mockfs.NewWithDirs(t, []string{ + "/music/tagged", + "/music/taggedmanual", + }) + + m.AddItemsPrefix("/music/tagged") + m.AddItemsPrefix("/music/taggedmanual") + + m.ScanAndClean() + + var taggedManual int + require.NoError(t, m.DB().Model(db.Album{}).Where("root_dir LIKE ?", `%/taggedmanual`).Count(&taggedManual).Error) + require.Greater(t, taggedManual, 1) + + var tagged int + require.NoError(t, m.DB().Model(db.Album{}).Where("root_dir LIKE ?", `%/tagged`).Count(&tagged).Error) + require.Greater(t, tagged, 1) +}