--- /dev/null
+From 479db2113643e459c11db392e0fefd6400657c9e Mon Sep 17 00:00:00 2001
+From: Constantin Rack <constantin@rack.li>
+Date: Sat, 8 Nov 2014 10:50:17 +0100
+Subject: [PATCH] Problem: return code of sodium_init() is not checked.
+
+There are two todo comments in curve_client.cpp and curve_server.cpp that suggest
+checking the return code of sodium_init() call. sodium_init() returns -1 on error,
+0 on success and 1 if it has been called before and is already initalized:
+https://github.com/jedisct1/libsodium/blob/master/src/libsodium/sodium/core.c
+
+Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar>
+---
+Status: Upstream
+
+diff --git a/src/curve_client.cpp b/src/curve_client.cpp
+index 6019c54..77fc420 100644
+--- a/src/curve_client.cpp
++++ b/src/curve_client.cpp
+@@ -38,6 +38,7 @@ zmq::curve_client_t::curve_client_t (const options_t &options_) :
+ cn_peer_nonce(1),
+ sync()
+ {
++ int rc;
+ memcpy (public_key, options_.curve_public_key, crypto_box_PUBLICKEYBYTES);
+ memcpy (secret_key, options_.curve_secret_key, crypto_box_SECRETKEYBYTES);
+ memcpy (server_key, options_.curve_server_key, crypto_box_PUBLICKEYBYTES);
+@@ -47,12 +48,12 @@ zmq::curve_client_t::curve_client_t (const options_t &options_) :
+ unsigned char tmpbytes[4];
+ randombytes(tmpbytes, 4);
+ #else
+- // todo check return code
+- sodium_init();
++ rc = sodium_init ();
++ zmq_assert (rc != -1);
+ #endif
+
+ // Generate short-term key pair
+- const int rc = crypto_box_keypair (cn_public, cn_secret);
++ rc = crypto_box_keypair (cn_public, cn_secret);
+ zmq_assert (rc == 0);
+ }
+
+diff --git a/src/curve_server.cpp b/src/curve_server.cpp
+index a3c4243..22c32d6 100644
+--- a/src/curve_server.cpp
++++ b/src/curve_server.cpp
+@@ -42,6 +42,7 @@ zmq::curve_server_t::curve_server_t (session_base_t *session_,
+ cn_peer_nonce(1),
+ sync()
+ {
++ int rc;
+ // Fetch our secret key from socket options
+ memcpy (secret_key, options_.curve_secret_key, crypto_box_SECRETKEYBYTES);
+ scoped_lock_t lock (sync);
+@@ -50,12 +51,12 @@ zmq::curve_server_t::curve_server_t (session_base_t *session_,
+ unsigned char tmpbytes[4];
+ randombytes(tmpbytes, 4);
+ #else
+- // todo check return code
+- sodium_init();
++ rc = sodium_init ();
++ zmq_assert (rc != -1);
+ #endif
+
+ // Generate short-term key pair
+- const int rc = crypto_box_keypair (cn_public, cn_secret);
++ rc = crypto_box_keypair (cn_public, cn_secret);
+ zmq_assert (rc == 0);
+ }
+
+--
+2.4.10
+