[BUG] `DType::from` rejects `S16`, `U16` and `F16`
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 2/5
- Thời gian dự kiến
- 1-3 giờ
- Mức phù hợp với người mới
- 78/100
Hướng nghiên cứu
Bắt đầu với việc chuyển đổi DType trong src/core/util.rs:76-81 và so sánh phạm vi được chấp nhận của nó với enum trong src/core/defines.rs:112-139. Theo dõi Array::get_type() trong array.rs:427-432 và xác minh rằng S16, U16 và F16 không còn gây ra panic, kể cả khi định dạng Debug một array; các giá trị không được nhận diện phải dẫn đến lỗi rõ ràng.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
impl From<u32> for DType {
fn from(t: u32) -> Self {
assert!(DType::F32 as u32 <= t && t <= DType::U64 as u32);
unsafe { mem::transmute(t) }
}
}
The upper bound is DType::U64, which is 9. But the enum continues past it (src/core/defines.rs:112-139):
U64 = 9,
S16 = 10,
U16 = 11,
F16 = 12,
So the assert fires for three of the crate's own supported types. Array::get_type() (array.rs:427-432) is the caller, which means:
let a = randu::<half::f16>(dim4!(3, 3));
let t = a.get_type(); // panics
println!("{:?}", a); // panics — Debug impl calls get_type()
This is not a version-skew problem — it's wrong against a correct 3.8 library, and has been since f16 support was added. It's also the inverse mistake to the one in AfError::from: that assert is too loose, this one is too tight.
Fix: bound at DType::F16 as u32, or better, use an exhaustive match with a clear error for unrecognised values. Note ArrayFire 3.10 adds s8 = 13, so a match would future-proof this.
Found by Claude Opus 5. Verified manually.
- Ngôn ngữ chính
- Rust
- Star
- 827
- Fork
- 59
- Chỉ số merge pull request
- Không có pull request nào được merge trong 30 ngày
Hướng dẫn đóng góp
Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này
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.
Issue khác của arrayfire/arrayfire-rust
-
Bug
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 88/100
arrayfire/arrayfire-rust#388 ·
-
Bug
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 88/100
arrayfire/arrayfire-rust#387 ·
-
Bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
arrayfire/arrayfire-rust#384 ·
-
Bug
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 35/100
arrayfire/arrayfire-rust#385 · 1 bình luận ·
-
Bug
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 45/100
arrayfire/arrayfire-rust#382 ·
Tất cả issue của arrayfire/arrayfire-rust
Issue tương tự
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 85/100
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 84/100
Eynzof/Hermes-CN-Desktop#610 ·
-
Axis areas are always keyboard-focusable (Sense::drag), even with allow_axis_zoom_drag(false) Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 88/100
-
bug team:backend track:services-maintenance
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
cowprotocol/services#4950 ·
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
gitbutlerapp/gitbutler#15998 · 1 bình luận ·