Skip to content

Commit 3d499ab

Browse files
committed
Fix repeated prefix memory
1 parent e5c7c50 commit 3d499ab

1 file changed

Lines changed: 21 additions & 14 deletions

File tree

mod.go

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package main
22

3-
import "strings"
3+
import (
4+
"bytes"
5+
"strings"
6+
)
47

58
// Command modification types
69
const (
@@ -81,53 +84,57 @@ func modSingleCommand(command, username string, args [][]byte) ([][]byte, revive
8184

8285
namespacePrefix := []byte(username + ":")
8386

87+
appendPrefix := func(b []byte) []byte {
88+
return bytes.Join([][]byte{namespacePrefix, b}, nil)
89+
}
90+
8491
switch modType {
8592
case ModifyFirst:
8693
if len(args) > 1 {
87-
args[1] = append(namespacePrefix, args[1]...)
94+
args[1] = appendPrefix(args[1])
8895
}
8996
case ModifyFirstTwo:
9097
if len(args) > 2 {
91-
args[1] = append(namespacePrefix, args[1]...)
92-
args[2] = append(namespacePrefix, args[2]...)
98+
args[1] = appendPrefix(args[1])
99+
args[2] = appendPrefix(args[2])
93100
}
94101
case ModifyAll:
95102
for i := 1; i < len(args); i++ {
96-
args[i] = append(namespacePrefix, args[i]...)
103+
args[i] = appendPrefix(args[i])
97104
}
98105
case ModifyExcludeFirst:
99106
for i := 2; i < len(args); i++ {
100-
args[i] = append(namespacePrefix, args[i]...)
107+
args[i] = appendPrefix(args[i])
101108
}
102109
case ModifyExcludeLast:
103110
for i := 1; i < len(args)-1; i++ {
104-
args[i] = append(namespacePrefix, args[i]...)
111+
args[i] = appendPrefix(args[i])
105112
}
106113
case ModifyExcludeOpts:
107114
if len(args) > 2 && len(args[len(args)-1]) > 0 {
108115
// Check if last argument is an option (e.g., weight, aggregate)
109116
for i := 1; i < len(args)-1; i++ {
110-
args[i] = append(namespacePrefix, args[i]...)
117+
args[i] = appendPrefix(args[i])
111118
}
112119
} else {
113120
for i := 1; i < len(args); i++ {
114-
args[i] = append(namespacePrefix, args[i]...)
121+
args[i] = appendPrefix(args[i])
115122
}
116123
}
117124
case ModifyAlternate:
118125
for i := 2; i < len(args); i += 2 {
119-
args[i] = append(namespacePrefix, args[i]...)
126+
args[i] = appendPrefix(args[i])
120127
}
121128
case ModifySort:
122129
if len(args) > 1 {
123-
args[1] = append(namespacePrefix, args[1]...)
130+
args[1] = appendPrefix(args[1])
124131
}
125132
// If second argument is not hash, modify 'by', 'store', and 'get' keys
126133
for i := 2; i+1 < len(args); i += 1 {
127134
key := strings.ToUpper(string(args[i]))
128135
if key == "BY" || key == "STORE" {
129136
i += 1
130-
args[i] = append(namespacePrefix, args[i]...)
137+
args[i] = appendPrefix(args[i])
131138
}
132139
if key == "LIMIT" {
133140
i += 2
@@ -149,14 +156,14 @@ func modSingleCommand(command, username string, args [][]byte) ([][]byte, revive
149156
return args, nil
150157
}
151158
for i := 3; i < 3+klen; i++ {
152-
args[i] = append(namespacePrefix, args[i]...)
159+
args[i] = appendPrefix(args[i])
153160
}
154161
case ModifyScanStyle:
155162
// Modify MATCH argument
156163
found := false
157164
for i := 1; i < len(args)-1; i++ {
158165
if strings.ToUpper(string(args[i])) == "MATCH" {
159-
args[i+1] = append(namespacePrefix, args[i+1]...)
166+
args[i+1] = appendPrefix(args[i+1])
160167
found = true
161168
break
162169
}

0 commit comments

Comments
 (0)