From: Thierry Marianne Date: Wed, 4 Mar 2026 11:03:21 +0000 (+0100) Subject: fix utf-8 panic X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=fae9ca1bb97e64cae54c92973a1fb0d3e116a5b3;p=scryer-prolog.git fix utf-8 panic Signed-off-by: Thierry Marianne --- diff --git a/src/machine/system_calls.rs b/src/machine/system_calls.rs index edd08cb5..4b38c90b 100644 --- a/src/machine/system_calls.rs +++ b/src/machine/system_calls.rs @@ -5125,10 +5125,29 @@ impl Machine { unify!(self.machine_st, return_value, struct_value); } Value::CString(cstr) => { - let str_cell = resource_error_call_result!( - self.machine_st, - self.machine_st.heap.allocate_cstr(cstr.to_str().unwrap()) - ); + let bytes = cstr.to_bytes(); + + let str_cell = match std::str::from_utf8(bytes) { + Ok(valid_str) => resource_error_call_result!( + self.machine_st, + self.machine_st.heap.allocate_cstr(valid_str) + ), + Err(_) => { + let cells: Vec<_> = bytes + .iter() + .map(|&b| fixnum_as_cell!(Fixnum::build_with(b))) + .collect(); + + resource_error_call_result!( + self.machine_st, + sized_iter_to_heap_list( + &mut self.machine_st.heap, + cells.len(), + cells.into_iter() + ) + ) + } + }; unify!(self.machine_st, str_cell, return_value); }