Skip to content

Commit b9fe28d

Browse files
kiruganwojciechos
authored andcommitted
Handle starknet compilation error (#2297)
1 parent b1bca98 commit b9fe28d

File tree

2 files changed

+17
-2
lines changed

2 files changed

+17
-2
lines changed

starknet/compiler/rust/Cargo.toml

+3
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ edition = "2021"
55

66
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
77

8+
[profile.release]
9+
overflow-checks = true
10+
811
[dependencies]
912
serde = "1.0.208"
1013
serde_json = { version = "1.0.125", features = ["raw_value"] }

starknet/compiler/rust/src/lib.rs

+14-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
use cairo_lang_starknet_classes::casm_contract_class::CasmContractClass;
1+
use cairo_lang_starknet_classes::casm_contract_class::{CasmContractClass, StarknetSierraCompilationError};
22
use std::ffi::{c_char, CStr, CString};
3+
use std::panic::{self,AssertUnwindSafe};
34

45
#[no_mangle]
56
#[allow(clippy::not_unsafe_ptr_arg_deref)]
@@ -24,7 +25,18 @@ pub extern "C" fn compileSierraToCasm(sierra_json: *const c_char, result: *mut *
2425
}
2526
};
2627

27-
let casm_class = match CasmContractClass::from_contract_class(sierra_class, true, usize::MAX) {
28+
let mut casm_class_result: Option<Result<CasmContractClass, StarknetSierraCompilationError>> = None;
29+
let compilation_result = panic::catch_unwind(AssertUnwindSafe(|| {
30+
casm_class_result = Some(CasmContractClass::from_contract_class(sierra_class, true, usize::MAX));
31+
}));
32+
if let Err(_) = compilation_result {
33+
unsafe {
34+
*result = raw_cstr("panic during compilation".to_string());
35+
}
36+
return 0;
37+
}
38+
39+
let casm_class = match casm_class_result.unwrap() {
2840
Ok(value) => value,
2941
Err(e) => {
3042
unsafe {

0 commit comments

Comments
 (0)