From 221c02138459d612eae3d416341fceba65b24a42 Mon Sep 17 00:00:00 2001 From: Nadrieril Date: Thu, 4 Jul 2024 17:01:37 +0200 Subject: [PATCH] Disable recursion limit in serde_json This is needed to parse the llbc file emitted by charon on itself ^^' --- charon/Cargo.lock | 11 +++++++++++ charon/Cargo.toml | 3 ++- charon/tests/generate-ml.rs | 8 +++++++- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/charon/Cargo.lock b/charon/Cargo.lock index bdf1d80f..29dd7f47 100644 --- a/charon/Cargo.lock +++ b/charon/Cargo.lock @@ -167,6 +167,7 @@ dependencies = [ "rustc_version", "serde", "serde_json", + "serde_stacker", "snapbox", "stacker", "take_mut", @@ -994,6 +995,16 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_stacker" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "babfccff5773ff80657f0ecf553c7c516bdc2eb16389c0918b36b73e7015276e" +dependencies = [ + "serde", + "stacker", +] + [[package]] name = "sharded-slab" version = "0.1.7" diff --git a/charon/Cargo.toml b/charon/Cargo.toml index 8b32a203..c12239fc 100644 --- a/charon/Cargo.toml +++ b/charon/Cargo.toml @@ -39,7 +39,8 @@ petgraph = "0.6.2" pretty = "0.12" regex = "1.7.1" rustc_version = "0.4" -serde_json = "1.0.91" +serde_json = { version = "1.0.91", features = ["unbounded_depth"] } +serde_stacker = "0.1.11" serde = { version = "1.0.152", features = ["derive"] } stacker = "0.1" take_mut = "0.2.2" diff --git a/charon/tests/generate-ml.rs b/charon/tests/generate-ml.rs index be4690be..3c36033a 100644 --- a/charon/tests/generate-ml.rs +++ b/charon/tests/generate-ml.rs @@ -350,9 +350,15 @@ fn generate_ml() -> Result<()> { } let crate_data: CrateData = { + use serde::Deserialize; let file = File::open(charon_llbc)?; let reader = BufReader::new(file); - serde_json::from_reader(reader)? + let mut deserializer = serde_json::Deserializer::from_reader(reader); + // Deserialize without recursion limit. + deserializer.disable_recursion_limit(); + // Grow stack space as needed. + let deserializer = serde_stacker::Deserializer::new(&mut deserializer); + CrateData::deserialize(deserializer)? }; let mut ctx = GenerateCtx {