Detect components in wasmtime compile more robustly (#5592)

The binary version of component is going to change over time so use a
more robust method than checking for a fixed 8 bytes.
This commit is contained in:
Alex Crichton
2023-01-18 18:39:35 -06:00
committed by GitHub
parent 0e92fba7e1
commit d24c2fe48c
3 changed files with 11 additions and 1 deletions

1
Cargo.lock generated
View File

@@ -3491,6 +3491,7 @@ dependencies = [
"tempfile", "tempfile",
"test-programs", "test-programs",
"tokio", "tokio",
"wasmparser",
"wasmtime", "wasmtime",
"wasmtime-cache", "wasmtime-cache",
"wasmtime-cli-flags", "wasmtime-cli-flags",

View File

@@ -41,6 +41,7 @@ listenfd = "1.0.0"
wat = { workspace = true } wat = { workspace = true }
serde = "1.0.94" serde = "1.0.94"
serde_json = "1.0.26" serde_json = "1.0.26"
wasmparser = { workspace = true }
[target.'cfg(unix)'.dependencies] [target.'cfg(unix)'.dependencies]
rustix = { workspace = true, features = ["mm", "param"] } rustix = { workspace = true, features = ["mm", "param"] }

View File

@@ -90,7 +90,15 @@ impl CompileCommand {
// bytes with the current component model proposal. // bytes with the current component model proposal.
#[cfg(feature = "component-model")] #[cfg(feature = "component-model")]
{ {
if input.starts_with(b"\0asm\x0a\0\x01\0") { if let Ok(wasmparser::Chunk::Parsed {
payload:
wasmparser::Payload::Version {
encoding: wasmparser::Encoding::Component,
..
},
..
}) = wasmparser::Parser::new(0).parse(&input, true)
{
fs::write(output, engine.precompile_component(&input)?)?; fs::write(output, engine.precompile_component(&input)?)?;
return Ok(()); return Ok(());
} }