summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2018-06-20 17:28:28 -0400
committerNick Mathewson <nickm@torproject.org>2018-06-20 17:28:28 -0400
commit3a640520996ae45ed32f483432af735187bb7ee5 (patch)
treee70737959896faff0ce8ef819781a26c6c553aab
parent592e8ac395fc29113774fb15ca0227699d14e080 (diff)
downloadtor-3a640520996ae45ed32f483432af735187bb7ee5.tar.gz
tor-3a640520996ae45ed32f483432af735187bb7ee5.zip
Fix memory leak in CryptoDigest type
If you're owning a C pointer, you need to implement Drop.
-rw-r--r--src/rust/external/crypto_digest.rs10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/rust/external/crypto_digest.rs b/src/rust/external/crypto_digest.rs
index 4eae1550a2..3e8801f203 100644
--- a/src/rust/external/crypto_digest.rs
+++ b/src/rust/external/crypto_digest.rs
@@ -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