Maybe unsound in RLocal::new
Chưa có ai nhận issue này.
- Ngôn ngữ chính
- Rust
- Star
- 337
- Fork
- 32
- Merge trung bình
- 8 ngày 17 giờ
- Pull request đã merge (30 ngày)
- 11
Mô tả
Hello, thank you for your contribution in this project, I am scanning the unsoundness problem in rust project.
I notice the following code:
pub struct RLocal<T: Copy> {
old_value: T,
variable: *mut T,
}
impl<T> RLocal<T>
where
T: Copy,
{
pub fn new(new_value: T, variable: *mut T) -> RLocal<T> {
unsafe {
let old_value = libr::get(variable);
libr::set(variable, new_value);
Self {
old_value,
variable,
}
}
}
}
Considering that pub mod raii, and new is also a pub function. I assume that users can directly call this function. This potential situation could result in libr::get being called to a null pointer, and might trigger undefined behavior (UB). For safety reasons, I felt it necessary to report this issue. If you have performed checks elsewhere that ensure this is safe, please don’t take offense at my raising this issue.
I suggest Several possible fixes:
- If there is no external usage for
RLocalornew, they should not marked aspub, at least itsnewshould not marked aspub newmethod should add additional check for null pointer.- mark new method as unsafe and proper doc to let users know that they should provide valid Pointers.
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Hướng nghiên cứu
Bắt đầu bằng cách tìm module raii công khai và RLocal::new, sau đó kiểm tra các bên gọi và các giả định về con trỏ xung quanh libr::get và libr::set. Xác định xem API có thể nhận một con trỏ null hoặc một con trỏ không hợp lệ theo cách khác hay không; được xem là hoàn tất khi hợp đồng an toàn hoặc khả năng hiển thị đã rõ ràng và đường dẫn đến hành vi không xác định được báo cáo đã được xử lý.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- rust
- Lĩnh vực
- security
- Loại issue
- Lỗi
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 35/100