fix substring checking in scanner musicDirRelative
related https://github.com/sentriz/gonic/issues/437
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user