From 50c4074f7b8b3f2d08e1ad18992fe968fb3f1cd1 Mon Sep 17 00:00:00 2001 From: Henrique Mota Esteves Date: Wed, 13 Sep 2023 22:29:03 +0200 Subject: [PATCH] feat: add escaping strategy for JSON --- .../jknack/handlebars/EscapingStrategy.java | 4 ++++ .../handlebars/EscapingStrategyTest.java | 18 ++++++++++++++++++ 2 files changed, 22 insertions(+) create mode 100644 handlebars/src/test/java/com/github/jknack/handlebars/EscapingStrategyTest.java diff --git a/handlebars/src/main/java/com/github/jknack/handlebars/EscapingStrategy.java b/handlebars/src/main/java/com/github/jknack/handlebars/EscapingStrategy.java index 03ab9ccfc..77c659b50 100644 --- a/handlebars/src/main/java/com/github/jknack/handlebars/EscapingStrategy.java +++ b/handlebars/src/main/java/com/github/jknack/handlebars/EscapingStrategy.java @@ -141,6 +141,10 @@ private static Map escapeMap(final String[][] table) EscapingStrategy JS = value -> value == null ? null : StringEscapeUtils.escapeEcmaScript(value.toString()); + /** Escape variable for JSON. */ + EscapingStrategy JSON = value -> + value == null ? null : StringEscapeUtils.escapeJson(value.toString()); + /** NOOP escaping. */ EscapingStrategy NOOP = value -> value; diff --git a/handlebars/src/test/java/com/github/jknack/handlebars/EscapingStrategyTest.java b/handlebars/src/test/java/com/github/jknack/handlebars/EscapingStrategyTest.java new file mode 100644 index 000000000..415e79465 --- /dev/null +++ b/handlebars/src/test/java/com/github/jknack/handlebars/EscapingStrategyTest.java @@ -0,0 +1,18 @@ +package com.github.jknack.handlebars; + +import org.junit.Test; + +import java.io.IOException; + +import static org.junit.Assert.assertEquals; + +public class EscapingStrategyTest { + @Test + public void shouldEscapeVariableForJSON() throws IOException { + Template template = new Handlebars().with(EscapingStrategy.JSON).compileInline("{{this}}"); + + assertEquals("\\\"", template.apply("\"")); + assertEquals("\\\\", template.apply("\\")); + assertEquals("\\/", template.apply("/")); + } +}