P.SAF.FFI.02 应正确处理 FFI 调用的返回值和输出参数
【描述】
在 FFI 调用场景下,应该对函数调用结果的错误异常进行正确处理。错误异常的常见形式有错误码返回值和空指针。
【反例】
Rust
/// 模拟一个外部 C 函数
#[no_mangle]
pub extern "C" fn alloc_huge_space() -> *mut libc::c_int {
unsafe {
libc::malloc(u64::MAX.try_into().unwrap()) as *mut libc::c_int
}
}
fn main() {
let x = alloc_huge_space();
let mut v = unsafe {
std::slice::from_raw_parts_mut(x, 100)
};
v[0] = 100;
}
【正例】
Rust
/// 模拟一个外部 C 函数
#[no_mangle]
pub extern "C" fn alloc_huge_space() -> *mut libc::c_int {
unsafe {
libc::malloc(u64::MAX.try_into().unwrap()) as *mut libc::c_int
}
}
fn main() {
let x = alloc_huge_space();
if !x.is_null() {
let mut v = unsafe {
std::slice::from_raw_parts_mut(x, 100)
};
v[0] = 100;
}
}