Skip to content

Commit

Permalink
fix substring checking in scanner musicDirRelative
Browse files Browse the repository at this point in the history
related #437
  • Loading branch information
sentriz committed Dec 22, 2023
1 parent 6b5195c commit f5b6b4d
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 1 deletion.
2 changes: 1 addition & 1 deletion scanner/scanner.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Expand Down
23 changes: 23 additions & 0 deletions scanner/scanner_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}

0 comments on commit f5b6b4d

Please sign in to comment.