Zero-length stream copies within one component instance trap for non-numeric payloads
I maintainer di solito rispondono entro 4 giorni
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 45/100
- Tipo di issue
- Bug
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Attiva
- Ambito
- compilers
Direzione di ricerca
Start with the linked canonical ABI definition and compare its non-numeric payload trap condition with the zero-length stream read in the WAST example. Reproduce the case with Wasmtime and determine whether the implementation or the specification needs an update; done means the behavior and expected test result are resolved.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
This test:
;; With a write pending on a `stream<string>`, a zero-length read from the
;; same component instance copies nothing and returns COMPLETED(0).
(component
(core module $libc
(memory (export "memory") 1)
(func (export "realloc") (param i32 i32 i32 i32) (result i32) unreachable))
(core instance $libc (instantiate $libc))
(type $stream (stream string))
(core func $stream.new (canon stream.new $stream))
(core func $stream.read (canon stream.read $stream async
(memory (core memory $libc "memory")) (realloc (core func $libc "realloc"))))
(core func $stream.write (canon stream.write $stream async
(memory (core memory $libc "memory"))))
(core module $m
(import "" "stream.new" (func $stream.new (result i64)))
(import "" "stream.read" (func $stream.read (param i32 i32 i32) (result i32)))
(import "" "stream.write" (func $stream.write (param i32 i32 i32) (result i32)))
(func (export "run") (result i32)
(local $pair i64)
(local.set $pair (call $stream.new))
(if (i32.ne (i32.const -1) ;; BLOCKED
(call $stream.write
(i32.wrap_i64 (i64.shr_u (local.get $pair) (i64.const 32)))
(i32.const 0) (i32.const 1)))
(then unreachable))
(call $stream.read (i32.wrap_i64 (local.get $pair)) (i32.const 0) (i32.const 0)))
)
(core instance $i (instantiate $m (with "" (instance
(export "stream.new" (func $stream.new))
(export "stream.read" (func $stream.read))
(export "stream.write" (func $stream.write))))))
(func (export "run") async (result u32) (canon lift (core func $i "run")))
)
(assert_return (invoke "run") (u32.const 0)) ;; COMPLETED(0)
fails in Wasmtime with:
$ wasmtime wast foo.wast
Error: failed to run script file 'foo.wast'
Caused by:
0: failed directive on foo.wast:39
1: error while executing at wasm backtrace:
0: 0x282 - wasm-function[3]
at foo.wast:29:8
2: cannot read from and write to intra-component future/stream with non-numeric payload
but the spec indicates that this test should pass right now as the trap is gated on non-zero-length buffers.
I wanted to flag this as a possible update to the specification (similar to https://github.com/WebAssembly/component-model/issues/750 perhaps) where subjectively I'd expect this to unconditionally fail regardless of the lengths in play, but I may also be showing my biases from #750 too.
- Lingua principale
- WebAssembly
- Stelle
- 1.4k
- Fork
- 132
- Merge medio
- 4g 14h
- PR unite (30g)
- 12
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di WebAssembly/component-model
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
WebAssembly/component-model#609 · 2 commenti · 1 reazione ·
I maintainer di solito rispondono entro 4 giorni
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
WebAssembly/component-model#752 · 13 commenti · 1 reazione ·
I maintainer di solito rispondono entro 4 giorni
-
Does `task.return`'s memory strictly match the canon-lifted function, or only match when present?Aperta
Difficoltà 5/5 Più di una settimana Idoneità per principianti 18/100
WebAssembly/component-model#749 · 2 commenti ·
I maintainer di solito rispondono entro 4 giorni
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
WebAssembly/component-model#743 · 1 commento ·
I maintainer di solito rispondono entro 4 giorni
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
WebAssembly/component-model#742 · 1 commento · 3 reazioni ·
I maintainer di solito rispondono entro 4 giorni
Tutte le issue di WebAssembly/component-model
Issue simili
-
A match arm above the largest i64 is compared as 0Forse già presa Una pull request collegata a questa issue è aperta o già unita. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 86/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
paradigmxyz/solar#2436 ·
I maintainer di solito rispondono entro 1 giorno
-
bug bulk-filed needs triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
I maintainer di solito rispondono entro 2 giorni
-
area:codegen backend:slang bug direction:output
Difficoltà 2/5 1-3 ore Idoneità per principianti 73/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 87/100
gleam-lang/gleam#6491 ·
I maintainer di solito rispondono entro 1 giorno