diff options
| author | Ralf Jung <post@ralfj.de> | 2022-03-27 20:02:11 -0400 |
|---|---|---|
| committer | Ralf Jung <post@ralfj.de> | 2022-03-31 08:57:45 -0400 |
| commit | a417911c16d1465f10ddda6cceb34f35edad05eb (patch) | |
| tree | 46346d50f940b8f149bfba74ae4522a880ada5f1 /compiler/rustc_const_eval/src/interpret | |
| parent | 53c540a66600a08375f2162f7e20c527deabe7a6 (diff) | |
catch overflow in slice size computation
Diffstat (limited to 'compiler/rustc_const_eval/src/interpret')
| -rw-r--r-- | compiler/rustc_const_eval/src/interpret/eval_context.rs | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/compiler/rustc_const_eval/src/interpret/eval_context.rs b/compiler/rustc_const_eval/src/interpret/eval_context.rs index a81f8b16230..1b8186b5aad 100644 --- a/compiler/rustc_const_eval/src/interpret/eval_context.rs +++ b/compiler/rustc_const_eval/src/interpret/eval_context.rs @@ -694,7 +694,8 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> { let elem = layout.field(self, 0); // Make sure the slice is not too big. - let size = elem.size * len; + let size = elem.size.bytes().saturating_mul(len); // we rely on `max_size_of_val` being smaller than `u64::MAX`. + let size = Size::from_bytes(size); if size > self.max_size_of_val() { throw_ub!(InvalidMeta("slice is bigger than largest supported object")); } |
