mirror of
https://github.com/rust-lang/rust.git
synced 2025-06-04 19:29:07 +00:00
Add tests for overflow in Vec::drain
This commit is contained in:
parent
b54386ab7a
commit
d98bac4e4e
@ -3,6 +3,7 @@ use std::collections::TryReserveError::*;
|
|||||||
use std::fmt::Debug;
|
use std::fmt::Debug;
|
||||||
use std::iter::InPlaceIterable;
|
use std::iter::InPlaceIterable;
|
||||||
use std::mem::size_of;
|
use std::mem::size_of;
|
||||||
|
use std::ops::Bound::*;
|
||||||
use std::panic::{catch_unwind, AssertUnwindSafe};
|
use std::panic::{catch_unwind, AssertUnwindSafe};
|
||||||
use std::rc::Rc;
|
use std::rc::Rc;
|
||||||
use std::vec::{Drain, IntoIter};
|
use std::vec::{Drain, IntoIter};
|
||||||
@ -566,6 +567,16 @@ fn test_drain_max_vec_size() {
|
|||||||
assert_eq!(v.len(), usize::MAX - 1);
|
assert_eq!(v.len(), usize::MAX - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
#[should_panic]
|
||||||
|
fn test_drain_index_overflow() {
|
||||||
|
let mut v = Vec::<()>::with_capacity(usize::MAX);
|
||||||
|
unsafe {
|
||||||
|
v.set_len(usize::MAX);
|
||||||
|
}
|
||||||
|
v.drain(0..=usize::MAX);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
#[should_panic]
|
#[should_panic]
|
||||||
fn test_drain_inclusive_out_of_bounds() {
|
fn test_drain_inclusive_out_of_bounds() {
|
||||||
@ -573,6 +584,20 @@ fn test_drain_inclusive_out_of_bounds() {
|
|||||||
v.drain(5..=5);
|
v.drain(5..=5);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
#[should_panic]
|
||||||
|
fn test_drain_start_overflow() {
|
||||||
|
let mut v = vec![1, 2, 3];
|
||||||
|
v.drain((Excluded(usize::MAX), Included(0)));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
#[should_panic]
|
||||||
|
fn test_drain_end_overflow() {
|
||||||
|
let mut v = vec![1, 2, 3];
|
||||||
|
v.drain((Included(0), Included(usize::MAX)));
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_drain_leak() {
|
fn test_drain_leak() {
|
||||||
static mut DROPS: i32 = 0;
|
static mut DROPS: i32 = 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user