aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteven Fackler <[email protected]>2018-06-01 19:54:26 -0700
committerGitHub <[email protected]>2018-06-01 19:54:26 -0700
commit63afe3016c5c3e615dca2fd27a5ed09a4a025359 (patch)
treed15d6a387abb15910ea584d2d69ff1515eb67826
parentMerge pull request #938 from sfackler/verified-chain (diff)
parentFix use-after-free in cms (diff)
downloadrust-openssl-63afe3016c5c3e615dca2fd27a5ed09a4a025359.tar.xz
rust-openssl-63afe3016c5c3e615dca2fd27a5ed09a4a025359.zip
Merge pull request #942 from sfackler/fix-cms-crash
Fix use-after-free in cms
-rw-r--r--openssl/src/cms.rs22
1 files changed, 7 insertions, 15 deletions
diff --git a/openssl/src/cms.rs b/openssl/src/cms.rs
index 6ee62fd0..5781a01f 100644
--- a/openssl/src/cms.rs
+++ b/openssl/src/cms.rs
@@ -138,22 +138,14 @@ impl CmsContentInfo {
flags: CMSOptions,
) -> Result<CmsContentInfo, ErrorStack> {
unsafe {
- let signcert = match signcert {
- Some(cert) => cert.as_ptr(),
- None => ptr::null_mut(),
- };
- let pkey = match pkey {
- Some(pkey) => pkey.as_ptr(),
- None => ptr::null_mut(),
- };
- let data_bio_ptr = match data {
- Some(data) => MemBioSlice::new(data)?.as_ptr(),
- None => ptr::null_mut(),
- };
- let certs = match certs {
- Some(certs) => certs.as_ptr(),
- None => ptr::null_mut(),
+ let signcert = signcert.map_or(ptr::null_mut(), |p| p.as_ptr());
+ let pkey = pkey.map_or(ptr::null_mut(), |p| p.as_ptr());
+ let data_bio = match data {
+ Some(data) => Some(MemBioSlice::new(data)?),
+ None => None,
};
+ let data_bio_ptr = data_bio.as_ref().map_or(ptr::null_mut(), |p| p.as_ptr());
+ let certs = certs.map_or(ptr::null_mut(), |p| p.as_ptr());
let cms = cvt_p(ffi::CMS_sign(
signcert,