diff options
| author | Steven Fackler <[email protected]> | 2018-06-01 19:54:26 -0700 |
|---|---|---|
| committer | GitHub <[email protected]> | 2018-06-01 19:54:26 -0700 |
| commit | 63afe3016c5c3e615dca2fd27a5ed09a4a025359 (patch) | |
| tree | d15d6a387abb15910ea584d2d69ff1515eb67826 | |
| parent | Merge pull request #938 from sfackler/verified-chain (diff) | |
| parent | Fix use-after-free in cms (diff) | |
| download | rust-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.rs | 22 |
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, |