From: Mark Thom Date: Sun, 21 Nov 2021 18:30:15 +0000 (-0700) Subject: add bounds check for attributed variables slice X-Git-Tag: v0.9.0^2~126 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=3355b4972493ddce70019717534f20c10dc9ef11;p=scryer-prolog.git add bounds check for attributed variables slice --- diff --git a/src/machine/attributed_variables.rs b/src/machine/attributed_variables.rs index 48c5ec8b..30ec9a8c 100644 --- a/src/machine/attributed_variables.rs +++ b/src/machine/attributed_variables.rs @@ -82,19 +82,23 @@ impl MachineState { } pub(super) fn gather_attr_vars_created_since(&mut self, b: usize) -> IntoIter { - let mut attr_vars: Vec<_> = self.attr_var_init.attr_var_queue[b..] - .iter() - .filter_map(|h| { - read_heap_cell!(self.store(self.deref(heap_loc_as_cell!(*h))), //Addr::HeapCell(*h))) { - (HeapCellValueTag::AttrVar, h) => { - Some(attr_var_as_cell!(h)) - } - _ => { - None - } - ) - }) - .collect(); + let mut attr_vars: Vec<_> = if b >= self.attr_var_init.attr_var_queue.len() { + vec![] + } else { + self.attr_var_init.attr_var_queue[b..] + .iter() + .filter_map(|h| { + read_heap_cell!(self.store(self.deref(heap_loc_as_cell!(*h))), + (HeapCellValueTag::AttrVar, h) => { + Some(attr_var_as_cell!(h)) + } + _ => { + None + } + ) + }) + .collect() + }; attr_vars.sort_unstable_by(|a1, a2| { compare_term_test!(self, *a1, *a2).unwrap_or(Ordering::Less)