From a32daa911e51d71b93025198f63b43db3b4ab96c Mon Sep 17 00:00:00 2001 From: Jack Smith Date: Tue, 18 Nov 2025 16:53:23 -0500 Subject: [PATCH] fix(eager execution): Fix bug from escaped slash right before quote character --- .../hubspot/jinjava/util/EagerExpressionResolver.java | 7 ++++++- .../jinjava/util/EagerExpressionResolverTest.java | 9 +++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/hubspot/jinjava/util/EagerExpressionResolver.java b/src/main/java/com/hubspot/jinjava/util/EagerExpressionResolver.java index cc97811ff..a2efeeebc 100644 --- a/src/main/java/com/hubspot/jinjava/util/EagerExpressionResolver.java +++ b/src/main/java/com/hubspot/jinjava/util/EagerExpressionResolver.java @@ -175,7 +175,12 @@ public static Set findDeferredWords( ); prevQuotePos = curPos; } - prevChar = c; + if (prevChar == '\\') { + // Double escapes cancel out. + prevChar = 0; + } else { + prevChar = c; + } curPos++; } words.addAll( diff --git a/src/test/java/com/hubspot/jinjava/util/EagerExpressionResolverTest.java b/src/test/java/com/hubspot/jinjava/util/EagerExpressionResolverTest.java index 21b9d2592..2e1d962cf 100644 --- a/src/test/java/com/hubspot/jinjava/util/EagerExpressionResolverTest.java +++ b/src/test/java/com/hubspot/jinjava/util/EagerExpressionResolverTest.java @@ -357,6 +357,15 @@ public void itHandlesSingleQuotes() { .isEqualTo("' & ' & '\""); } + @Test + public void itHandlesEscapedSlashBeforeQuoteProperly() { + EagerExpressionResult eagerExpressionResult = eagerResolveExpression( + "deferred|replace('\\\\', '.')" + ); + assertThat(eagerExpressionResult.getDeferredWords()) + .containsExactlyInAnyOrder("deferred", "replace.filter"); + } + @Test public void itHandlesNewlines() { context.put("foo", "\n");