delete `test_manual_create_destroy` test
This is just a bad test. It constructs a preallocated context object by starting from a non-preallocated context object, in a way that can't be done by users (since it directly constructs a `Secp256k1` struct) and a way that is very difficult to unwind, because you wind up with two pointers to the same underlying context object, one a "preallocated" one and one a normal one. If you then drop the preallocated one, it will call `secp256k1_context_destroy`, forcing you to manually deallocate the other one. If you drop the normally-allocated one, you need to mem::forget the preallocated one to avoid calling `secp256k1_context_destroy` twice. The whole thing is pretty fragile. There is another unit test, `test_raw_ctx`, which gets into the same situation but using the public API, and demonstrates a few ways to get out of it.
This commit is contained in:
parent
04ce50891b
commit
acf9ac13e9
34
src/lib.rs
34
src/lib.rs
|
@ -555,40 +555,6 @@ mod tests {
|
||||||
}};
|
}};
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
|
||||||
#[cfg(feature = "rand-std")]
|
|
||||||
fn test_manual_create_destroy() {
|
|
||||||
use std::marker::PhantomData;
|
|
||||||
|
|
||||||
let ctx_full = unsafe { ffi::secp256k1_context_create(AllPreallocated::FLAGS) };
|
|
||||||
let ctx_sign = unsafe { ffi::secp256k1_context_create(SignOnlyPreallocated::FLAGS) };
|
|
||||||
let ctx_vrfy = unsafe { ffi::secp256k1_context_create(VerifyOnlyPreallocated::FLAGS) };
|
|
||||||
|
|
||||||
let full: Secp256k1<AllPreallocated> = Secp256k1 { ctx: ctx_full, phantom: PhantomData };
|
|
||||||
let sign: Secp256k1<SignOnlyPreallocated> =
|
|
||||||
Secp256k1 { ctx: ctx_sign, phantom: PhantomData };
|
|
||||||
let vrfy: Secp256k1<VerifyOnlyPreallocated> =
|
|
||||||
Secp256k1 { ctx: ctx_vrfy, phantom: PhantomData };
|
|
||||||
|
|
||||||
let (sk, pk) = full.generate_keypair(&mut rand::thread_rng());
|
|
||||||
let msg = Message::from_digest_slice(&[2u8; 32]).unwrap();
|
|
||||||
// Try signing
|
|
||||||
assert_eq!(sign.sign_ecdsa(&msg, &sk), full.sign_ecdsa(&msg, &sk));
|
|
||||||
let sig = full.sign_ecdsa(&msg, &sk);
|
|
||||||
|
|
||||||
// Try verifying
|
|
||||||
assert!(vrfy.verify_ecdsa(&msg, &sig, &pk).is_ok());
|
|
||||||
assert!(full.verify_ecdsa(&msg, &sig, &pk).is_ok());
|
|
||||||
|
|
||||||
drop(full);
|
|
||||||
drop(sign);
|
|
||||||
drop(vrfy);
|
|
||||||
|
|
||||||
unsafe { ffi::secp256k1_context_destroy(ctx_vrfy) };
|
|
||||||
unsafe { ffi::secp256k1_context_destroy(ctx_sign) };
|
|
||||||
unsafe { ffi::secp256k1_context_destroy(ctx_full) };
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
#[cfg(feature = "rand-std")]
|
#[cfg(feature = "rand-std")]
|
||||||
// In rustc 1.72 this Clippy lint was pulled out of clippy and into rustc, and
|
// In rustc 1.72 this Clippy lint was pulled out of clippy and into rustc, and
|
||||||
|
|
Loading…
Reference in New Issue