fix utf-8 panic

Signed-off-by: Thierry Marianne <thierry@marianne.io>
This commit is contained in:
Thierry Marianne
2026-03-04 12:03:21 +01:00
parent ac71cff338
commit fae9ca1bb9

View File

@@ -5125,10 +5125,29 @@ impl Machine {
unify!(self.machine_st, return_value, struct_value);
}
Value::CString(cstr) => {
let str_cell = resource_error_call_result!(
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(cstr.to_str().unwrap())
);
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);
}