summaryrefslogtreecommitdiff
path: root/bufferevent.c
diff options
context:
space:
mode:
authorlilei <dlilei@126.com>2021-02-03 14:19:57 +0800
committerAzat Khuzhin <azat@libevent.org>2021-02-04 00:20:36 +0300
commitbc25889fb3738cdd4d85e3ac162fd6cb2fde9839 (patch)
tree5f36a9e6b3d060cd945265e1431a14a5fe0edd28 /bufferevent.c
parentf17eb6f509b41f0f9ccb719cb939d3dad2f143cf (diff)
downloadlibevent-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.c7
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