`contract build` can expose an empty wasm to concurrent builds
Maintainer antworten meist innerhalb von 1 Tag
@leighmcculloch arbeitet bereits daran.
Seit 15.10.2026.
Bewertung
Dieses Issue wurde noch nicht bewertet.
Beschreibung
What version are you using?
28.1.0 (main at d95abbc).
What did you do?
Ran two stellar contract build (or contract deploy/upload auto-build) processes at the same time on the same cargo workspace.
Note that this also happens in the auto_build integration tests and causes builds to fail sometimes. e.g. deploy_workspace_with_package_auto_builds in this run.
What did you expect to see?
Both builds succeed, with each reader seeing either the previous complete wasm or the new complete wasm.
What did you see instead?
The second build fails with ❌ error: unexpected end-of-file (at offset 0x0) after cargo reports Finished. Perhaps writing each rewrite to a temp file in the same directory and renaming it over the target could avoid the empty window while still breaking the deps/ hard link, though there may be other options worth weighing.
Thoughts
After cargo releases its build lock, inject_meta and filter_spec in cmd/soroban-cli/src/commands/contract/build.rs each rewrite the output wasm in place with fs::remove_file followed by fs::write, and fs::write creates an empty file before writing the bytes, so another process reading the same path in that window sees zero bytes. The remove-then-write pattern came from #1896 to break the hard link cargo keeps to deps/ (#1694), and the only step that writes to a temp file and renames into place today is --optimize, while the --out-dir copy uses fs::copy, which is also not atomic.
The file would not exist as a zero length file for a brief period if it was written to a temp directory, or with a random filename in the current directory, then renamed into place after the write is complete. So this is probably the ideal fix.
- Vorherrschende Sprache
- Rust
- Sterne
- 129
- Forks
- 153
- Ø Merge
- 1 T. 14 Std.
- Gemergte PRs (30 T.)
- 11
Entwicklungsumgebung
- Kein Dockerfile und keine Docker-Compose-Datei
- Hat eine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus stellar/stellar-cli
-
bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
stellar/stellar-cli#2887 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 65/100
stellar/stellar-cli#2880 ·
Maintainer antworten meist innerhalb von 1 Tag
-
arg_value_union panics on zero-arity union tuple case (unchecked type_[0] index)Evtl. vergeben @hvoi hat das vor 22 Tagen übernommen. Offenbug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
stellar/stellar-cli#2806 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
contract extend panics on single-change resultMetaXdr (index out of bounds at extend.rs:306)Evtl. wieder frei @duongynhi000005-oss hat das vor 18 Tagen übernommen, und es ist kein Pull Request offen. Offen
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 90/100
stellar/stellar-cli#2796 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
Document stellar-cli's RPC trust boundaryEvtl. wieder frei Ein Pull Request dazu wurde ohne Merge geschlossen. Offen
Schwierigkeit 1/5 1-3 Stunden Anfängerfreundlichkeit 85/100
stellar/stellar-cli#2781 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
Alle Issues in stellar/stellar-cli
Ähnliche Issues
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 82/100
Maintainer antworten meist innerhalb von 1 Tag
-
bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
Maintainer antworten meist innerhalb von 1 Tag
-
documentation
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 76/100
SO4-Markets/so4-oracle#1477 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag