From 2c85346174978d9b4686ab3dfdda13bb9bad4629 Mon Sep 17 00:00:00 2001 From: muji Date: Sun, 18 Oct 2020 12:59:36 +0800 Subject: [PATCH] Try to detect stack overflows and fail. See https://github.com/sunng87/handlebars-rust/issues/386. --- components/compiler/src/compile.rs | 3 +++ .../compiler/src/hbs/helpers/document.rs | 18 ++++++++++-------- components/compiler/src/hbs/helpers/mod.rs | 1 + 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/components/compiler/src/compile.rs b/components/compiler/src/compile.rs index 63e6b0ad..49ceef57 100644 --- a/components/compiler/src/compile.rs +++ b/components/compiler/src/compile.rs @@ -59,6 +59,9 @@ where let mut errs: Vec = Vec::new(); rx.iter().for_each(|(p, r)| { if r.is_err() { + //if fail_fast { + //panic!(r.err()); + //} errs.push(r.err().unwrap()); } else { let res = r.unwrap(); diff --git a/components/compiler/src/hbs/helpers/document.rs b/components/compiler/src/hbs/helpers/document.rs index eeb8a5fb..26384860 100644 --- a/components/compiler/src/hbs/helpers/document.rs +++ b/components/compiler/src/hbs/helpers/document.rs @@ -80,15 +80,17 @@ impl HelperDef for Block { rc: &mut RenderContext<'reg, 'rc>, out: &mut dyn Output, ) -> HelperResult { + let template_path = rc.evaluate(ctx, "@root/file.template")? - .as_json() - .as_str() - .ok_or_else(|| { - RenderError::new( - "Type error for `file.template`, string expected", - ) - })? - .to_string(); + .as_json() + .as_str() + .ok_or_else(|| { + RenderError::new( + "Type error for `file.template`, string expected", + ) + })? + .to_string(); + super::render_document( &template_path, &self.context, h, r, ctx, rc, out) } diff --git a/components/compiler/src/hbs/helpers/mod.rs b/components/compiler/src/hbs/helpers/mod.rs index bb155a97..d5de7556 100644 --- a/components/compiler/src/hbs/helpers/mod.rs +++ b/components/compiler/src/hbs/helpers/mod.rs @@ -49,6 +49,7 @@ fn get_front_matter_config(file: &PathBuf) -> frontmatter::Config { frontmatter::Config::new_markdown(false) } + fn render_document<'reg: 'rc, 'rc>( template_path: &str, context: &BuildContext,