Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
hiredis
Commits
d4ebb60d
Commit
d4ebb60d
authored
Apr 21, 2011
by
Pieter Noordhuis
Browse files
More OOM checks in the protocol reader
parent
ac9fb499
Changes
2
Hide whitespace changes
Inline
Side-by-side
hiredis.c
View file @
d4ebb60d
...
@@ -539,6 +539,11 @@ redisReader *redisReaderCreate(void) {
...
@@ -539,6 +539,11 @@ redisReader *redisReaderCreate(void) {
r
->
errstr
[
0
]
=
'\0'
;
r
->
errstr
[
0
]
=
'\0'
;
r
->
fn
=
&
defaultFunctions
;
r
->
fn
=
&
defaultFunctions
;
r
->
buf
=
sdsempty
();
r
->
buf
=
sdsempty
();
if
(
r
->
buf
==
NULL
)
{
free
(
r
);
return
NULL
;
}
r
->
ridx
=
-
1
;
r
->
ridx
=
-
1
;
return
r
;
return
r
;
}
}
...
@@ -551,7 +556,13 @@ void redisReaderFree(redisReader *r) {
...
@@ -551,7 +556,13 @@ void redisReaderFree(redisReader *r) {
free
(
r
);
free
(
r
);
}
}
void
redisReaderFeed
(
redisReader
*
r
,
const
char
*
buf
,
size_t
len
)
{
int
redisReaderFeed
(
redisReader
*
r
,
const
char
*
buf
,
size_t
len
)
{
sds
newbuf
;
/* Return early when this reader is in an erroneous state. */
if
(
r
->
err
)
return
REDIS_ERR
;
/* Copy the provided buffer. */
/* Copy the provided buffer. */
if
(
buf
!=
NULL
&&
len
>=
1
)
{
if
(
buf
!=
NULL
&&
len
>=
1
)
{
/* Destroy internal buffer when it is empty and is quite large. */
/* Destroy internal buffer when it is empty and is quite large. */
...
@@ -559,11 +570,22 @@ void redisReaderFeed(redisReader *r, const char *buf, size_t len) {
...
@@ -559,11 +570,22 @@ void redisReaderFeed(redisReader *r, const char *buf, size_t len) {
sdsfree
(
r
->
buf
);
sdsfree
(
r
->
buf
);
r
->
buf
=
sdsempty
();
r
->
buf
=
sdsempty
();
r
->
pos
=
0
;
r
->
pos
=
0
;
/* r->buf should not be NULL since we just free'd a larger one. */
assert
(
r
->
buf
!=
NULL
);
}
}
r
->
buf
=
sdscatlen
(
r
->
buf
,
buf
,
len
);
newbuf
=
sdscatlen
(
r
->
buf
,
buf
,
len
);
if
(
newbuf
==
NULL
)
{
__redisReaderSetErrorOOM
(
r
);
return
REDIS_ERR
;
}
r
->
buf
=
newbuf
;
r
->
len
=
sdslen
(
r
->
buf
);
r
->
len
=
sdslen
(
r
->
buf
);
}
}
return
REDIS_OK
;
}
}
int
redisReaderGetReply
(
redisReader
*
r
,
void
**
reply
)
{
int
redisReaderGetReply
(
redisReader
*
r
,
void
**
reply
)
{
...
...
hiredis.h
View file @
d4ebb60d
...
@@ -134,7 +134,7 @@ typedef struct redisReader {
...
@@ -134,7 +134,7 @@ typedef struct redisReader {
/* Public API for the protocol parser. */
/* Public API for the protocol parser. */
redisReader
*
redisReaderCreate
(
void
);
redisReader
*
redisReaderCreate
(
void
);
void
redisReaderFree
(
redisReader
*
r
);
void
redisReaderFree
(
redisReader
*
r
);
void
redisReaderFeed
(
redisReader
*
r
,
const
char
*
buf
,
size_t
len
);
int
redisReaderFeed
(
redisReader
*
r
,
const
char
*
buf
,
size_t
len
);
int
redisReaderGetReply
(
redisReader
*
r
,
void
**
reply
);
int
redisReaderGetReply
(
redisReader
*
r
,
void
**
reply
);
/* Backwards compatibility, can be removed on big version bump. */
/* Backwards compatibility, can be removed on big version bump. */
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment