Fix off-by-one error in seekNewline

master
michael-grunder 2020-10-19 10:11:51 -07:00
parent bd7488d27d
commit 410c24d2a9
1 changed files with 13 additions and 7 deletions

20
read.c
View File

@ -123,21 +123,27 @@ static char *readBytes(redisReader *r, unsigned int bytes) {
/* Find pointer to \r\n. */
static char *seekNewline(char *s, size_t len) {
char *_s = s, *ret;
int _len = len-1;
char *ret;
/* Exclude the last character from the searched length because the found
* '\r' should be followed by a '\n' */
while ((ret = memchr(_s, '\r', _len)) != NULL) {
/* We cannot match with fewer than 2 bytes */
if (len < 2)
return NULL;
/* Search up to len - 1 characters */
len--;
/* Look for the \r */
while ((ret = memchr(s, '\r', len)) != NULL) {
if (ret[1] == '\n') {
/* Found. */
break;
}
/* Continue searching. */
ret++;
_len -= ret - _s;
_s = ret;
len -= ret - s;
s = ret;
}
return ret;
}