diff --git a/.gitignore b/.gitignore index 9d0a5563..138475ac 100644 --- a/.gitignore +++ b/.gitignore @@ -70,6 +70,15 @@ tests/test_linger tests/test_security_null tests/test_security_plain tests/test_abstract_ipc +tests/test_connect_delay_tipc +tests/test_pair_tipc +tests/test_reqrep_device_tipc +tests/test_reqrep_tipc +tests/test_router_handover +tests/test_router_mandatory_tipc +tests/test_shutdown_stress_tipc +tests/test_sub_forward_tipc +tests/test_term_endpoint_tipc tests/test*.log tests/test*.trs src/platform.hpp* diff --git a/NEWS b/NEWS index c1c9bbb0..6506e0b7 100644 --- a/NEWS +++ b/NEWS @@ -4,9 +4,13 @@ Bug Fixes --------- +* Fixed LIBZMQ-578 - z85_decode was extremely slow + * Fixed LIBZMQ-569 - Socket server crashes with random client data + * Fixed LIBZMQ-571 - test_stream failing in some cases -* Pulled expected failing test_linger.cpp from release. + +* Pulled expected failing test_linger.cpp from release 0MQ version 4.0.1 stable, released on 2013/10/08 diff --git a/doc/zmq_msg_get.txt b/doc/zmq_msg_get.txt index 7a41c72c..980c1add 100644 --- a/doc/zmq_msg_get.txt +++ b/doc/zmq_msg_get.txt @@ -40,6 +40,7 @@ EXAMPLE ------- .Receiving a multi-frame message ---- +zmq_msg_t frame; while (true) { // Create an empty 0MQ message to hold the message frame int rc = zmq_msg_init (&frame); @@ -53,7 +54,7 @@ while (true) { fprintf (stderr, "end\n"); break; } - zmq_msg_close (frame); + zmq_msg_close (&frame); } ---- diff --git a/doc/zmq_msg_more.txt b/doc/zmq_msg_more.txt index e5f6c11c..179f4d34 100644 --- a/doc/zmq_msg_more.txt +++ b/doc/zmq_msg_more.txt @@ -45,7 +45,7 @@ while (true) { fprintf (stderr, "end\n"); break; } - zmq_msg_close (part); + zmq_msg_close (&part); } ---- diff --git a/src/zmq_utils.cpp b/src/zmq_utils.cpp index acefe717..148ef95f 100644 --- a/src/zmq_utils.cpp +++ b/src/zmq_utils.cpp @@ -142,15 +142,15 @@ char *zmq_z85_encode (char *dest, uint8_t *data, size_t size) uint8_t *zmq_z85_decode (uint8_t *dest, char *string) { - if (strlen (string) % 5 != 0) { errno = EINVAL; return NULL; } unsigned int byte_nbr = 0; unsigned int char_nbr = 0; + unsigned int string_len = strlen (string); uint32_t value = 0; - while (char_nbr < strlen (string)) { + while (char_nbr < string_len) { // Accumulate value in base 85 value = value * 85 + decoder [(uint8_t) string [char_nbr++] - 32]; if (char_nbr % 5 == 0) { @@ -173,7 +173,7 @@ uint8_t *zmq_z85_decode (uint8_t *dest, char *string) // Returns 0 on success, -1 on failure, setting errno. // Sets errno = ENOTSUP in the absence of libsodium. -int zmq_curve_keypair (char* z85_public_key, char *z85_secret_key) +int zmq_curve_keypair (char *z85_public_key, char *z85_secret_key) { #ifdef HAVE_LIBSODIUM # if crypto_box_PUBLICKEYBYTES != 32 \ @@ -185,8 +185,9 @@ int zmq_curve_keypair (char* z85_public_key, char *z85_secret_key) uint8_t secret_key [32]; int rc = crypto_box_keypair (public_key, secret_key); - // is there a sensible errno to set here? - if (rc) return rc; + // Is there a sensible errno to set here? + if (rc) + return rc; zmq_z85_encode (z85_public_key, public_key, 32); zmq_z85_encode (z85_secret_key, secret_key, 32);