Commit e80bdfb4 authored by Nick Mathewson's avatar Nick Mathewson 🐘
Browse files

Correctly detect BIO_new failures

This bug was noticed by cypherpunks; fixes bug 2378.

Bugfix on svn commit r110.
parent bfde636a
Loading
Loading
Loading
Loading
+5 −0
Changes for changes/bug2378: 5 added lines, 0 removed lines.
Original line number Diff line number Diff line
  o Minor bugfixes
    - Correctly detect failure to allocate an OpenSSL BIO.  Fixes bug 2378;
      found by "cypherpunks".   This bug was introduced before the
      first Tor release, in svn commit r110.

  o Minor code simplifications and refactorings
    - Always treat failure to allocate an RSA key as an unrecoverable
      allocation error.
+6 −0
Changes for src/common/crypto.c: 6 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -524,6 +524,8 @@ crypto_pk_read_private_key_from_string(crypto_pk_env_t *env,

  /* Create a read-only memory BIO, backed by the string 's' */
  b = BIO_new_mem_buf((char*)s, (int)len);
  if (!b)
    return -1;

  if (env->key)
    RSA_free(env->key);
@@ -584,6 +586,8 @@ crypto_pk_write_key_to_string_impl(crypto_pk_env_t *env, char **dest,
  tor_assert(dest);

  b = BIO_new(BIO_s_mem()); /* Create a memory BIO */
  if (!b)
    return -1;

  /* Now you can treat b as if it were a file.  Just use the
   * PEM_*_bio_* functions instead of the non-bio variants.
@@ -651,6 +655,8 @@ crypto_pk_read_public_key_from_string(crypto_pk_env_t *env, const char *src,
  tor_assert(len<INT_MAX);

  b = BIO_new(BIO_s_mem()); /* Create a memory BIO */
  if (!b)
    return -1;

  BIO_write(b, src, (int)len);