diff --git a/openssl/src/cms.rs b/openssl/src/cms.rs
index d11443b5ce846e03fea5061588f353ca214f3098..a946230a5acb9fe514b4d42f29c13977781a666c 100644
--- a/openssl/src/cms.rs
+++ b/openssl/src/cms.rs
@@ -475,14 +475,10 @@ mod test {
         // check verification result - this is an invalid signature
         // defined in openssl crypto/cms/cms.h
         const CMS_R_CERTIFICATE_VERIFY_ERROR: i32 = 100;
-        match res {
-            Err(es) => {
-                let error_array = es.errors();
-                assert_eq!(1, error_array.len());
-                let code = error_array[0].code();
-                assert_eq!(ffi::ERR_GET_REASON(code), CMS_R_CERTIFICATE_VERIFY_ERROR);
-            }
-            _ => panic!("expected CMS verification error, got Ok()"),
-        }
+        let es = res.unwrap_err();
+        let error_array = es.errors();
+        assert_eq!(1, error_array.len());
+        let code = error_array[0].reason_code();
+        assert_eq!(code, CMS_R_CERTIFICATE_VERIFY_ERROR);
     }
 }
diff --git a/openssl/src/provider.rs b/openssl/src/provider.rs
index 147fadfdbc4d84b926e8c7c8fc6322615ef9d324..01b5820af5fcac3a0b6709fba5ed7bf63ca7e581 100644
--- a/openssl/src/provider.rs
+++ b/openssl/src/provider.rs
@@ -55,6 +55,10 @@ impl Provider {
                 retain_fallbacks as _,
             ))?;
 
+            // OSSL_PROVIDER_try_load seems to leave errors on the stack, even
+            // when it succeeds.
+            let _ = ErrorStack::get();
+
             Ok(Provider::from_ptr(p))
         }
     }