0003-Problem-return-code-of-sodium_init-is-not-checked.patch 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. From 479db2113643e459c11db392e0fefd6400657c9e Mon Sep 17 00:00:00 2001
  2. From: Constantin Rack <constantin@rack.li>
  3. Date: Sat, 8 Nov 2014 10:50:17 +0100
  4. Subject: [PATCH] Problem: return code of sodium_init() is not checked.
  5. There are two todo comments in curve_client.cpp and curve_server.cpp that suggest
  6. checking the return code of sodium_init() call. sodium_init() returns -1 on error,
  7. 0 on success and 1 if it has been called before and is already initalized:
  8. https://github.com/jedisct1/libsodium/blob/master/src/libsodium/sodium/core.c
  9. Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar>
  10. ---
  11. Status: Upstream
  12. diff --git a/src/curve_client.cpp b/src/curve_client.cpp
  13. index 6019c54..77fc420 100644
  14. --- a/src/curve_client.cpp
  15. +++ b/src/curve_client.cpp
  16. @@ -38,6 +38,7 @@ zmq::curve_client_t::curve_client_t (const options_t &options_) :
  17. cn_peer_nonce(1),
  18. sync()
  19. {
  20. + int rc;
  21. memcpy (public_key, options_.curve_public_key, crypto_box_PUBLICKEYBYTES);
  22. memcpy (secret_key, options_.curve_secret_key, crypto_box_SECRETKEYBYTES);
  23. memcpy (server_key, options_.curve_server_key, crypto_box_PUBLICKEYBYTES);
  24. @@ -47,12 +48,12 @@ zmq::curve_client_t::curve_client_t (const options_t &options_) :
  25. unsigned char tmpbytes[4];
  26. randombytes(tmpbytes, 4);
  27. #else
  28. - // todo check return code
  29. - sodium_init();
  30. + rc = sodium_init ();
  31. + zmq_assert (rc != -1);
  32. #endif
  33. // Generate short-term key pair
  34. - const int rc = crypto_box_keypair (cn_public, cn_secret);
  35. + rc = crypto_box_keypair (cn_public, cn_secret);
  36. zmq_assert (rc == 0);
  37. }
  38. diff --git a/src/curve_server.cpp b/src/curve_server.cpp
  39. index a3c4243..22c32d6 100644
  40. --- a/src/curve_server.cpp
  41. +++ b/src/curve_server.cpp
  42. @@ -42,6 +42,7 @@ zmq::curve_server_t::curve_server_t (session_base_t *session_,
  43. cn_peer_nonce(1),
  44. sync()
  45. {
  46. + int rc;
  47. // Fetch our secret key from socket options
  48. memcpy (secret_key, options_.curve_secret_key, crypto_box_SECRETKEYBYTES);
  49. scoped_lock_t lock (sync);
  50. @@ -50,12 +51,12 @@ zmq::curve_server_t::curve_server_t (session_base_t *session_,
  51. unsigned char tmpbytes[4];
  52. randombytes(tmpbytes, 4);
  53. #else
  54. - // todo check return code
  55. - sodium_init();
  56. + rc = sodium_init ();
  57. + zmq_assert (rc != -1);
  58. #endif
  59. // Generate short-term key pair
  60. - const int rc = crypto_box_keypair (cn_public, cn_secret);
  61. + rc = crypto_box_keypair (cn_public, cn_secret);
  62. zmq_assert (rc == 0);
  63. }
  64. --
  65. 2.4.10