Cranelift: interpreter: incorrect edge-case handling in fcvt_to_{u,s}int.i128
Maintainer thường phản hồi trong vòng 1 ngà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
- 83/100
Hướng nghiên cứu
Đọc cranelift/interpreter/src/step.rs ở phần chuyển đổi từ float sang i128 và tài liệu hướng dẫn về lệnh trong cranelift/codegen/meta/src/shared/instructions.rs. Sau đó, kiểm tra runtests/i128-conversion.clif và chạy bài kiểm tra Cranelift interpreter phù hợp. Hoàn tất khi các phép chuyển đổi có dấu nằm ngoài phạm vi gây trap và các phép chuyển đổi không dấu trả về giá trị mong đợi với đầu vào thuộc [2¹²⁷, 2¹²⁸).
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Minor/pedantic bug. The float-to-int128 conversions in the interpreter misbehave when passed very large (or very negative) values:
- fcvt_to_sint.i128 returns i128::MAX or i128::MIN for out-of-range inputs. The doc comments say it should trap.
- fcvt_to_uint.i128 and fcvt_to_uint_sat.i128 clamp some large inputs (in the interval [2¹²⁷, 2¹²⁸)) to i128::MAX, even though those values should fit in the result.
I noticed this issue because runtests/i128-conversion.clif matches the implementation, so it has three incorrect expectations:
- Line 14:
; run: %fcvt_to_uint_i128(0x1.fffffep127) == 170141183460469231731687303715884105727- Should return: 340282346638528859811704183484516925440
- The nearly identical call on line 40 should have the same result:
; run: %fcvt_to_uint_sat_i128(0x1.fffffep127) == 170141183460469231731687303715884105727
- Line 28:
; run: %fcvt_to_sint_i128(0x1.fffffep127) == 170141183460469231731687303715884105727- Should trap
The root cause is that the interpreter's fcvt_to_uint and fcvt_to_sint cast the input with as i128 before the bounds check.
- Ngôn ngữ chính
- Rust
- Star
- 18.8k
- Fork
- 1.9k
- Merge trung bình
- 1 ngày 3 giờ
- Pull request đã merge (30 ngày)
- 380
Chuẩn bị môi trường
- Không có Dockerfile hay tệp Docker Compose
- Có mẫu pull request
- Đọc 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.
Issue khác của bytecodealliance/wasmtime
-
bug wasm-proposal:exceptions wasmtime:debugging
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
bytecodealliance/wasmtime#14102 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
wasm-proposal:gc
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 62/100
bytecodealliance/wasmtime#13808 · 2 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 48/100
bytecodealliance/wasmtime#15195 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 20/100
bytecodealliance/wasmtime#15193 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
awfy performance
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 44/100
bytecodealliance/wasmtime#15192 ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của bytecodealliance/wasmtime
Issue tương tự
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 83/100
n0-computer/iroh#4669 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
rubys/roundhouse#1950 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 65/100
cloudflare/workers-rs#1130 ·
Maintainer thường phản hồi trong vòng 11 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 69/100
vfarcic/dot-agent-deck#2160 · 2 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
RustCrypto/utils#1597 ·
Maintainer thường phản hồi trong vòng 1 ngày