Skip to content

Commit 1de642c

Browse files
saig0github-actions[bot]
authored andcommitted
fix: Handle escape sequences
Correct the handling of escape sequences in string literals. Don't replace escape sequences in regex expressions, for example, \r or \n. In the parser, these sequences start with \\. Same for \s, don't replace it with a whitespace, since this is also a part of a regex. Handle \\ to avoid that the sequence is escaped and returned as \\\\. (cherry picked from commit d266e80)
1 parent a2e6e3c commit 1de642c

File tree

1 file changed

+10
-16
lines changed

1 file changed

+10
-16
lines changed

src/main/scala/org/camunda/feel/impl/parser/FeelParser.scala

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -694,22 +694,16 @@ object FeelParser {
694694
}.getOrElse(ConstNull)
695695
}
696696

697-
// replace escaped character with the provided replacement
698697
private def translateEscapes(input: String): String = {
699-
val escapeMap = Map(
700-
"\\b" -> "\b",
701-
"\\t" -> "\t",
702-
"\\n" -> "\n",
703-
"\\f" -> "\f",
704-
"\\r" -> "\r",
705-
"\\\"" -> "\"",
706-
"\\'" -> "'",
707-
"\\s" -> " "
708-
// Add more escape sequences as needed
709-
)
710-
711-
escapeMap.foldLeft(input) { case (result, (escape, replacement)) =>
712-
result.replace(escape, replacement)
713-
}
698+
// replace all escape sequences
699+
input
700+
.replaceAll("(?<!\\\\)\\\\n", "\n") // new line
701+
.replaceAll("(?<!\\\\)\\\\r", "\r") // carriage return
702+
.replaceAll("(?<!\\\\)\\\\t", "\t") // tab
703+
.replaceAll("(?<!\\\\)\\\\b", "\b") // backspace
704+
.replaceAll("(?<!\\\\)\\\\f", "\f") // form feed
705+
.replaceAll("(?<!\\\\)\\\\'", "'") // single quote
706+
.replaceAll("(?<!\\\\)\\\\\"", "\"") // double quote
707+
.replaceAll("\\\\\\\\", "\\\\") // backslash (for regex characters)
714708
}
715709
}

0 commit comments

Comments
 (0)