diff options
| author | Scott McMurray <scottmcm@users.noreply.github.com> | 2017-06-04 11:08:25 -0700 |
|---|---|---|
| committer | Scott McMurray <scottmcm@users.noreply.github.com> | 2017-06-04 11:08:25 -0700 |
| commit | 808a08a363591abf754fafd93ec3f44c686486ec (patch) | |
| tree | 5cd63c46768d830265ab663cf88844c6399ab2fb /src/libcollections | |
| parent | 18612b21d05ce0021f9ef995592b158e181ffd90 (diff) | |
| download | rust-808a08a363591abf754fafd93ec3f44c686486ec.tar.gz rust-808a08a363591abf754fafd93ec3f44c686486ec.zip | |
Add overflow checking for str::get with inclusive ranges
Fixes #42401
Diffstat (limited to 'src/libcollections')
| -rw-r--r-- | src/libcollections/tests/lib.rs | 1 | ||||
| -rw-r--r-- | src/libcollections/tests/str.rs | 42 |
2 files changed, 43 insertions, 0 deletions
diff --git a/src/libcollections/tests/lib.rs b/src/libcollections/tests/lib.rs index 8af8786994e..f64a549a05d 100644 --- a/src/libcollections/tests/lib.rs +++ b/src/libcollections/tests/lib.rs @@ -22,6 +22,7 @@ #![feature(rand)] #![feature(slice_rotate)] #![feature(splice)] +#![feature(str_checked_slicing)] #![feature(str_escape)] #![feature(test)] #![feature(unboxed_closures)] diff --git a/src/libcollections/tests/str.rs b/src/libcollections/tests/str.rs index c9b7104fec4..9d8ca38b20e 100644 --- a/src/libcollections/tests/str.rs +++ b/src/libcollections/tests/str.rs @@ -358,6 +358,48 @@ fn test_slice_fail() { &"中华Việt Nam"[0..2]; } +#[test] +#[should_panic] +fn test_str_slice_rangetoinclusive_max_panics() { + &"hello"[...usize::max_value()]; +} + +#[test] +#[should_panic] +fn test_str_slice_rangeinclusive_max_panics() { + &"hello"[1...usize::max_value()]; +} + +#[test] +#[should_panic] +fn test_str_slicemut_rangetoinclusive_max_panics() { + let mut s = "hello".to_owned(); + let s: &mut str = &mut s; + &mut s[...usize::max_value()]; +} + +#[test] +#[should_panic] +fn test_str_slicemut_rangeinclusive_max_panics() { + let mut s = "hello".to_owned(); + let s: &mut str = &mut s; + &mut s[1...usize::max_value()]; +} + +#[test] +fn test_str_get_maxinclusive() { + let mut s = "hello".to_owned(); + { + let s: &str = &s; + assert_eq!(s.get(...usize::max_value()), None); + assert_eq!(s.get(1...usize::max_value()), None); + } + { + let s: &mut str = &mut s; + assert_eq!(s.get(...usize::max_value()), None); + assert_eq!(s.get(1...usize::max_value()), None); + } +} #[test] fn test_is_char_boundary() { |
