Skip to content

Commit a32daa9

Browse files
committed
fix(eager execution): Fix bug from escaped slash right before quote character
1 parent 602a730 commit a32daa9

File tree

2 files changed

+15
-1
lines changed

2 files changed

+15
-1
lines changed

src/main/java/com/hubspot/jinjava/util/EagerExpressionResolver.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,12 @@ public static Set<String> findDeferredWords(
175175
);
176176
prevQuotePos = curPos;
177177
}
178-
prevChar = c;
178+
if (prevChar == '\\') {
179+
// Double escapes cancel out.
180+
prevChar = 0;
181+
} else {
182+
prevChar = c;
183+
}
179184
curPos++;
180185
}
181186
words.addAll(

src/test/java/com/hubspot/jinjava/util/EagerExpressionResolverTest.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -357,6 +357,15 @@ public void itHandlesSingleQuotes() {
357357
.isEqualTo("' & ' & '\"");
358358
}
359359

360+
@Test
361+
public void itHandlesEscapedSlashBeforeQuoteProperly() {
362+
EagerExpressionResult eagerExpressionResult = eagerResolveExpression(
363+
"deferred|replace('\\\\', '.')"
364+
);
365+
assertThat(eagerExpressionResult.getDeferredWords())
366+
.containsExactlyInAnyOrder("deferred", "replace.filter");
367+
}
368+
360369
@Test
361370
public void itHandlesNewlines() {
362371
context.put("foo", "\n");

0 commit comments

Comments
 (0)