diff --git a/server/client.go b/server/client.go index 4886369b..f1b60db3 100644 --- a/server/client.go +++ b/server/client.go @@ -2504,8 +2504,7 @@ func (c *client) addShadowSubscriptions(acc *Account, sub *subscription) error { acc.mu.RLock() subj := string(sub.subject) if len(acc.imports.streams) > 0 { - tokens = tsa[:0] - tokenizeSubjectIntoSlice(subj, &tokens) + tokens = tokenizeSubjectIntoSlice(tsa[:0], subj) for _, tk := range tokens { if tk == pwcs { hasWC = true @@ -2530,12 +2529,10 @@ func (c *client) addShadowSubscriptions(acc *Account, sub *subscription) error { } if tokensModified { // re-tokenize subj to overwrite modifications from a previous iteration - tokens = tsa[:0] - tokenizeSubjectIntoSlice(subj, &tokens) + tokens = tokenizeSubjectIntoSlice(tsa[:0], subj) tokensModified = false } - imTokens := imTsa[:0] - tokenizeSubjectIntoSlice(im.to, &imTokens) + imTokens := tokenizeSubjectIntoSlice(imTsa[:0], im.to) if isSubsetMatchTokenized(tokens, imTokens) { ims = append(ims, ime{im, _EMPTY_, true}) diff --git a/server/sublist.go b/server/sublist.go index bf9b91f7..16225d76 100644 --- a/server/sublist.go +++ b/server/sublist.go @@ -1187,22 +1187,24 @@ func tokenAt(subject string, index uint8) string { return _EMPTY_ } -func tokenizeSubjectIntoSlice(subject string, tts *[]string) { +// use similar to append. meaning, the updated slice will be returned +func tokenizeSubjectIntoSlice(tts []string, subject string) []string { start := 0 for i := 0; i < len(subject); i++ { if subject[i] == btsep { - *tts = append(*tts, subject[start:i]) + tts = append(tts, subject[start:i]) start = i + 1 } } - *tts = append(*tts, subject[start:]) + tts = append(tts, subject[start:]) + return tts } // Calls into the function isSubsetMatch() func subjectIsSubsetMatch(subject, test string) bool { tsa := [32]string{} tts := tsa[:0] - tokenizeSubjectIntoSlice(subject, &tts) + tts = tokenizeSubjectIntoSlice(tts, subject) return isSubsetMatch(tts, test) } @@ -1211,7 +1213,7 @@ func subjectIsSubsetMatch(subject, test string) bool { func isSubsetMatch(tokens []string, test string) bool { tsa := [32]string{} tts := tsa[:0] - tokenizeSubjectIntoSlice(test, &tts) + tts = tokenizeSubjectIntoSlice(tts, test) return isSubsetMatchTokenized(tokens, tts) }