[interpreter] memory.grow on an i64 memory past 2^48 pages succeeds but allocates wrong amount (or crashes)
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
- 76/100
Hướng nghiên cứu
Bắt đầu với runtime/memory.ml, đặc biệt là valid_size quanh các dòng 27–38 và create/grow quanh các dòng 58–71, sau đó kiểm tra các giới hạn bộ nhớ WebAssembly được dẫn chiếu. Tái hiện các trường hợp được báo cáo với 2^48 và 2^48 + 1 trang trong trình thông dịch. Hoàn thành khi thao tác tăng i64 quá mức bị từ chối với -1, memory.size không thay đổi và trường hợp ở đúng giới hạn không gây lỗi.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
(module
(memory i64 1)
(func (export "grow") (param i64) (result i64) (memory.grow (local.get 0)))
(func (export "size") (result i64) (memory.size)))
(assert_return (invoke "grow" (i64.const 0x1_0000_0000_0000)) (i64.const -1))
(assert_return (invoke "size") (i64.const 1))
Result: 1 : [i64]
Expect: -1 : [i64]
assertion failure: wrong return values
Growing to exactly 2^48 pages crashes instead:
(module
(memory i64 1)
(func (export "grow") (param i64) (result i64) (memory.grow (local.get 0))))
(invoke "grow" (i64.const 0xFFFF_FFFF_FFFF))
uncaught exception Invalid_argument("Bigarray.sub: bad sub-array")
Called from Wasm__Memory.grow in file "runtime/memory.ml", line 69
valid_size accepts every size for I64AT, so the 2^48-page bound on 64-bit memories is never checked, and create computes n * page_size in Int64, which wraps. For 2^48 + 1 pages the byte count wraps to 65536, so grow reports success with a one-page buffer; for 2^48 pages it wraps to 0 and the blit fails.
https://github.com/WebAssembly/spec/blob/340650f2f620169685814774bc5b019d05d4d3d7/interpreter/runtime/memory.ml#L27-L38
https://github.com/WebAssembly/spec/blob/340650f2f620169685814774bc5b019d05d4d3d7/interpreter/runtime/memory.ml#L58-L71
Tested at 340650f.
- Ngôn ngữ chính
- WebAssembly
- Star
- 3.5k
- Fork
- 540
- Merge trung bình
- 1 ngày 4 giờ
- Pull request đã merge (30 ngày)
- 19
Chuẩn bị môi trường
- Không có Dockerfile hay tệp Docker Compose
- Không 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 WebAssembly/spec
-
[interpreter] Text lexer accepts surrogate escapes and crashes on escapes past U+10FFFFCó thể đã có người làm @rossberg đã nhận 1 ngày trước. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 66/100
WebAssembly/spec#2287 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
[spectec] SpecTec interpreter: array.new_data and array.init_data fail on arrays of v128Có thể đã có người làm @rossberg đã nhận 1 ngày trước. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
WebAssembly/spec#2285 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
[spectec] Tstringchar excludes \u{E000}..\u{E7FF}Có thể đã có người làm @rossberg đã nhận 1 ngày trước. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
WebAssembly/spec#2284 ·
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
WebAssembly/spec#2297 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
[interpreter] Binary decoder rejects heap type indices >= 2^31 as malformedCó thể đã có người làm @rossberg đã nhận 1 ngày trước. Đang mở
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 67/100
WebAssembly/spec#2289 ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của WebAssembly/spec
Issue tương tự
-
Download helper still uses huggingface_hub arguments removed in 1.0: USE_SYMLINKS is silently ignored and every download ends with a WinError 3 lineCó thể đã có người làm @li-lizhe đã nhận hôm nay. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
-
IPv6 node addresses produce an invalid request URLCó thể đã có người làm @RaphaelFakhri đã nhận hôm nay. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
typesense/typesense-python#154 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 66/100
goharbor/terraform-provider-harbor#655 · 1 bình luận ·
-
bug needs-triage
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 85/100
syncthing/syncthing#10935 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
[BUG]: Document embedding fails with "Cannot have chunkOverlap >= chunkSize" after switching to an embedder with a smaller max chunk lengthCó thể đã có người làm @RaphaelFakhri đã nhận hôm nay. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
Mintplex-Labs/anything-llm#6810 ·
Maintainer thường phản hồi trong vòng 1 ngày