From fb73cf4f8be5d45fd75962bd7117e51e8d595a61 Mon Sep 17 00:00:00 2001 From: Amanieu d'Antras Date: Thu, 13 Jan 2022 23:43:26 +0000 Subject: [PATCH] Re-add a magic header for engine-universal --- lib/engine-universal/src/artifact.rs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/engine-universal/src/artifact.rs b/lib/engine-universal/src/artifact.rs index b9c700b0b2e..8163b8718d0 100644 --- a/lib/engine-universal/src/artifact.rs +++ b/lib/engine-universal/src/artifact.rs @@ -44,9 +44,11 @@ pub struct UniversalArtifact { } impl UniversalArtifact { + const MAGIC_HEADER: &'static [u8; 16] = b"wasmer-universal"; + /// Check if the provided bytes look like a serialized `UniversalArtifact`. pub fn is_deserializable(bytes: &[u8]) -> bool { - MetadataHeader::parse(bytes).is_ok() + bytes.starts_with(Self::MAGIC_HEADER) } /// Compile a data buffer into a `UniversalArtifact`, which may then be instantiated. @@ -147,6 +149,12 @@ impl UniversalArtifact { universal: &UniversalEngine, bytes: &[u8], ) -> Result { + if !Self::is_deserializable(bytes) { + return Err(DeserializeError::Incompatible( + "The provided bytes are not wasmer-universal".to_string(), + )); + } + let bytes = &bytes[Self::MAGIC_HEADER.len()..]; let metadata_len = MetadataHeader::parse(bytes)?; let metadata_slice: &[u8] = &bytes[MetadataHeader::LEN..][..metadata_len]; let serializable = SerializableModule::deserialize(metadata_slice)?; @@ -331,6 +339,7 @@ impl Artifact for UniversalArtifact { assert!(mem::align_of::() <= MetadataHeader::ALIGN); let mut metadata_binary = vec![]; + metadata_binary.extend(Self::MAGIC_HEADER); metadata_binary.extend(MetadataHeader::new(serialized_data.len())); metadata_binary.extend(serialized_data); Ok(metadata_binary)