diff options
| author | Steven Fackler <[email protected]> | 2016-01-11 22:32:43 -0800 |
|---|---|---|
| committer | Steven Fackler <[email protected]> | 2016-01-11 22:36:58 -0800 |
| commit | fd6454f625bb7efde3772ae106180cc6ac7c02dd (patch) | |
| tree | 1978bc0a58b1e4e01de56ae30e1bf8ce43f62695 /openssl/src/ssl/mod.rs | |
| parent | Merge pull request #328 from Cyberunner23/PemRSA (diff) | |
| download | rust-openssl-fd6454f625bb7efde3772ae106180cc6ac7c02dd.tar.xz rust-openssl-fd6454f625bb7efde3772ae106180cc6ac7c02dd.zip | |
Add stream panic propagation behind a nightly feature gate
Diffstat (limited to 'openssl/src/ssl/mod.rs')
| -rw-r--r-- | openssl/src/ssl/mod.rs | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/openssl/src/ssl/mod.rs b/openssl/src/ssl/mod.rs index 955f10fd..9ea8a27b 100644 --- a/openssl/src/ssl/mod.rs +++ b/openssl/src/ssl/mod.rs @@ -26,8 +26,7 @@ use std::os::windows::io::{AsRawSocket, RawSocket}; use ffi; use ffi_extras; use dh::DH; -use ssl::error::{NonblockingSslError, SslError, StreamError, OpenSslErrors, OpenSslError, - OpensslError}; +use ssl::error::{NonblockingSslError, SslError, OpenSslError, OpensslError}; use x509::{X509StoreContext, X509FileType, X509}; use crypto::pkey::PKey; @@ -1137,6 +1136,8 @@ impl<S: Read + Write> SslStream<S> { impl<S> SslStream<S> { fn make_error(&mut self, ret: c_int) -> Error { + self.check_panic(); + match self.ssl.get_error(ret) { LibSslError::ErrorSsl => Error::Ssl(OpenSslError::get_stack()), LibSslError::ErrorSyscall => { @@ -1163,6 +1164,8 @@ impl<S> SslStream<S> { } fn make_old_error(&mut self, ret: c_int) -> SslError { + self.check_panic(); + match self.ssl.get_error(ret) { LibSslError::ErrorSsl => SslError::get(), LibSslError::ErrorSyscall => { @@ -1193,6 +1196,17 @@ impl<S> SslStream<S> { } } + #[cfg(feature = "nightly")] + fn check_panic(&mut self) { + if let Some(err) = unsafe { bio::take_panic::<S>(self.ssl.get_raw_rbio()) } { + ::std::panic::propagate(err) + } + } + + #[cfg(not(feature = "nightly"))] + fn check_panic(&mut self) { + } + fn get_bio_error(&mut self) -> io::Error { let error = unsafe { bio::take_error::<S>(self.ssl.get_raw_rbio()) }; match error { |