Skip to content

Commit 4adf99a

Browse files
committed
security: slot range bound checks
Signed-off-by: Rueian <[email protected]>
1 parent f437f0e commit 4adf99a

File tree

1 file changed

+4
-5
lines changed

1 file changed

+4
-5
lines changed

cluster.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,7 @@ func (c *clusterClient) _refresh() (err error) {
249249
case c.opt.ReplicaOnly && len(g.nodes) > 1:
250250
nodesCount := len(g.nodes)
251251
for _, slot := range g.slots {
252-
for i := slot[0]; i <= slot[1]; i++ {
252+
for i := slot[0]; i <= slot[1] && i >= 0 && i < 16384; i++ {
253253
pslots[i] = conns[g.nodes[1+util.FastRand(nodesCount-1)].Addr].conn
254254
}
255255
}
@@ -260,9 +260,8 @@ func (c *clusterClient) _refresh() (err error) {
260260
if len(g.nodes) > 1 {
261261
n := len(g.nodes) - 1
262262
for _, slot := range g.slots {
263-
for i := slot[0]; i <= slot[1]; i++ {
263+
for i := slot[0]; i <= slot[1] && i >= 0 && i < 16384; i++ {
264264
pslots[i] = conns[master].conn
265-
266265
rIndex := c.opt.ReplicaSelector(uint16(i), g.nodes[1:])
267266
if rIndex >= 0 && rIndex < n {
268267
rslots[i] = conns[g.nodes[1+rIndex].Addr].conn
@@ -273,15 +272,15 @@ func (c *clusterClient) _refresh() (err error) {
273272
}
274273
} else {
275274
for _, slot := range g.slots {
276-
for i := slot[0]; i <= slot[1]; i++ {
275+
for i := slot[0]; i <= slot[1] && i >= 0 && i < 16384; i++ {
277276
pslots[i] = conns[master].conn
278277
rslots[i] = conns[master].conn
279278
}
280279
}
281280
}
282281
default:
283282
for _, slot := range g.slots {
284-
for i := slot[0]; i <= slot[1]; i++ {
283+
for i := slot[0]; i <= slot[1] && i >= 0 && i < 16384; i++ {
285284
pslots[i] = conns[master].conn
286285
}
287286
}

0 commit comments

Comments
 (0)