diff --git a/internal/pipeline/music.go b/internal/pipeline/music.go index f047832..177c023 100644 --- a/internal/pipeline/music.go +++ b/internal/pipeline/music.go @@ -830,7 +830,8 @@ func uniqueMusicName(stem string, used map[string]struct{}) string { } for index := 1; ; index++ { suffix := fmt.Sprintf("_%d", index) - candidate := strings.TrimRight(stem[:max(0, maxMusicStemLen-len(suffix))], "_") + suffix + prefixLen := min(len(stem), max(0, maxMusicStemLen-len(suffix))) + candidate := strings.TrimRight(stem[:prefixLen], "_") + suffix if _, exists := used[candidate]; exists { continue } diff --git a/internal/pipeline/pipeline_test.go b/internal/pipeline/pipeline_test.go index 094062c..2ecb8ec 100644 --- a/internal/pipeline/pipeline_test.go +++ b/internal/pipeline/pipeline_test.go @@ -2609,6 +2609,17 @@ func TestBuildHAKsConvertsMusicSourcesAndWritesCreditsArtifacts(t *testing.T) { } ] } + +func TestUniqueMusicNameHandlesShortStemCollisions(t *testing.T) { + used := map[string]struct{}{ + "mus_wg_mystc": {}, + } + + got := uniqueMusicName("mus_wg_mystc", used) + if got != "mus_wg_mystc_1" { + t.Fatalf("unexpected collision result: got %q want %q", got, "mus_wg_mystc_1") + } +} `) mustWriteFile(t, filepath.Join(root, "assets", "envi", "music", "westgate", "AleandAnecdotes.mp3"), "source-mp3")