diff options
author | Azat Khuzhin <azat@libevent.org> | 2019-07-31 10:34:38 +0300 |
---|---|---|
committer | Azat Khuzhin <azat@libevent.org> | 2019-07-31 10:43:57 +0300 |
commit | bdcade47224f154052c927aed3c363a18b37112e (patch) | |
tree | 4dec4e048a54e9870758c33a02e400437752e78c /buffer.c | |
parent | 1947dd0ddbced0d8f9891656c820353f82261c52 (diff) | |
download | libevent-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.c | 7 |
1 files changed, 6 insertions, 1 deletions
@@ -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 * |