]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Fix memory leak in CryptoDigest type
authorNick Mathewson <nickm@torproject.org>
Wed, 20 Jun 2018 21:28:28 +0000 (17:28 -0400)
committerNick Mathewson <nickm@torproject.org>
Wed, 20 Jun 2018 21:28:28 +0000 (17:28 -0400)
If you're owning a C pointer, you need to implement Drop.

src/rust/external/crypto_digest.rs

index 4eae1550a23c2e96108d0b257e0c3e110d73341e..3e8801f203659931601562940e4d553c3fc01188 100644 (file)
@@ -140,7 +140,7 @@ extern "C" {
     fn crypto_digest_new() -> *mut crypto_digest_t;
     fn crypto_digest256_new(algorithm: digest_algorithm_t) -> *mut crypto_digest_t;
     fn crypto_digest512_new(algorithm: digest_algorithm_t) -> *mut crypto_digest_t;
-    fn crypto_digest_free(digest: *mut crypto_digest_t);
+    fn crypto_digest_free_(digest: *mut crypto_digest_t);
     fn crypto_digest_add_bytes(digest: *mut crypto_digest_t, data: *const c_char, len: size_t);
     fn crypto_digest_get_digest(digest: *mut crypto_digest_t, out: *mut c_char, out_len: size_t);
     fn crypto_digest_dup(digest: *const crypto_digest_t) -> *mut crypto_digest_t;
@@ -292,6 +292,14 @@ impl CryptoDigest {
     }
 }
 
+impl Drop for CryptoDigest {
+    fn drop(&mut self) {
+        unsafe {
+            crypto_digest_free_(self.0 as *mut crypto_digest_t);
+        }
+    }
+}
+
 /// Get the 256-bit digest output of a `crypto_digest_t`.
 ///
 /// # Inputs