From 75302ab716b431d3789cc423713b9a273e19df85 Mon Sep 17 00:00:00 2001 From: Mark Date: Fri, 29 Dec 2023 10:11:39 -0700 Subject: [PATCH] check that Target is an atom in scoped_clause_to_evacuable (#2248) --- src/machine/loader.rs | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/src/machine/loader.rs b/src/machine/loader.rs index fb200f03..fb9b22bb 100644 --- a/src/machine/loader.rs +++ b/src/machine/loader.rs @@ -1833,9 +1833,33 @@ impl Machine { } pub(crate) fn scoped_clause_to_evacuable(&mut self) -> CallResult { - let module_name = cell_as_atom!(self - .machine_st - .store(self.machine_st.deref(self.machine_st.registers[1]))); + let target = self.deref_register(1); + + let mut permission_error = || { + let err = self.machine_st.permission_error( + Permission::Modify, + atom!("static_procedure"), + functor_stub(atom!(":"), 2) + .into_iter() + .collect::(), + ); + + self.machine_st + .error_form(err, functor_stub(atom!("load"), 1)) + }; + + let module_name = read_heap_cell!(target, + (HeapCellValueTag::Atom, (name, arity)) => { + if arity == 0 { + name + } else { + return Err(permission_error()); + } + } + _ => { + return Err(permission_error()); + } + ); let loader = self.loader_from_heap_evacuable(temp_v!(3)); -- 2.54.0