From f79c149039270aca8f0371dec71244db89e27423 Mon Sep 17 00:00:00 2001 From: Felix Martin Date: Tue, 2 Jun 2026 12:21:12 -0400 Subject: [PATCH] Clarify .exe suffix handling in class normalization --- internal/winapi/class.go | 5 +++-- internal/winapi/class_test.go | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/internal/winapi/class.go b/internal/winapi/class.go index 4a26deb..ef82147 100644 --- a/internal/winapi/class.go +++ b/internal/winapi/class.go @@ -14,8 +14,9 @@ func ClassFromImagePath(p string) string { if i := strings.LastIndexAny(p, `\/`); i >= 0 { p = p[i+1:] } - if len(p) >= 4 && strings.EqualFold(p[len(p)-4:], ".exe") { - p = p[:len(p)-4] + const exeSuffix = ".exe" + if len(p) >= len(exeSuffix) && strings.EqualFold(p[len(p)-len(exeSuffix):], exeSuffix) { + p = p[:len(p)-len(exeSuffix)] } return strings.ToLower(p) } diff --git a/internal/winapi/class_test.go b/internal/winapi/class_test.go index a1d9a4b..d28f5ef 100644 --- a/internal/winapi/class_test.go +++ b/internal/winapi/class_test.go @@ -12,6 +12,7 @@ func TestClassFromImagePath(t *testing.T) { {`C:/forward/slash/Code.exe`, "code"}, {`firefox`, "firefox"}, {``, ""}, + {`.exe`, ""}, // degenerate: only the extension } for _, c := range cases { if got := ClassFromImagePath(c.in); got != c.want {