mirror of
https://github.com/zeromq/libzmq.git
synced 2025-10-30 21:50:49 +01:00
Return EFAULT if required arguments are null
This commit is contained in:
65
src/zmq.cpp
65
src/zmq.cpp
@@ -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_)
|
|||||||
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_)
|
|||||||
|
|
||||||
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_)
|
|||||||
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;
|
||||||
|
|||||||
Reference in New Issue
Block a user