]> Repositorios git - scryer-prolog.git/commitdiff
throw an error if a character cannot be encoded
authorMarkus Triska <[email protected]>
Wed, 22 Jul 2020 22:35:23 +0000 (00:35 +0200)
committerMarkus Triska <[email protected]>
Wed, 22 Jul 2020 22:35:23 +0000 (00:35 +0200)
src/machine/system_calls.rs

index 7971583f653081fddf04210b6345beaabfba584b..5a1f9d53d98ccbed9cfdbcb214f1811d2dfa0eee 100644 (file)
@@ -5800,6 +5800,19 @@ impl MachineState {
                 } else {
                     let mut bytes = vec![];
                     for c in self.heap_pstr_iter(self[temp_v!(1)]).to_string().chars() {
+                        if c as u32 > 255 {
+
+                            let stub = MachineError::functor_stub(clause_name!("chars_base64"), 3);
+
+                            let err = MachineError::type_error(
+                                self.heap.h(),
+                                ValidType::Byte,
+                                Addr::Char(c),
+                            );
+
+                            return Err(self.error_form(err, stub));
+                        }
+
                         bytes.push(c as u8);
                     }
                     let b64 = base64::encode_config(bytes, config);