From eb73e05b7a4e44fba6ec2d6c0c1cc791818eb506 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Thu, 19 Apr 2018 13:36:59 -0700 Subject: [PATCH] Deserialize less to match schema versions Currently the entire `Program` is deserialized to match schema versions but this is likely to fail when the schema changes. Instead just deserialize the schema/version fields, compare those, and if successful go ahead and deserialize everything. --- crates/cli-support/src/lib.rs | 8 +++++++- crates/shared/src/lib.rs | 6 ++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/crates/cli-support/src/lib.rs b/crates/cli-support/src/lib.rs index 3708ad53..8f1a8393 100644 --- a/crates/cli-support/src/lib.rs +++ b/crates/cli-support/src/lib.rs @@ -224,7 +224,7 @@ fn extract_programs(module: &mut Module) -> Vec { ((payload[3] as usize) << 24); let (a, b) = payload[4..].split_at(len as usize); payload = b; - let p: shared::Program = match serde_json::from_slice(&a) { + let p: shared::ProgramOnlySchema = match serde_json::from_slice(&a) { Ok(f) => f, Err(e) => { panic!("failed to decode what looked like wasm-bindgen data: {}", e) @@ -255,6 +255,12 @@ to open an issue at https://github.com/alexcrichton/wasm-bindgen/issues! ", p.version, version); } + let p: shared::Program = match serde_json::from_slice(&a) { + Ok(f) => f, + Err(e) => { + panic!("failed to decode what looked like wasm-bindgen data: {}", e) + } + }; ret.push(p); } diff --git a/crates/shared/src/lib.rs b/crates/shared/src/lib.rs index a3836391..be6776bd 100644 --- a/crates/shared/src/lib.rs +++ b/crates/shared/src/lib.rs @@ -3,6 +3,12 @@ extern crate serde_derive; pub const SCHEMA_VERSION: &str = "2"; +#[derive(Deserialize)] +pub struct ProgramOnlySchema { + pub schema_version: String, + pub version: String, +} + #[derive(Deserialize, Serialize)] pub struct Program { pub exports: Vec,