fix: avoid no_std panic in ceil helpers on non-finite input

Byte::from_f64/from_f32 let +inf past the size >= 0.0 guard and then called
the no_std ceil helpers, which used Decimal::from_f64(v).unwrap(). Decimal
conversion returns None for non-finite values, so this panicked in no_std
builds while std returned None. Fall back to the input value for non-finite
input so no_std matches std and the documented None contract is upheld.
This commit is contained in:
dualfroz committed 2026-09-06 01:13:22 +02:00
1 parent 600cbe8696
commit ec58c32a8a
2 files changed
+21 -2

No files matched your search

+9
View File
@@ -170,3 +170,12 @@ fn tests() {
assert_eq!(byte, serde_json::from_str::<Byte>(case.0).unwrap(), "{i}");
}
}
#[test]
fn from_non_finite_returns_none() {
// Non-finite inputs must return None instead of panicking, in both builds.
assert_eq!(Byte::from_f64(f64::INFINITY), None);
assert_eq!(Byte::from_f64(f64::NAN), None);
assert_eq!(Byte::from_f32(f32::INFINITY), None);
assert_eq!(Byte::from_f32(f32::NAN), None);
}