summaryrefslogtreecommitdiff
path: root/event.c
diff options
context:
space:
mode:
authorJohn Ohl <john@collabriasoftware.com>2014-09-16 22:25:52 -0400
committerNick Mathewson <nickm@torproject.org>2014-09-18 11:37:28 -0400
commit3cc0eace2e3fb72310af7d7f8c0f8ffac6cb1635 (patch)
treeadbfe6fbe77ded9913dedf535a99132044e306bc /event.c
parent35f107de922ef64b2b1809af9b6ebe5db1abbb33 (diff)
downloadlibevent-3cc0eace2e3fb72310af7d7f8c0f8ffac6cb1635.tar.gz
Fix use-after-free error in EV_CLOSURE_EVENT callback
Diffstat (limited to 'event.c')
-rw-r--r--event.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/event.c b/event.c
index a5e8d0b1..f3194977 100644
--- a/event.c
+++ b/event.c
@@ -1569,8 +1569,9 @@ event_process_active_single_queue(struct event_base *base,
event_persist_closure(base, ev);
break;
case EV_CLOSURE_EVENT: {
- void (*evcb_callback)(evutil_socket_t, short, void *) = *ev->ev_callback;
+ void (*evcb_callback)(evutil_socket_t, short, void *);
EVUTIL_ASSERT(ev != NULL);
+ evcb_callback = *ev->ev_callback;
EVBASE_RELEASE_LOCK(base, th_base_lock);
evcb_callback(ev->ev_fd, ev->ev_res, ev->ev_arg);
}