Skip to content

Commit c284f9c

Browse files
tewaroclaude
andauthored
Unbound json param extractor (#5788)
Useful because ast is now large for clang Co-authored-by: Claude <[email protected]>
1 parent e328a31 commit c284f9c

File tree

1 file changed

+16
-3
lines changed

1 file changed

+16
-3
lines changed

src/workerd/tools/param-extractor.rs

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use std::ffi::OsStr;
22
use std::fs::File;
3+
use std::io::BufRead;
34
use std::io::BufReader;
45
use std::io::BufWriter;
56
use std::io::Write;
@@ -57,9 +58,21 @@ fn main() -> Result<()> {
5758
let clang_ast = args.value_from_os_str("--input", |path_str| {
5859
let path = Path::new(path_str);
5960
let file = File::open(path)?;
60-
let serde = match path.extension().and_then(OsStr::to_str) {
61-
Some("gz") => serde_json::from_reader(BufReader::new(GzDecoder::new(file))),
62-
_ => serde_json::from_reader(BufReader::new(file)),
61+
let serde = {
62+
let reader: &mut dyn BufRead = {
63+
if Some("gz") == path.extension().and_then(OsStr::to_str) {
64+
&mut BufReader::new(GzDecoder::new(file))
65+
} else {
66+
&mut BufReader::new(file)
67+
}
68+
};
69+
70+
let mut deserializer = serde_json::Deserializer::from_reader(reader);
71+
// Note: serde_json doesn't support custom recursion limits, only disabling.
72+
// We disable the limit to handle deeply nested AST structures (default 128 is
73+
// insufficient for the clang AST dump, which can be deeply nested).
74+
deserializer.disable_recursion_limit();
75+
ClangNode::deserialize(&mut deserializer)
6376
};
6477
serde.map_err(anyhow::Error::from)
6578
})?;

0 commit comments

Comments
 (0)