Skip to content

Commit 9936958

Browse files
joshkaepage
authored andcommitted
fix: Don't overflow on boundary conditions
Prior to this change, constructing a `Verbosity` with either parameter equal to `u8::MAX` would result in incorrect verbosity level calculation.
1 parent c684b6f commit 9936958

File tree

1 file changed

+11
-11
lines changed

1 file changed

+11
-11
lines changed

src/lib.rs

+11-11
Original file line numberDiff line numberDiff line change
@@ -128,8 +128,8 @@ impl<L: LogLevel> Verbosity<L> {
128128

129129
fn verbosity(&self) -> u8 {
130130
let default_verbosity = level_value(L::default());
131-
let verbosity = default_verbosity as i8 - (self.quiet as i8) + (self.verbose as i8);
132-
verbosity as u8
131+
let verbosity = default_verbosity as i16 - self.quiet as i16 + self.verbose as i16;
132+
verbosity.clamp(0, u8::MAX as i16) as u8
133133
}
134134
}
135135

@@ -248,10 +248,10 @@ mod test {
248248
(3, 0, Some(Level::Debug), LevelFilter::Debug),
249249
(4, 0, Some(Level::Trace), LevelFilter::Trace),
250250
(5, 0, Some(Level::Trace), LevelFilter::Trace),
251-
(255, 0, None, LevelFilter::Off),
251+
(255, 0, Some(Level::Trace), LevelFilter::Trace),
252252
(0, 1, None, LevelFilter::Off),
253-
(0, 2, Some(Level::Trace), LevelFilter::Trace),
254-
(0, 255, Some(Level::Warn), LevelFilter::Warn),
253+
(0, 2, None, LevelFilter::Off),
254+
(0, 255, None, LevelFilter::Off),
255255
(255, 255, Some(Level::Error), LevelFilter::Error),
256256
];
257257

@@ -279,11 +279,11 @@ mod test {
279279
(2, 0, Some(Level::Debug), LevelFilter::Debug),
280280
(3, 0, Some(Level::Trace), LevelFilter::Trace),
281281
(4, 0, Some(Level::Trace), LevelFilter::Trace),
282-
(255, 0, Some(Level::Error), LevelFilter::Error),
282+
(255, 0, Some(Level::Trace), LevelFilter::Trace),
283283
(0, 1, Some(Level::Error), LevelFilter::Error),
284284
(0, 2, None, LevelFilter::Off),
285-
(0, 3, Some(Level::Trace), LevelFilter::Trace),
286-
(0, 255, Some(Level::Info), LevelFilter::Info),
285+
(0, 3, None, LevelFilter::Off),
286+
(0, 255, None, LevelFilter::Off),
287287
(255, 255, Some(Level::Warn), LevelFilter::Warn),
288288
];
289289

@@ -310,12 +310,12 @@ mod test {
310310
(1, 0, Some(Level::Debug), LevelFilter::Debug),
311311
(2, 0, Some(Level::Trace), LevelFilter::Trace),
312312
(3, 0, Some(Level::Trace), LevelFilter::Trace),
313-
(255, 0, Some(Level::Warn), LevelFilter::Warn),
313+
(255, 0, Some(Level::Trace), LevelFilter::Trace),
314314
(0, 1, Some(Level::Warn), LevelFilter::Warn),
315315
(0, 2, Some(Level::Error), LevelFilter::Error),
316316
(0, 3, None, LevelFilter::Off),
317-
(0, 4, Some(Level::Trace), LevelFilter::Trace),
318-
(0, 255, Some(Level::Debug), LevelFilter::Debug),
317+
(0, 4, None, LevelFilter::Off),
318+
(0, 255, None, LevelFilter::Off),
319319
(255, 255, Some(Level::Info), LevelFilter::Info),
320320
];
321321

0 commit comments

Comments
 (0)