Skip to content

Commit 2a1ad2c

Browse files
committed
(fix) add reproduce case for #348 where block context leaked and fix
1 parent f7d7d3c commit 2a1ad2c

File tree

1 file changed

+12
-1
lines changed

1 file changed

+12
-1
lines changed

src/helpers/helper_each.rs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ impl HelperDef for EachHelper {
8181
t.render(r, ctx, rc, out)?;
8282
}
8383

84+
rc.pop_block();
8485
Ok(())
8586
}
8687
(true, &Json::Object(ref obj)) => {
@@ -130,6 +131,8 @@ impl HelperDef for EachHelper {
130131
is_first = false;
131132
}
132133
}
134+
135+
rc.pop_block();
133136
Ok(())
134137
}
135138
(false, _) => {
@@ -144,7 +147,6 @@ impl HelperDef for EachHelper {
144147
))),
145148
};
146149

147-
rc.pop_block();
148150
rendered
149151
}
150152
None => Ok(()),
@@ -426,4 +428,13 @@ mod test {
426428
let rendered = reg.render_template(template, &input).unwrap();
427429
assert_eq!("bar", rendered);
428430
}
431+
432+
#[test]
433+
fn test_block_context_leak() {
434+
let reg = Registry::new();
435+
let template = "{{#each list}}{{#each inner}}{{this}}{{/each}}{{foo}}{{/each}}";
436+
let input = json!({"list": [{"inner": [], "foo": 1}, {"inner": [], "foo": 2}]});
437+
let rendered = reg.render_template(template, &input).unwrap();
438+
assert_eq!("12", rendered);
439+
}
429440
}

0 commit comments

Comments
 (0)