From fd6654b9dfd8f3c24c6b90380e2a9b4d4026302f Mon Sep 17 00:00:00 2001 From: michaelg100 Date: Tue, 11 Aug 2026 16:58:35 -0400 Subject: [PATCH 1/3] prevent overflow values --- gc/mmtk/src/utils.rs | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/gc/mmtk/src/utils.rs b/gc/mmtk/src/utils.rs index d1979ea..08eee56 100644 --- a/gc/mmtk/src/utils.rs +++ b/gc/mmtk/src/utils.rs @@ -118,9 +118,9 @@ pub fn parse_capacity(input: &str) -> Option { }; match suffix { - "GiB" => Some(v * GIBIBYTE), - "MiB" => Some(v * MEBIBYTE), - "KiB" => Some(v * KIBIBYTE), + "GiB" => v.checked_mul(GIBIBYTE), + "MiB" => v.checked_mul(MEBIBYTE), + "KiB" => v.checked_mul(KIBIBYTE), "" => Some(v), _ => None, } @@ -150,6 +150,20 @@ mod tests { assert_eq!(Some(10737418240), parse_capacity("10GiB")) } + #[test] + fn test_parse_capacity_rejects_overflowing_values() { + assert_eq!(None, parse_capacity("99999999999GiB")); + assert_eq!(None, parse_capacity("99999999999999MiB")); + assert_eq!(None, parse_capacity("99999999999999999KiB")); + + const GIBIBYTE: usize = 1024 * 1024 * 1024; + let max_gib = usize::MAX / GIBIBYTE; + assert_eq!( + Some(max_gib * GIBIBYTE), + parse_capacity(&format!("{max_gib}GiB")) + ); + } + #[test] fn test_parse_capacity_parses_nonsense_values() { assert_eq!(None, parse_capacity("notanumber")); From 5abc44190d7d7fe200ee5ead9863dc8b58f5f2c1 Mon Sep 17 00:00:00 2001 From: michaelg100 Date: Tue, 11 Aug 2026 17:00:20 -0400 Subject: [PATCH 2/3] format --- gc/mmtk/src/utils.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gc/mmtk/src/utils.rs b/gc/mmtk/src/utils.rs index 08eee56..a518e50 100644 --- a/gc/mmtk/src/utils.rs +++ b/gc/mmtk/src/utils.rs @@ -156,8 +156,8 @@ mod tests { assert_eq!(None, parse_capacity("99999999999999MiB")); assert_eq!(None, parse_capacity("99999999999999999KiB")); - const GIBIBYTE: usize = 1024 * 1024 * 1024; - let max_gib = usize::MAX / GIBIBYTE; + const GIBIBYTE: usize = 1024 * 1024 * 1024; + let max_gib = usize::MAX / GIBIBYTE; assert_eq!( Some(max_gib * GIBIBYTE), parse_capacity(&format!("{max_gib}GiB")) From 0ba6c6b12cbb9b355aa2524d249e87948f1f83ca Mon Sep 17 00:00:00 2001 From: michaelg100 Date: Mon, 24 Aug 2026 16:17:50 -0400 Subject: [PATCH 3/3] update gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 5bbd9df..bd4998d 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,5 @@ Gemfile.lock tmp + +.DS_Store