From 092a7b7ccedba515a01e54e33d360206948d2756 Mon Sep 17 00:00:00 2001 From: Palash Tyagi <23239946+Magnus167@users.noreply.github.com> Date: Sun, 22 Jun 2025 05:08:05 +0100 Subject: [PATCH 1/2] Validate range index length in Frame::new to prevent mismatches with matrix rows --- src/frame/base.rs | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/frame/base.rs b/src/frame/base.rs index daad7ee..4963dc5 100644 --- a/src/frame/base.rs +++ b/src/frame/base.rs @@ -232,10 +232,17 @@ impl Frame { } (RowIndex::Date(vals), RowIndexLookup::Date(lookup)) } - Some(RowIndex::Range(_)) => { - panic!( - "Frame::new: Cannot explicitly provide a Range index. Use None for default range." - ); + Some(RowIndex::Range(ref r)) => { + // If the length of the range does not match the number of rows, panic. + if r.end.saturating_sub(r.start) != num_rows { + panic!( + "Frame::new: Range index length ({}) mismatch matrix rows ({})", + r.end.saturating_sub(r.start), + num_rows + ); + } + // return the range as is. + (RowIndex::Range(r.clone()), RowIndexLookup::None) } None => { // Default to a sequential range index. From 453e34ef82bfea0c3c1e3be7537ca00c8d730d33 Mon Sep 17 00:00:00 2001 From: Palash Tyagi <23239946+Magnus167@users.noreply.github.com> Date: Sun, 22 Jun 2025 05:19:52 +0100 Subject: [PATCH 2/2] Improve panic message for invalid Range index in Frame::new test --- src/frame/base.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/frame/base.rs b/src/frame/base.rs index 4963dc5..08a969d 100644 --- a/src/frame/base.rs +++ b/src/frame/base.rs @@ -1124,10 +1124,10 @@ mod tests { Frame::new(matrix, vec!["X", "Y"], Some(index)); } #[test] - #[should_panic(expected = "Cannot explicitly provide a Range index")] - fn frame_new_panic_explicit_range() { - let matrix = create_test_matrix_f64(); - let index = RowIndex::Range(0..3); // User cannot provide Range directly + #[should_panic(expected = "Frame::new: Range index length (4) mismatch matrix rows (3)")] + fn frame_new_panic_invalid_explicit_range_index() { + let matrix = create_test_matrix_f64(); // 3 rows + let index = RowIndex::Range(0..4); // Range 0..4 but only 3 rows Frame::new(matrix, vec!["A", "B"], Some(index)); }