summaryrefslogtreecommitdiff
path: root/buffer.c
diff options
context:
space:
mode:
authorAzat Khuzhin <azat@libevent.org>2019-07-31 10:34:38 +0300
committerAzat Khuzhin <azat@libevent.org>2019-07-31 10:43:57 +0300
commitbdcade47224f154052c927aed3c363a18b37112e (patch)
tree4dec4e048a54e9870758c33a02e400437752e78c /buffer.c
parent1947dd0ddbced0d8f9891656c820353f82261c52 (diff)
downloadlibevent-bdcade47224f154052c927aed3c363a18b37112e.tar.gz
buffer: fix possible NULL dereference in evbuffer_setcb() on ENOMEM
[ @azat: - add return heredoc for evbuffer_setcb() - add unit test with event_set_mem_functions() - look through the report from abi-compliance-checker/abi-dumper ] Closes: #855
Diffstat (limited to 'buffer.c')
-rw-r--r--buffer.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/buffer.c b/buffer.c
index 6ad8fd24..01418f5a 100644
--- a/buffer.c
+++ b/buffer.c
@@ -3321,7 +3321,7 @@ evbuffer_add_file(struct evbuffer *buf, int fd, ev_off_t offset, ev_off_t length
return r;
}
-void
+int
evbuffer_setcb(struct evbuffer *buffer, evbuffer_cb cb, void *cbarg)
{
EVBUFFER_LOCK(buffer);
@@ -3332,10 +3332,15 @@ evbuffer_setcb(struct evbuffer *buffer, evbuffer_cb cb, void *cbarg)
if (cb) {
struct evbuffer_cb_entry *ent =
evbuffer_add_cb(buffer, NULL, cbarg);
+ if (!ent) {
+ EVBUFFER_UNLOCK(buffer);
+ return -1;
+ }
ent->cb.cb_obsolete = cb;
ent->flags |= EVBUFFER_CB_OBSOLETE;
}
EVBUFFER_UNLOCK(buffer);
+ return 0;
}
struct evbuffer_cb_entry *