Ensure we never return 1 from sodium_init() onload

sodium_init() will return 0 on success, -1 on failure, and 1 if sodium is
already loaded and initialized (which is not an error). In the case
where libsodium is already initialized and the system is restarted we
may return 1 from onload nif function resulting in a crash.

- change the call to sodium_init() to check for an error return (-1) and
  return -1 explicitly in this case, otherwise always return zero at the
  end of our onload function.
This commit is contained in:
Bryan Paxton 2020-07-26 14:25:24 -05:00 committed by Hans Svensson
parent 26180f42c0
commit 868a14c25d

View File

@ -36,7 +36,11 @@ int enif_crypto_load(ErlNifEnv *env, void **priv_data, ERL_NIF_TERM load_info) {
return -1;
}
return sodium_init();
if (sodium_init() == -1) {
return -1;
}
return 0;
}
/* Low-level functions (Hashing, String Equality, ...) */