Skip to content

Commit 36dcae8

Browse files
authored
Merge pull request #2283 from alex/md-ctx-errors
Don't leave errors on the stack in `MdCtxRef::digest_verify_final`
2 parents 28be7ed + 4d49588 commit 36dcae8

File tree

1 file changed

+18
-6
lines changed

1 file changed

+18
-6
lines changed

openssl/src/md_ctx.rs

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ use crate::error::ErrorStack;
8585
use crate::md::MdRef;
8686
use crate::pkey::{HasPrivate, HasPublic, PKeyRef};
8787
use crate::pkey_ctx::PkeyCtxRef;
88-
use crate::{cvt, cvt_n, cvt_p};
88+
use crate::{cvt, cvt_p};
8989
use cfg_if::cfg_if;
9090
use foreign_types::{ForeignType, ForeignTypeRef};
9191
use openssl_macros::corresponds;
@@ -309,12 +309,21 @@ impl MdCtxRef {
309309
#[inline]
310310
pub fn digest_verify_final(&mut self, signature: &[u8]) -> Result<bool, ErrorStack> {
311311
unsafe {
312-
let r = cvt_n(ffi::EVP_DigestVerifyFinal(
312+
let r = ffi::EVP_DigestVerifyFinal(
313313
self.as_ptr(),
314314
signature.as_ptr() as *mut _,
315315
signature.len(),
316-
))?;
317-
Ok(r == 1)
316+
);
317+
if r == 1 {
318+
Ok(true)
319+
} else {
320+
let errors = ErrorStack::get();
321+
if errors.errors().is_empty() {
322+
Ok(false)
323+
} else {
324+
Err(errors)
325+
}
326+
}
318327
}
319328
}
320329

@@ -424,8 +433,11 @@ mod test {
424433

425434
ctx.digest_verify_init(Some(md), &key1).unwrap();
426435
ctx.digest_verify_update(bad_data).unwrap();
427-
let valid = ctx.digest_verify_final(&signature).unwrap();
428-
assert!(!valid);
436+
assert!(matches!(
437+
ctx.digest_verify_final(&signature),
438+
Ok(false) | Err(_)
439+
));
440+
assert!(ErrorStack::get().errors().is_empty());
429441
}
430442

431443
#[test]

0 commit comments

Comments
 (0)