Commit d38951db authored by Pieter Hintjens's avatar Pieter Hintjens

Return EFAULT if required arguments are null

parent b2e2fa62
...@@ -300,6 +300,10 @@ int zmq_sendmsg (void *s_, zmq_msg_t *msg_, int flags_) ...@@ -300,6 +300,10 @@ int zmq_sendmsg (void *s_, zmq_msg_t *msg_, int flags_)
errno = ENOTSOCK; errno = ENOTSOCK;
return -1; return -1;
} }
if (!msg_) {
errno = EFAULT;
return -1;
}
zmq::socket_base_t *s = (zmq::socket_base_t *) s_; zmq::socket_base_t *s = (zmq::socket_base_t *) s_;
if(s->thread_safe()) s->lock(); if(s->thread_safe()) s->lock();
int result = inner_sendmsg (s, msg_, flags_); int result = inner_sendmsg (s, msg_, flags_);
...@@ -393,6 +397,10 @@ int zmq_recvmsg (void *s_, zmq_msg_t *msg_, int flags_) ...@@ -393,6 +397,10 @@ int zmq_recvmsg (void *s_, zmq_msg_t *msg_, int flags_)
errno = ENOTSOCK; errno = ENOTSOCK;
return -1; return -1;
} }
if (!msg_) {
errno = EFAULT;
return -1;
}
zmq::socket_base_t *s = (zmq::socket_base_t *) s_; zmq::socket_base_t *s = (zmq::socket_base_t *) s_;
if(s->thread_safe()) s->lock(); if(s->thread_safe()) s->lock();
int result = inner_recvmsg(s, msg_, flags_); int result = inner_recvmsg(s, msg_, flags_);
...@@ -502,68 +510,95 @@ int zmq_recvmmsg (void *s_, iovec *a_, size_t *count_, int flags_) ...@@ -502,68 +510,95 @@ int zmq_recvmmsg (void *s_, iovec *a_, size_t *count_, int flags_)
int zmq_msg_init (zmq_msg_t *msg_) int zmq_msg_init (zmq_msg_t *msg_)
{ {
if (!msg_) {
errno = EFAULT;
return -1;
}
return ((zmq::msg_t*) msg_)->init (); return ((zmq::msg_t*) msg_)->init ();
} }
int zmq_msg_init_size (zmq_msg_t *msg_, size_t size_) 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_); return ((zmq::msg_t*) msg_)->init_size (size_);
} }
int zmq_msg_init_data (zmq_msg_t *msg_, void *data_, size_t size_, int zmq_msg_init_data (zmq_msg_t *msg_, void *data_, size_t size_,
zmq_free_fn *ffn_, void *hint_) zmq_free_fn *ffn_, void *hint_)
{ {
if (!msg_) {
errno = EFAULT;
return -1;
}
return ((zmq::msg_t*) msg_)->init_data (data_, size_, ffn_, hint_); return ((zmq::msg_t*) msg_)->init_data (data_, size_, ffn_, hint_);
} }
int zmq_msg_close (zmq_msg_t *msg_) int zmq_msg_close (zmq_msg_t *msg_)
{ {
if (!msg_) {
errno = EFAULT;
return -1;
}
return ((zmq::msg_t*) msg_)->close (); return ((zmq::msg_t*) msg_)->close ();
} }
int zmq_msg_move (zmq_msg_t *dest_, zmq_msg_t *src_) 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_); return ((zmq::msg_t*) dest_)->move (*(zmq::msg_t*) src_);
} }
int zmq_msg_copy (zmq_msg_t *dest_, 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_); return ((zmq::msg_t*) dest_)->copy (*(zmq::msg_t*) src_);
} }
void *zmq_msg_data (zmq_msg_t *msg_) void *zmq_msg_data (zmq_msg_t *msg_)
{ {
if (!msg_) {
errno = EFAULT;
return NULL;
}
return ((zmq::msg_t*) msg_)->data (); return ((zmq::msg_t*) msg_)->data ();
} }
size_t zmq_msg_size (zmq_msg_t *msg_) size_t zmq_msg_size (zmq_msg_t *msg_)
{ {
if (!msg_) {
errno = EFAULT;
return -1;
}
return ((zmq::msg_t*) msg_)->size (); return ((zmq::msg_t*) msg_)->size ();
} }
int zmq_getmsgopt (zmq_msg_t *msg_, int option_, void *optval_, int zmq_getmsgopt (zmq_msg_t *msg_, int option_, void *optval_,
size_t *optvallen_) size_t *optvallen_)
{ {
switch (option_) { if (!msg_) {
case ZMQ_MORE: errno = EFAULT;
if (*optvallen_ < sizeof (int)) {
errno = EINVAL;
return -1;
}
*((int*) optval_) =
(((zmq::msg_t*) msg_)->flags () & zmq::msg_t::more) ? 1 : 0;
*optvallen_ = sizeof (int);
return 0;
default:
errno = EINVAL;
return -1; return -1;
} }
return (((zmq::msg_t*) msg_)->flags () & zmq::msg_t::more)? 1: 0;
} }
// Polling. // Polling.
int zmq_poll (zmq_pollitem_t *items_, int nitems_, long timeout_) 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 defined ZMQ_POLL_BASED_ON_POLL
if (unlikely (nitems_ < 0)) { if (unlikely (nitems_ < 0)) {
errno = EINVAL; errno = EINVAL;
...@@ -582,12 +617,6 @@ int zmq_poll (zmq_pollitem_t *items_, int nitems_, long timeout_) ...@@ -582,12 +617,6 @@ int zmq_poll (zmq_pollitem_t *items_, int nitems_, long timeout_)
return usleep (timeout_ * 1000); return usleep (timeout_ * 1000);
#endif #endif
} }
if (!items_) {
errno = EFAULT;
return -1;
}
zmq::clock_t clock; zmq::clock_t clock;
uint64_t now = 0; uint64_t now = 0;
uint64_t end = 0; uint64_t end = 0;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment