diff options
author | Nick Mathewson <nickm@torproject.org> | 2014-08-29 14:59:17 -0400 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2014-08-29 14:59:17 -0400 |
commit | 60f8f729d364304abefa25d029260555a5954077 (patch) | |
tree | 4981c6427434d6d847fab9b05c24e2b1ea075ec5 | |
parent | 6466e88ac1dac48eaa9435ce9a45d6496eed7abb (diff) | |
download | libevent-60f8f729d364304abefa25d029260555a5954077.tar.gz |
Consistently check for failure from evbuffer_pullup()
Closes issue #148.
-rw-r--r-- | buffer.c | 2 | ||||
-rw-r--r-- | event_tagging.c | 6 |
2 files changed, 8 insertions, 0 deletions
@@ -2363,9 +2363,11 @@ evbuffer_write_atmost(struct evbuffer *buffer, evutil_socket_t fd, /* XXX(nickm) Don't disable this code until we know if * the WSARecv code above works. */ void *p = evbuffer_pullup(buffer, howmuch); + EVUTIL_ASSERT(p || !howmuch); n = send(fd, p, howmuch, 0); #else void *p = evbuffer_pullup(buffer, howmuch); + EVUTIL_ASSERT(p || !howmuch); n = write(fd, p, howmuch); #endif #ifdef USE_SENDFILE diff --git a/event_tagging.c b/event_tagging.c index a83e719f..eea4bfce 100644 --- a/event_tagging.c +++ b/event_tagging.c @@ -206,6 +206,8 @@ decode_tag_internal(ev_uint32_t *ptag, struct evbuffer *evbuf, int dodrain) */ data = evbuffer_pullup( evbuf, len < sizeof(number) + 1 ? len : sizeof(number) + 1); + if (!data) + return (-1); while (count++ < len) { ev_uint8_t lower = *data++; @@ -312,6 +314,8 @@ do { \ \ /* XXX(niels): faster? */ \ data = evbuffer_pullup(evbuf, offset + 1) + offset; \ + if (!data) \ + return (-1); \ \ nibbles = ((data[0] & 0xf0) >> 4) + 1; \ if (nibbles > maxnibbles || (nibbles >> 1) + 1 > len) \ @@ -319,6 +323,8 @@ do { \ len = (nibbles >> 1) + 1; \ \ data = evbuffer_pullup(evbuf, offset + len) + offset; \ + if (!data) \ + return (-1); \ \ while (nibbles > 0) { \ number <<= 4; \ |