fix substring checking in scanner musicDirRelative

related https://github.com/sentriz/gonic/issues/437
This commit is contained in:
sentriz
2023-12-22 12:59:48 +00:00
parent 6b5195c583
commit f5b6b4d790
2 changed files with 24 additions and 1 deletions

View File

@@ -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
}

View File

@@ -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)
}