mirror of https://mirror.osredm.com/root/redis.git
Fix index error of CRLF when replying with integer-encoded strings (#13711)
close #13709 Fix the index error of CRLF character for integer-encoded strings in addReplyBulk function --------- Co-authored-by: debing.sun <debing.sun@redis.com>
This commit is contained in:
parent
dc57ee03b1
commit
04f63d4af7
|
@ -1080,8 +1080,8 @@ void addReplyBulk(client *c, robj *obj) {
|
||||||
* to the output buffer. */
|
* to the output buffer. */
|
||||||
char buf[34];
|
char buf[34];
|
||||||
size_t len = ll2string(buf,sizeof(buf),(long)obj->ptr);
|
size_t len = ll2string(buf,sizeof(buf),(long)obj->ptr);
|
||||||
buf[len+1] = '\r';
|
buf[len] = '\r';
|
||||||
buf[len+2] = '\n';
|
buf[len+1] = '\n';
|
||||||
_addReplyLongLongBulk(c, len);
|
_addReplyLongLongBulk(c, len);
|
||||||
_addReplyToBufferOrList(c,buf,len+2);
|
_addReplyToBufferOrList(c,buf,len+2);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -135,6 +135,68 @@ start_server {tags {"protocol network"}} {
|
||||||
assert_equal [r read] {a}
|
assert_equal [r read] {a}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
test "bulk reply protocol" {
|
||||||
|
# value=2 (int encoding)
|
||||||
|
r set crlf 2
|
||||||
|
assert_equal [r rawread 5] "+OK\r\n"
|
||||||
|
r get crlf
|
||||||
|
assert_equal [r rawread 7] "\$1\r\n2\r\n"
|
||||||
|
r object encoding crlf
|
||||||
|
assert_equal [r rawread 9] "\$3\r\nint\r\n"
|
||||||
|
|
||||||
|
# value=2147483647 (int encoding)
|
||||||
|
r set crlf 2147483647
|
||||||
|
assert_equal [r rawread 5] "+OK\r\n"
|
||||||
|
r get crlf
|
||||||
|
assert_equal [r rawread 17] "\$10\r\n2147483647\r\n"
|
||||||
|
r object encoding crlf
|
||||||
|
assert_equal [r rawread 9] "\$3\r\nint\r\n"
|
||||||
|
|
||||||
|
# value=-2147483648 (int encoding)
|
||||||
|
r set crlf -2147483648
|
||||||
|
assert_equal [r rawread 5] "+OK\r\n"
|
||||||
|
r get crlf
|
||||||
|
assert_equal [r rawread 18] "\$11\r\n-2147483648\r\n"
|
||||||
|
r object encoding crlf
|
||||||
|
assert_equal [r rawread 9] "\$3\r\nint\r\n"
|
||||||
|
|
||||||
|
# value=-9223372036854775809 (embstr encoding)
|
||||||
|
r set crlf -9223372036854775809
|
||||||
|
assert_equal [r rawread 5] "+OK\r\n"
|
||||||
|
r get crlf
|
||||||
|
assert_equal [r rawread 27] "\$20\r\n-9223372036854775809\r\n"
|
||||||
|
r object encoding crlf
|
||||||
|
assert_equal [r rawread 12] "\$6\r\nembstr\r\n"
|
||||||
|
|
||||||
|
# value=9223372036854775808 (embstr encoding)
|
||||||
|
r set crlf 9223372036854775808
|
||||||
|
assert_equal [r rawread 5] "+OK\r\n"
|
||||||
|
r get crlf
|
||||||
|
assert_equal [r rawread 26] "\$19\r\n9223372036854775808\r\n"
|
||||||
|
r object encoding crlf
|
||||||
|
assert_equal [r rawread 12] "\$6\r\nembstr\r\n"
|
||||||
|
|
||||||
|
# normal sds (embstr encoding)
|
||||||
|
r set crlf aaaaaaaaaaaaaaaa
|
||||||
|
assert_equal [r rawread 5] "+OK\r\n"
|
||||||
|
r get crlf
|
||||||
|
assert_equal [r rawread 23] "\$16\r\naaaaaaaaaaaaaaaa\r\n"
|
||||||
|
r object encoding crlf
|
||||||
|
assert_equal [r rawread 12] "\$6\r\nembstr\r\n"
|
||||||
|
|
||||||
|
# normal sds (raw string encoding) with 45 'a'
|
||||||
|
set rawstr [string repeat "a" 45]
|
||||||
|
r set crlf $rawstr
|
||||||
|
assert_equal [r rawread 5] "+OK\r\n"
|
||||||
|
r get crlf
|
||||||
|
assert_equal [r rawread 52] "\$45\r\n$rawstr\r\n"
|
||||||
|
r object encoding crlf
|
||||||
|
assert_equal [r rawread 9] "\$3\r\nraw\r\n"
|
||||||
|
|
||||||
|
r del crlf
|
||||||
|
assert_equal [r rawread 4] ":1\r\n"
|
||||||
|
}
|
||||||
|
|
||||||
# restore connection settings
|
# restore connection settings
|
||||||
r readraw 0
|
r readraw 0
|
||||||
r deferred 0
|
r deferred 0
|
||||||
|
|
Loading…
Reference in New Issue