From e8cc1329727250860497bc7a03ff6ca1a824ac5f Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Thu, 18 Apr 2019 17:57:59 +0200 Subject: [PATCH] use checked sub instead of - --- src/prepare/compile.rs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/prepare/compile.rs b/src/prepare/compile.rs index 76fdef2..a79451e 100644 --- a/src/prepare/compile.rs +++ b/src/prepare/compile.rs @@ -1040,8 +1040,14 @@ fn require_target( let frame = require_label(depth, frame_stack)?; // Get the label by the given `depth`. + let idx = label_stack + .len() + .checked_sub(1) + .expect("this is ensured by `require_label` above") + .checked_sub(depth as usize) + .expect("this is ensured by `require_label` above"); let label = label_stack - .get(label_stack.len() - 1 - (depth as usize)) + .get(idx) .expect("this is ensured by `require_label` above"); let drop_keep = compute_drop_keep( @@ -1075,7 +1081,10 @@ fn drop_keep_return( } let is_stack_polymorphic = top_label(frame_stack).polymorphic_stack; - let deepest = (frame_stack.len() - 1) as u32; + let deepest = frame_stack + .len() + .checked_sub(1) + .expect("frame_stack is not empty") as u32; let frame = require_label(deepest, frame_stack).expect("frame_stack is not empty"); let mut drop_keep = compute_drop_keep( is_stack_polymorphic,