aboutsummaryrefslogtreecommitdiff
path: root/openssl
diff options
context:
space:
mode:
authorSteven Fackler <[email protected]>2018-06-01 19:38:52 -0700
committerSteven Fackler <[email protected]>2018-06-01 19:38:52 -0700
commit15cb335e66d518a25950ff40906676f982b64a2b (patch)
treed15d6a387abb15910ea584d2d69ff1515eb67826 /openssl
parentMerge pull request #938 from sfackler/verified-chain (diff)
downloadrust-openssl-15cb335e66d518a25950ff40906676f982b64a2b.tar.xz
rust-openssl-15cb335e66d518a25950ff40906676f982b64a2b.zip
Fix use-after-free in cms
Closes #941
Diffstat (limited to 'openssl')
-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,