internal/filter: Only allow abbreviating the namespace in DotPrefixMatch

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
This commit is contained in:
Stéphane Graber 2026-07-25 14:12:52 -04:00
parent 88d7bceb06
commit 3cdd7b9320
No known key found for this signature in database
GPG Key ID: C638974D64792D67
2 changed files with 12 additions and 2 deletions

View File

@ -18,8 +18,12 @@ func DotPrefixMatch(short string, full string) bool {
return false
}
for i := range fullMembs {
if !strings.HasPrefix(fullMembs[i], shortMembs[i]) {
if !strings.HasPrefix(fullMembs[0], shortMembs[0]) {
return false
}
for i := 1; i < len(fullMembs); i++ {
if fullMembs[i] != shortMembs[i] {
return false
}
}

View File

@ -15,6 +15,12 @@ func TestDotPrefixMatch(t *testing.T) {
pass = pass && filter.DotPrefixMatch("s.privileged", "security.privileged")
pass = pass && filter.DotPrefixMatch("u.blah", "user.blah")
// Only the namespace may be abbreviated.
pass = pass && filter.DotPrefixMatch("u.foo.bar", "user.foo.bar")
pass = pass && !filter.DotPrefixMatch("user.f.bar", "user.foo.bar")
pass = pass && !filter.DotPrefixMatch("user.fo", "user.foo")
pass = pass && !filter.DotPrefixMatch("s.priv", "security.privileged")
if !pass {
t.Error("failed prefix matching")
}