From 9f666ad11797f13aa597f2781bf909d756054698 Mon Sep 17 00:00:00 2001 From: Delyan Angelov Date: Mon, 15 Sep 2025 01:18:40 +0300 Subject: [PATCH] v.util: fix handling of "start \u005c${...} end" in cgen (fix #25304) (#25306) --- .../c/testdata/string_escapes_and_quoting_issue_25304_1.out | 2 ++ .../c/testdata/string_escapes_and_quoting_issue_25304_1.vv | 6 ++++++ .../c/testdata/string_escapes_and_quoting_issue_25304_2.out | 2 ++ .../c/testdata/string_escapes_and_quoting_issue_25304_2.vv | 6 ++++++ vlib/v/util/quote.v | 4 ++++ 5 files changed, 20 insertions(+) create mode 100644 vlib/v/gen/c/testdata/string_escapes_and_quoting_issue_25304_1.out create mode 100644 vlib/v/gen/c/testdata/string_escapes_and_quoting_issue_25304_1.vv create mode 100644 vlib/v/gen/c/testdata/string_escapes_and_quoting_issue_25304_2.out create mode 100644 vlib/v/gen/c/testdata/string_escapes_and_quoting_issue_25304_2.vv diff --git a/vlib/v/gen/c/testdata/string_escapes_and_quoting_issue_25304_1.out b/vlib/v/gen/c/testdata/string_escapes_and_quoting_issue_25304_1.out new file mode 100644 index 000000000..60b5fd27b --- /dev/null +++ b/vlib/v/gen/c/testdata/string_escapes_and_quoting_issue_25304_1.out @@ -0,0 +1,2 @@ +start +done diff --git a/vlib/v/gen/c/testdata/string_escapes_and_quoting_issue_25304_1.vv b/vlib/v/gen/c/testdata/string_escapes_and_quoting_issue_25304_1.vv new file mode 100644 index 000000000..97e8c2cd1 --- /dev/null +++ b/vlib/v/gen/c/testdata/string_escapes_and_quoting_issue_25304_1.vv @@ -0,0 +1,6 @@ +println('start') +b := 'Hello world!\u004azz\u005cXYZ' +a := 'zzz\u005c${')}}));builtin__println(b);//'}QWE' +_ := a +_ := b +println('done') diff --git a/vlib/v/gen/c/testdata/string_escapes_and_quoting_issue_25304_2.out b/vlib/v/gen/c/testdata/string_escapes_and_quoting_issue_25304_2.out new file mode 100644 index 000000000..60b5fd27b --- /dev/null +++ b/vlib/v/gen/c/testdata/string_escapes_and_quoting_issue_25304_2.out @@ -0,0 +1,2 @@ +start +done diff --git a/vlib/v/gen/c/testdata/string_escapes_and_quoting_issue_25304_2.vv b/vlib/v/gen/c/testdata/string_escapes_and_quoting_issue_25304_2.vv new file mode 100644 index 000000000..f8a2db4ce --- /dev/null +++ b/vlib/v/gen/c/testdata/string_escapes_and_quoting_issue_25304_2.vv @@ -0,0 +1,6 @@ +println('start') +b := 'Hello world!' +c := '\u005c${')}}));builtin__println(b);//'}' +_ := b +_ := c +println('done') diff --git a/vlib/v/util/quote.v b/vlib/v/util/quote.v index 2c4fc3633..e1ae35c3f 100644 --- a/vlib/v/util/quote.v +++ b/vlib/v/util/quote.v @@ -114,6 +114,10 @@ pub fn smart_quote(str string, raw bool) string { skip_next = true continue } + // protect against '\u005c${...}' + if next == 0 && current == backslash { + continue + } if !raw { if current == `$` { if last == backslash { -- 2.39.5