G.TYP.SLC.02 应保证数组索引在有效范围内
【级别】 要求
【描述】
RUST 的数组/切片越界访问不会出现内存被越界读写的后果,但会导致 panic
。使用索引访问数组的时 候需要保证索引值在有效范围。
建议:
- 如果基于单个索引获取数组元素,需提前校验索引有效;或者使用
get
方法,越界时返回 None 。 - 如果需要获取一个切片,需要保证切片的起始索引地址在有效范围内,否则会导致
panic
。
【反例】
Rust
fn main() {
let arr = [1, 2, 3, 4, 5];
// 不符合:越界访问
let _ = arr[5];
}
【正例】
Rust
fn main() {
fn get_index() -> usize {
5
}
let arr = [1, 2, 3, 4, 5]; let index = get_index();
// 符合:校验索引是否越界
if index >= arr.len() {
// 错误处理示例,此处产品应根据业务场景,选择合适的处理方式
panic!("index out of bounds");
}
let _ = arr[index];
}