summaryrefslogtreecommitdiff
path: root/evmap.c
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2011-06-08 14:18:41 -0400
committerNick Mathewson <nickm@torproject.org>2011-06-08 14:23:37 -0400
commit89d5e09e4d3a4666bf5eba7d6807e183e861a70a (patch)
tree3306c4eaba156e01bf31a83153a87fbc21af5fbb /evmap.c
parent4461f1a096621db8b24edafac409e0f05072d35a (diff)
downloadlibevent-89d5e09e4d3a4666bf5eba7d6807e183e861a70a.tar.gz
Add some missing checks for mm_calloc failures
Found by Gilad Benjamini
Diffstat (limited to 'evmap.c')
-rw-r--r--evmap.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/evmap.c b/evmap.c
index ebedb788..f3379988 100644
--- a/evmap.c
+++ b/evmap.c
@@ -127,7 +127,8 @@ HT_GENERATE(event_io_map, event_map_entry, map_node, hashsocket, eqsocket,
}, \
{ \
_ent = mm_calloc(1,sizeof(struct event_map_entry)+fdinfo_len); \
- EVUTIL_ASSERT(_ent); \
+ if (EVUTIL_UNLIKELY(_ent == NULL)) \
+ return (-1); \
_ent->fd = slot; \
(ctor)(&_ent->ent.type); \
_HT_FOI_INSERT(map_node, map, &_key, _ent, ptr) \
@@ -159,14 +160,16 @@ void evmap_io_clear(struct event_io_map *ctx)
(x) = (struct type *)((map)->entries[slot])
/* As GET_SLOT, but construct the entry for 'slot' if it is not present,
by allocating enough memory for a 'struct type', and initializing the new
- value by calling the function 'ctor' on it.
+ value by calling the function 'ctor' on it. Makes the function
+ return -1 on allocation failure.
*/
#define GET_SIGNAL_SLOT_AND_CTOR(x, map, slot, type, ctor, fdinfo_len) \
do { \
if ((map)->entries[slot] == NULL) { \
(map)->entries[slot] = \
mm_calloc(1,sizeof(struct type)+fdinfo_len); \
- EVUTIL_ASSERT((map)->entries[slot] != NULL); \
+ if (EVUTIL_UNLIKELY((map)->entries[slot] == NULL)) \
+ return (-1); \
(ctor)((struct type *)(map)->entries[slot]); \
} \
(x) = (struct type *)((map)->entries[slot]); \