diff --git a/server/gsl/gsl.go b/server/gsl/gsl.go index 0b2b79d31a1..e90502c1e4f 100644 --- a/server/gsl/gsl.go +++ b/server/gsl/gsl.go @@ -251,7 +251,9 @@ func matchLevelForAny[T comparable](l *level[T], toks []string, np *int) bool { if np != nil { *np += len(n.subs) } - return len(n.subs) > 0 + if len(n.subs) > 0 { + return true + } } if pwc != nil { if np != nil { diff --git a/server/gsl/gsl_test.go b/server/gsl/gsl_test.go index 624a8cedc72..c6413667f9a 100644 --- a/server/gsl/gsl_test.go +++ b/server/gsl/gsl_test.go @@ -235,6 +235,14 @@ func TestGenericSublistHasInterest(t *testing.T) { require_NoError(t, s.Remove("*", 66)) } +func TestGenericSublistHasInterestOverlapping(t *testing.T) { + s := NewSublist[int]() + require_NoError(t, s.Insert("stream.A.child", 11)) + require_NoError(t, s.Insert("stream.*", 11)) + require_True(t, s.HasInterest("stream.A.child")) + require_True(t, s.HasInterest("stream.A")) +} + func TestGenericSublistNumInterest(t *testing.T) { s := NewSublist[int]() require_NoError(t, s.Insert("foo", 11)) diff --git a/server/sublist.go b/server/sublist.go index 6d4d145f3e4..d2e22d84517 100644 --- a/server/sublist.go +++ b/server/sublist.go @@ -818,7 +818,9 @@ func matchLevelForAny(l *level, toks []string, np, nq *int) bool { *nq += len(qsub) } } - return len(n.plist) > 0 || len(n.psubs) > 0 || len(n.qsubs) > 0 + if len(n.plist) > 0 || len(n.psubs) > 0 || len(n.qsubs) > 0 { + return true + } } if pwc != nil { if np != nil && nq != nil { diff --git a/server/sublist_test.go b/server/sublist_test.go index e1eaf23d432..eec34bc7efe 100644 --- a/server/sublist_test.go +++ b/server/sublist_test.go @@ -1773,6 +1773,14 @@ func TestSublistHasInterest(t *testing.T) { sl.Remove(qsub) } +func TestSublistHasInterestOverlapping(t *testing.T) { + sl := NewSublistWithCache() + require_NoError(t, sl.Insert(newSub("stream.A.child"))) + require_NoError(t, sl.Insert(newSub("stream.*"))) + require_True(t, sl.HasInterest("stream.A.child")) + require_True(t, sl.HasInterest("stream.A")) +} + func TestSublistNumInterest(t *testing.T) { sl := NewSublistWithCache() fooSub := newSub("foo")