Removing memory leaks in rsa setter test
authorAnkit Shah <ankshah@fb.com>
Thu, 29 Jun 2017 20:24:19 +0000 (13:24 -0700)
committerFacebook Github Bot <facebook-github-bot@users.noreply.github.com>
Thu, 29 Jun 2017 20:35:27 +0000 (13:35 -0700)
Summary:
Using RSA free and removing unnecessary Bignum allocations to prevent
test failures due to memory leaks

Reviewed By: anirudhvr

Differential Revision: D5348232

fbshipit-source-id: 7c76f3dced26a3080fc82b4bacc06bc0768d6fda

CMakeLists.txt
folly/portability/test/OpenSSLPortabilityTest.cpp

index 7d476c5c1a726a23af2b1e2bc12a8c0c867c61c7..be37adda30efd102eae79004732375772547c744 100755 (executable)
@@ -443,6 +443,7 @@ if (BUILD_TESTS)
       TEST constexpr_test SOURCES ConstexprTest.cpp
       TEST libgen-test SOURCES LibgenTest.cpp
       TEST time-test SOURCES TimeTest.cpp
+      TEST openssl_portability_test SOURCES OpenSSLPortabilityTest.cpp
 
     DIRECTORY ssl/test/
       TEST openssl_hash_test SOURCES OpenSSLHashTest.cpp
index bb95a75577af392a19ca7b10d844dbba102d09ec..7c1bbf87c71fdd1cf2497449b12ddfdfdc541d45 100644 (file)
  */
 
 #include <folly/portability/GTest.h>
-#include <folly/portability/OpenSSL.h>
+#include <folly/ssl/OpenSSLPtrTypes.h>
 
 using namespace folly;
+using namespace folly::ssl;
 using namespace testing;
 
 TEST(OpenSSLPortabilityTest, TestRSASetter) {
-  RSA* r = RSA_new();
-  RSA* public_key = RSA_new();
+  RsaUniquePtr r(RSA_new());
   BIGNUM* n = BN_new();
   BIGNUM* e = BN_new();
   BIGNUM* d = BN_new();
-  const BIGNUM* n_actual = BN_new();
-  const BIGNUM* e_actual = BN_new();
-  const BIGNUM* d_actual = BN_new();
+  BIGNUM* n_actual;
+  BIGNUM* e_actual;
+  BIGNUM* d_actual;
   EXPECT_TRUE(BN_set_bit(n, 1));
   EXPECT_TRUE(BN_set_bit(e, 3));
   EXPECT_TRUE(BN_set_bit(d, 2));
-  RSA_set0_key(r, n, e, d);
-  RSA_get0_key(r, &n_actual, &e_actual, &d_actual);
+  RSA_set0_key(r.get(), n, e, d);
+  RSA_get0_key(
+      r.get(),
+      (const BIGNUM**)&n_actual,
+      (const BIGNUM**)&e_actual,
+      (const BIGNUM**)&d_actual);
   // BN_cmp returns 0 if the two BIGNUMs are equal
   EXPECT_FALSE(BN_cmp(n, n_actual));
   EXPECT_FALSE(BN_cmp(e, e_actual));
   EXPECT_FALSE(BN_cmp(d, d_actual));
 
-  RSA_set0_key(public_key, n, e, nullptr);
-  const BIGNUM* n_public = BN_new();
-  const BIGNUM* e_public = BN_new();
-  RSA_get0_key(public_key, &n_public, &e_public, nullptr);
-  EXPECT_FALSE(BN_cmp(n, n_public));
-  EXPECT_FALSE(BN_cmp(e, e_public));
+  RsaUniquePtr public_key(RSA_new());
+  BIGNUM* n_public = BN_new();
+  BIGNUM* e_public = BN_new();
+  EXPECT_TRUE(BN_set_bit(n_public, 1));
+  EXPECT_TRUE(BN_set_bit(e_public, 3));
+  RSA_set0_key(public_key.get(), n_public, e_public, nullptr);
+  BIGNUM* n_public_actual;
+  BIGNUM* e_public_actual;
+  RSA_get0_key(
+      public_key.get(),
+      (const BIGNUM**)&n_public_actual,
+      (const BIGNUM**)&e_public_actual,
+      nullptr);
+  EXPECT_FALSE(BN_cmp(n_public, n_public_actual));
+  EXPECT_FALSE(BN_cmp(e_public, e_public_actual));
 }