From a3bb288f015b52ad23e0ad1cbbdc76bef8701e3e Mon Sep 17 00:00:00 2001 From: Mark Thom Date: Tue, 28 Apr 2020 19:22:20 -0600 Subject: [PATCH] check that lower bound on term expansion drain is below the len of the term expansion vector, queue (#416) --- src/prolog/machine/code_repo.rs | 21 ++++++++++++++++----- src/prolog/machine/term_expansion.rs | 1 + 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/prolog/machine/code_repo.rs b/src/prolog/machine/code_repo.rs index eba8c5c9..78f3a548 100644 --- a/src/prolog/machine/code_repo.rs +++ b/src/prolog/machine/code_repo.rs @@ -53,12 +53,23 @@ impl CodeRepo { self.term_dir .get_mut(&key) .map(|entry| { - ( - Predicate((entry.0).0.drain(len..).collect()), - entry.1.drain(queue_len..).collect(), - ) + let terms = + if len < (entry.0).0.len() { + (entry.0).0.drain(len ..).collect() + } else { + vec![] + }; + + let queue = + if queue_len < entry.1.len() { + entry.1.drain(queue_len ..).collect() + } else { + VecDeque::new() + }; + + (Predicate(terms), queue) }) - .unwrap_or((Predicate::new(), VecDeque::from(vec![]))) + .unwrap_or((Predicate::new(), VecDeque::new())) } pub(crate) diff --git a/src/prolog/machine/term_expansion.rs b/src/prolog/machine/term_expansion.rs index 06d7b3be..d2b6419c 100644 --- a/src/prolog/machine/term_expansion.rs +++ b/src/prolog/machine/term_expansion.rs @@ -181,6 +181,7 @@ impl<'a> TermStream<'a> { te_len, te_queue_len, ); + let goal_expansion_additions = self.wam.code_repo.truncate_terms( (clause_name!("goal_expansion"), 2), ge_len, -- 2.54.0