Problem: No error-checking of setsockopt ZMQ_CURVE_* z85 keys. Solves #1094.

This commit is contained in:
Constantin Rack 2014-11-07 16:56:49 +01:00
parent 6d9f97ad60
commit 1844fc3284

View File

@ -376,20 +376,22 @@ int zmq::options_t::setsockopt (int option_, const void *optval_,
}
else
if (optvallen_ == CURVE_KEYSIZE_Z85 + 1) {
zmq_z85_decode (curve_public_key, (char *) optval_);
if (zmq_z85_decode (curve_public_key, (char *) optval_)) {
mechanism = ZMQ_CURVE;
return 0;
}
}
else
// Deprecated, not symmetrical with zmq_getsockopt
if (optvallen_ == CURVE_KEYSIZE_Z85) {
char z85_key [41];
char z85_key [CURVE_KEYSIZE_Z85 + 1];
memcpy (z85_key, (char *) optval_, CURVE_KEYSIZE_Z85);
z85_key [CURVE_KEYSIZE_Z85] = 0;
zmq_z85_decode (curve_public_key, z85_key);
if (zmq_z85_decode (curve_public_key, z85_key)) {
mechanism = ZMQ_CURVE;
return 0;
}
}
break;
case ZMQ_CURVE_SECRETKEY:
@ -400,20 +402,22 @@ int zmq::options_t::setsockopt (int option_, const void *optval_,
}
else
if (optvallen_ == CURVE_KEYSIZE_Z85 + 1) {
zmq_z85_decode (curve_secret_key, (char *) optval_);
if (zmq_z85_decode (curve_secret_key, (char *) optval_)) {
mechanism = ZMQ_CURVE;
return 0;
}
}
else
// Deprecated, not symmetrical with zmq_getsockopt
if (optvallen_ == CURVE_KEYSIZE_Z85) {
char z85_key [41];
char z85_key [CURVE_KEYSIZE_Z85 + 1];
memcpy (z85_key, (char *) optval_, CURVE_KEYSIZE_Z85);
z85_key [CURVE_KEYSIZE_Z85] = 0;
zmq_z85_decode (curve_secret_key, z85_key);
if (zmq_z85_decode (curve_secret_key, z85_key)) {
mechanism = ZMQ_CURVE;
return 0;
}
}
break;
case ZMQ_CURVE_SERVERKEY:
@ -425,22 +429,24 @@ int zmq::options_t::setsockopt (int option_, const void *optval_,
}
else
if (optvallen_ == CURVE_KEYSIZE_Z85 + 1) {
zmq_z85_decode (curve_server_key, (char *) optval_);
if (zmq_z85_decode (curve_server_key, (char *) optval_)) {
mechanism = ZMQ_CURVE;
as_server = 0;
return 0;
}
}
else
// Deprecated, not symmetrical with zmq_getsockopt
if (optvallen_ == CURVE_KEYSIZE_Z85) {
char z85_key [41];
char z85_key [CURVE_KEYSIZE_Z85 + 1];
memcpy (z85_key, (char *) optval_, CURVE_KEYSIZE_Z85);
z85_key [CURVE_KEYSIZE_Z85] = 0;
zmq_z85_decode (curve_server_key, z85_key);
if (zmq_z85_decode (curve_server_key, z85_key)) {
mechanism = ZMQ_CURVE;
as_server = 0;
return 0;
}
}
break;
# endif