aboutsummaryrefslogtreecommitdiff
path: root/openssl/src/ssl/mod.rs
diff options
context:
space:
mode:
authorSteven Fackler <[email protected]>2016-01-11 22:32:43 -0800
committerSteven Fackler <[email protected]>2016-01-11 22:36:58 -0800
commitfd6454f625bb7efde3772ae106180cc6ac7c02dd (patch)
tree1978bc0a58b1e4e01de56ae30e1bf8ce43f62695 /openssl/src/ssl/mod.rs
parentMerge pull request #328 from Cyberunner23/PemRSA (diff)
downloadrust-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.rs18
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 {