diff options
author | lilei <dlilei@126.com> | 2021-02-03 14:19:57 +0800 |
---|---|---|
committer | Azat Khuzhin <azat@libevent.org> | 2021-02-04 00:20:36 +0300 |
commit | bc25889fb3738cdd4d85e3ac162fd6cb2fde9839 (patch) | |
tree | 5f36a9e6b3d060cd945265e1431a14a5fe0edd28 /bufferevent.c | |
parent | f17eb6f509b41f0f9ccb719cb939d3dad2f143cf (diff) | |
download | libevent-bc25889fb3738cdd4d85e3ac162fd6cb2fde9839.tar.gz |
Check return value of evbuffer_remove() in bufferevent_read()
The conflict cast convertion between the return value of
bufferevent_read() and evbuffer_remove(), int(-1)->size_t(An undefined
maximum)
Add test case of bufferevent_read() should return 0 in case of
evbuffer_remove() returns -1
Fixes: #1132
Diffstat (limited to 'bufferevent.c')
-rw-r--r-- | bufferevent.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/bufferevent.c b/bufferevent.c index 08c0486c..27f2a9ba 100644 --- a/bufferevent.c +++ b/bufferevent.c @@ -469,7 +469,12 @@ bufferevent_write_buffer(struct bufferevent *bufev, struct evbuffer *buf) size_t bufferevent_read(struct bufferevent *bufev, void *data, size_t size) { - return (evbuffer_remove(bufev->input, data, size)); + int r = evbuffer_remove(bufev->input, data, size); + + if (r == -1) + return 0; + + return r; } int |