Skip to content

Commit 61ffcd2

Browse files
authored
Merge pull request #249 from dhardy/log-display
Log error details via Display instead of Debug
2 parents 2f07817 + a32be9f commit 61ffcd2

File tree

4 files changed

+34
-14
lines changed

4 files changed

+34
-14
lines changed

src/error.rs

+10-2
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ impl ErrorKind {
5252
/// A description of this error kind
5353
pub fn description(self) -> &'static str {
5454
match self {
55-
ErrorKind::Unavailable => "permanent failure or unavailable",
55+
ErrorKind::Unavailable => "permanent failure",
5656
ErrorKind::Transient => "transient failure",
5757
ErrorKind::NotReady => "not ready yet",
5858
ErrorKind::Other => "uncategorised",
@@ -123,7 +123,15 @@ impl Error {
123123

124124
impl fmt::Display for Error {
125125
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
126-
write!(f, "RNG error [{}]: {}", self.kind.description(), self.msg())
126+
#[cfg(feature="std")] {
127+
if let Some(ref cause) = self.cause {
128+
return write!(f, "{} ({}); cause: {}",
129+
self.msg(),
130+
self.kind.description(),
131+
cause);
132+
}
133+
}
134+
write!(f, "{} ({})", self.msg(), self.kind.description())
127135
}
128136
}
129137

src/lib.rs

+16-5
Original file line numberDiff line numberDiff line change
@@ -953,8 +953,8 @@ thread_local!(
953953
static THREAD_RNG_KEY: Rc<RefCell<ReseedingRng<StdRng, EntropyRng>>> = {
954954
const THREAD_RNG_RESEED_THRESHOLD: u64 = 32_768;
955955
let mut entropy_source = EntropyRng::new();
956-
let r = StdRng::from_rng(&mut entropy_source)
957-
.expect("could not initialize thread_rng");
956+
let r = StdRng::from_rng(&mut entropy_source).unwrap_or_else(|err|
957+
panic!("could not initialize thread_rng: {}", err));
958958
let rng = ReseedingRng::new(r,
959959
THREAD_RNG_RESEED_THRESHOLD,
960960
entropy_source);
@@ -1063,7 +1063,8 @@ impl Rng for EntropyRng {
10631063
}
10641064

10651065
fn fill_bytes(&mut self, dest: &mut [u8]) {
1066-
self.try_fill_bytes(dest).unwrap();
1066+
self.try_fill_bytes(dest).unwrap_or_else(|err|
1067+
panic!("all entropy sources failed; first error: {}", err))
10671068
}
10681069

10691070
fn try_fill_bytes(&mut self, dest: &mut [u8]) -> Result<(), Error> {
@@ -1087,13 +1088,15 @@ impl Rng for EntropyRng {
10871088
let os_rng_result = try_os_new(dest);
10881089
match os_rng_result {
10891090
Ok(os_rng) => {
1091+
debug!("EntropyRng: using OsRng");
10901092
switch_rng = Some(EntropySource::Os(os_rng));
10911093
}
10921094
Err(os_rng_error) => {
10931095
warn!("EntropyRng: OsRng failed [falling back to JitterRng]: {}",
10941096
os_rng_error);
10951097
match try_jitter_new(dest) {
10961098
Ok(jitter_rng) => {
1099+
debug!("EntropyRng: using JitterRng");
10971100
switch_rng = Some(EntropySource::Jitter(jitter_rng));
10981101
}
10991102
Err(_jitter_error) => {
@@ -1112,6 +1115,7 @@ impl Rng for EntropyRng {
11121115
os_rng_error);
11131116
match try_jitter_new(dest) {
11141117
Ok(jitter_rng) => {
1118+
debug!("EntropyRng: using JitterRng");
11151119
switch_rng = Some(EntropySource::Jitter(jitter_rng));
11161120
}
11171121
Err(_jitter_error) => {
@@ -1124,7 +1128,7 @@ impl Rng for EntropyRng {
11241128
}
11251129
EntropySource::Jitter(ref mut rng) => {
11261130
if let Ok(os_rng) = try_os_new(dest) {
1127-
info!("EntropyRng: OsRng available [switching back from JitterRng]");
1131+
debug!("EntropyRng: using OsRng");
11281132
switch_rng = Some(EntropySource::Os(os_rng));
11291133
} else {
11301134
return rng.try_fill_bytes(dest); // use JitterRng
@@ -1217,7 +1221,7 @@ pub fn sample<T, I, R>(rng: &mut R, iterable: I, amount: usize) -> Vec<T>
12171221
mod test {
12181222
use impls;
12191223
#[cfg(feature="std")]
1220-
use super::{random, thread_rng};
1224+
use super::{random, thread_rng, EntropyRng};
12211225
use super::{Rng, SeedableRng, StdRng};
12221226
#[cfg(feature="alloc")]
12231227
use alloc::boxed::Box;
@@ -1263,6 +1267,13 @@ mod test {
12631267
impls::fill_bytes_via_u64(self, dest)
12641268
}
12651269
}
1270+
1271+
#[test]
1272+
#[cfg(feature="std")]
1273+
fn test_entropy() {
1274+
let mut rng = EntropyRng::new();
1275+
rng.next_u32();
1276+
}
12661277

12671278
#[test]
12681279
fn test_fill_bytes_default() {

src/os.rs

+6-6
Original file line numberDiff line numberDiff line change
@@ -78,14 +78,14 @@ impl Rng for OsRng {
7878
loop {
7979
if let Err(e) = self.try_fill_bytes(dest) {
8080
if err_count >= RETRY_LIMIT {
81-
error!("OsRng failed too many times; last error: {:?}", e);
82-
panic!("OsRng failed too many times; last error: {:?}", e);
81+
error!("OsRng failed too many times; last error: {}", e);
82+
panic!("OsRng failed too many times; last error: {}", e);
8383
}
8484

8585
match e.kind() {
8686
ErrorKind::Transient => {
8787
if !error_logged {
88-
warn!("OsRng failed; retrying up to {} times. Error: {:?}",
88+
warn!("OsRng failed; retrying up to {} times. Error: {}",
8989
TRANSIENT_RETRIES, e);
9090
error_logged = true;
9191
}
@@ -95,7 +95,7 @@ impl Rng for OsRng {
9595
}
9696
ErrorKind::NotReady => {
9797
if !error_logged {
98-
warn!("OsRng failed; waiting up to {}s and retrying. Error: {:?}",
98+
warn!("OsRng failed; waiting up to {}s and retrying. Error: {}",
9999
MAX_RETRY_PERIOD, e);
100100
error_logged = true;
101101
}
@@ -104,8 +104,8 @@ impl Rng for OsRng {
104104
continue;
105105
}
106106
_ => {
107-
error!("OsRng failed: {:?}", e);
108-
panic!("OsRng fatal error: {:?}", e);
107+
error!("OsRng failed: {}", e);
108+
panic!("OsRng fatal error: {}", e);
109109
}
110110
}
111111
}

src/reseeding.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,8 @@ impl<R: Rng+SeedableRng, Rsdr: Rng> ReseedingRng<R, Rsdr> {
4646
pub fn reseed_if_necessary(&mut self) {
4747
if self.bytes_generated >= self.generation_threshold {
4848
trace!("Reseeding RNG after {} bytes", self.bytes_generated);
49-
R::from_rng(&mut self.reseeder).map(|result| self.rng = result).unwrap();
49+
R::from_rng(&mut self.reseeder).map(|result| self.rng = result)
50+
.unwrap_or_else(|err| panic!("reseeding failed: {}", err));
5051
self.bytes_generated = 0;
5152
}
5253
}

0 commit comments

Comments
 (0)