From dc09da456936e84e68e220a8c950e1abc2ebbd0b Mon Sep 17 00:00:00 2001 From: Pieter Hintjens Date: Wed, 15 Feb 2012 13:03:40 -0600 Subject: [PATCH] Return EFAULT if required arguments are null --- src/zmq.cpp | 42 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 36 insertions(+), 6 deletions(-) diff --git a/src/zmq.cpp b/src/zmq.cpp index 7058f61e..f60a42b8 100644 --- a/src/zmq.cpp +++ b/src/zmq.cpp @@ -488,17 +488,29 @@ int zmq_recvmmsg (void *s_, iovec *a_, size_t *count_, int flags_) int zmq_msg_init (zmq_msg_t *msg_) { + if (!msg_) { + errno = EFAULT; + return -1; + } return ((zmq::msg_t*) msg_)->init (); } int zmq_msg_init_size (zmq_msg_t *msg_, size_t size_) { + if (!msg_) { + errno = EFAULT; + return -1; + } return ((zmq::msg_t*) msg_)->init_size (size_); } int zmq_msg_init_data (zmq_msg_t *msg_, void *data_, size_t size_, zmq_free_fn *ffn_, void *hint_) { + if (!msg_) { + errno = EFAULT; + return -1; + } return ((zmq::msg_t*) msg_)->init_data (data_, size_, ffn_, hint_); } @@ -530,26 +542,46 @@ int zmq_msg_recv (zmq_msg_t *msg_, void *s_, int flags_) int zmq_msg_close (zmq_msg_t *msg_) { + if (!msg_) { + errno = EFAULT; + return -1; + } return ((zmq::msg_t*) msg_)->close (); } int zmq_msg_move (zmq_msg_t *dest_, zmq_msg_t *src_) { + if (!dest_ || !src_) { + errno = EFAULT; + return -1; + } return ((zmq::msg_t*) dest_)->move (*(zmq::msg_t*) src_); } int zmq_msg_copy (zmq_msg_t *dest_, zmq_msg_t *src_) { + if (!dest_ || !src_) { + errno = EFAULT; + return -1; + } return ((zmq::msg_t*) dest_)->copy (*(zmq::msg_t*) src_); } void *zmq_msg_data (zmq_msg_t *msg_) { + if (!msg_) { + errno = EFAULT; + return NULL; + } return ((zmq::msg_t*) msg_)->data (); } size_t zmq_msg_size (zmq_msg_t *msg_) { + if (!msg_) { + errno = EFAULT; + return -1; + } return ((zmq::msg_t*) msg_)->size (); } @@ -601,6 +633,10 @@ int zmq_msg_set (zmq_msg_t *msg_, int option_, const void *optval_, int zmq_poll (zmq_pollitem_t *items_, int nitems_, long timeout_) { + if (!items_) { + errno = EFAULT; + return -1; + } #if defined ZMQ_POLL_BASED_ON_POLL if (unlikely (nitems_ < 0)) { errno = EINVAL; @@ -619,12 +655,6 @@ int zmq_poll (zmq_pollitem_t *items_, int nitems_, long timeout_) return usleep (timeout_ * 1000); #endif } - - if (!items_) { - errno = EFAULT; - return -1; - } - zmq::clock_t clock; uint64_t now = 0; uint64_t end = 0;