Skip to content

Commit a918daf

Browse files
fix: preserve non-ASCII literals in EscapeStringLiterals (#1746)
1 parent 08dab40 commit a918daf

2 files changed

Lines changed: 6 additions & 3 deletions

File tree

util/util.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -288,9 +288,7 @@ func EscapeStringLiterals(expr string) string {
288288
inString := false
289289
var quote rune
290290

291-
for i := 0; i < len(expr); i++ {
292-
ch := rune(expr[i])
293-
291+
for _, ch := range expr {
294292
if inString {
295293
result.WriteRune(ch)
296294
if ch == '\\' {

util/util_test.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,11 @@ func TestEscapeStringLiterals(t *testing.T) {
257257
testEscapeStringLiterals(t, `regexMatch("\1\2", p.obj)`, `regexMatch("\\1\\2", p.obj)`)
258258
testEscapeStringLiterals(t, `r.sub == '\test'`, `r.sub == '\\test'`)
259259

260+
// Test that non-ASCII (multi-byte UTF-8) string literals are preserved
261+
testEscapeStringLiterals(t, `r.sub == '香港'`, `r.sub == '香港'`)
262+
testEscapeStringLiterals(t, `r.obj == "café"`, `r.obj == "café"`)
263+
testEscapeStringLiterals(t, `keyMatch(r.obj, 'naïve\1')`, `keyMatch(r.obj, 'naïve\\1')`)
264+
260265
// Test expressions without string literals
261266
testEscapeStringLiterals(t, `r.sub == p.sub`, `r.sub == p.sub`)
262267
testEscapeStringLiterals(t, `keyMatch(r.obj, p.obj)`, `keyMatch(r.obj, p.obj)`)

0 commit comments

Comments
 (0)