Sanitize names rendered in the channel tree

This commit is contained in:
Brandon McGinty (chatgpt)
2026-08-09 15:12:29 -04:00
committed by Brandon McGinty
parent cc62f8e4a7
commit 5480dee0fd
2 changed files with 12 additions and 3 deletions
+9
View File
@@ -55,6 +55,15 @@ func TestNotificationExpansionIsSinglePassAndNotifyDoesNotBlock(t *testing.T) {
// Regression: reconnect replaced Stream without destroying the old capture
// and renderer resources. Cleanup must be safe for repeated disconnects.
// Regression: user and channel names in the navigation tree bypassed message
// escaping and could still carry terminal control characters.
func TestTreeItemSanitizesServerNames(t *testing.T) {
item := TreeItem{Channel: &gumble.Channel{Name: "\x1b[2Jroom"}}
if got := item.String(); got != "#[2Jroom" {
t.Fatalf("got %q", got)
}
}
func TestCleanupConnectionAudioIsIdempotent(t *testing.T) {
b := &Barnard{}
b.cleanupConnectionAudio()
+3 -3
View File
@@ -10,15 +10,15 @@ import (
func (ti TreeItem) String() string {
if ti.User != nil {
if ti.User.LocallyMuted() {
return "[MUTED] " + ti.User.Name
return "[MUTED] " + esc(ti.User.Name)
}
// Calculate total volume as percentage
boostPercent := float32(ti.User.Boost()-1) * 10
totalVolume := ti.User.Volume()*100 + boostPercent
return fmt.Sprintf("%s [%.0f%%]", ti.User.Name, totalVolume)
return fmt.Sprintf("%s [%.0f%%]", esc(ti.User.Name), totalVolume)
}
if ti.Channel != nil {
return "#" + ti.Channel.Name
return "#" + esc(ti.Channel.Name)
}
return ""
}