Skip to content

Commit e5c7c50

Browse files
committed
Fix for scripting
1 parent ab4dd6f commit e5c7c50

2 files changed

Lines changed: 22 additions & 8 deletions

File tree

mod.go

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ const (
1313
ModifyAlternate = "alternate"
1414
ModifySort = "sort"
1515
ModifyEvalStyle = "eval_style"
16+
ModifyEvalShaStyle = "evalsha_style"
1617
ModifyScanStyle = "scan_style"
1718

1819
ReviveFirst = "first"
@@ -27,7 +28,9 @@ var namespacedCommands = map[string]string{
2728
"BRPOP": ModifyExcludeLast, "BRPOPLPUSH": ModifyExcludeLast, "BZPOPMIN": ModifyFirst,
2829
"BZPOPMAX": ModifyFirst, "DECR": ModifyFirst, "DECRBY": ModifyFirst, "DEL": ModifyAll,
2930
"DUMP": ModifyFirst, "EXISTS": ModifyAll, "EXPIRE": ModifyFirst, "EXPIREAT": ModifyFirst,
30-
"EXPIRETIME": ModifyFirst, "EVAL": ModifyEvalStyle, "EVALSHA": ModifyEvalStyle,
31+
"EXPIRETIME": ModifyFirst, "EVAL": ModifyEvalStyle, "EVALSHA": ModifyEvalShaStyle,
32+
"EVAL_RO": ModifyEvalStyle, "EVALSHA_RO": ModifyEvalShaStyle,
33+
"FCALL": ModifyEvalStyle, "FCALL_RO": ModifyEvalStyle,
3134
"GET": ModifyFirst, "GETEX": ModifyFirst, "GETBIT": ModifyFirst, "GETRANGE": ModifyFirst,
3235
"GETSET": ModifyFirst, "HSET": ModifyFirst, "HSETNX": ModifyFirst, "HGET": ModifyFirst,
3336
"HINCRBY": ModifyFirst, "HINCRBYFLOAT": ModifyFirst, "HMGET": ModifyFirst,
@@ -133,8 +136,19 @@ func modSingleCommand(command, username string, args [][]byte) ([][]byte, revive
133136
i += 1
134137
}
135138
}
136-
case ModifyEvalStyle:
137-
for i := 2; i < 1+len(args)/2; i++ {
139+
case ModifyEvalStyle, ModifyEvalShaStyle:
140+
kpos := 2
141+
if modType == ModifyEvalShaStyle {
142+
kpos = 3
143+
}
144+
if len(args) < kpos {
145+
return args, nil
146+
}
147+
klen, err := parseLen(args[kpos])
148+
if err != nil {
149+
return args, nil
150+
}
151+
for i := 3; i < 3+klen; i++ {
138152
args[i] = append(namespacePrefix, args[i]...)
139153
}
140154
case ModifyScanStyle:

reader.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,15 +38,15 @@ func (c *RespReader) readReply(pos, depth int) error {
3838
if err != nil {
3939
return err
4040
}
41-
if len(line) < 2 {
41+
if len(line) < 3 {
4242
return readerError("short response line")
4343
}
4444
switch line[0] {
4545
case '+', '-', ':':
4646
c.bw.Write(line)
4747
return nil
4848
case '$':
49-
n, err := parseLen(line[1:])
49+
n, err := parseLen(line[1 : len(line)-2])
5050
if err != nil {
5151
return err
5252
}
@@ -66,7 +66,7 @@ func (c *RespReader) readReply(pos, depth int) error {
6666
c.bw.Write(p)
6767
return nil
6868
case '*':
69-
n, err := parseLen(line[1:])
69+
n, err := parseLen(line[1 : len(line)-2])
7070
if err != nil {
7171
return err
7272
}
@@ -117,13 +117,13 @@ func parseLen(p []byte) (int, error) {
117117
return -1, readerError("malformed length")
118118
}
119119

120-
if p[0] == '-' && len(p) == 4 && p[1] == '1' {
120+
if p[0] == '-' && len(p) == 2 && p[1] == '1' {
121121
// handle $-1 and $-1 null replies.
122122
return -1, nil
123123
}
124124

125125
var n int
126-
for _, b := range p[:len(p)-2] {
126+
for _, b := range p {
127127
n *= 10
128128
if b < '0' || b > '9' {
129129
return -1, readerError("illegal bytes in length")

0 commit comments

Comments
 (0)