raw slices do not have to comply to the size limit
This commit is contained in:
parent
0c1cb32b84
commit
ae78862058
@ -3,7 +3,7 @@
|
||||
|
||||
use syntax_pos::symbol::{sym, Symbol};
|
||||
use rustc::hir;
|
||||
use rustc::ty::layout::{self, Size, TyLayout, LayoutOf, VariantIdx};
|
||||
use rustc::ty::layout::{self, TyLayout, LayoutOf, VariantIdx};
|
||||
use rustc::ty;
|
||||
use rustc_data_structures::fx::FxHashSet;
|
||||
|
||||
@ -276,20 +276,11 @@ fn check_wide_ptr_meta(
|
||||
// FIXME: More checks for the vtable.
|
||||
}
|
||||
ty::Slice(..) | ty::Str => {
|
||||
let len = try_validation!(meta.unwrap().to_usize(self.ecx),
|
||||
let _len = try_validation!(meta.unwrap().to_usize(self.ecx),
|
||||
"non-integer slice length in wide pointer", self.path);
|
||||
// check max slice length
|
||||
let elem_size = match tail.sty {
|
||||
ty::Str => Size::from_bytes(1),
|
||||
ty::Slice(ty) => self.ecx.layout_of(ty)?.size,
|
||||
_ => bug!("It cannot be another type"),
|
||||
};
|
||||
if elem_size.checked_mul(len, &*self.ecx.tcx).is_none() {
|
||||
throw_validation_failure!(
|
||||
"too large slice (longer than isize::MAX bytes)",
|
||||
self.path
|
||||
);
|
||||
}
|
||||
// We do not check that `len * elem_size <= isize::MAX`:
|
||||
// that is only required for references, and there it falls out of the
|
||||
// "dereferencable" check performed by Stacked Borrows.
|
||||
}
|
||||
ty::Foreign(..) => {
|
||||
// Unsized, but not wide.
|
||||
|
Loading…
Reference in New Issue
Block a user