Skip to content

Commit 43fe983

Browse files
authored
Merge pull request #5630 from rmosolgo/fix-newline-escape-inside-triple-quotes
Parser: fix escape_single_quoted_newlines with nested string
2 parents e6f0868 + ef16bd0 commit 43fe983

2 files changed

Lines changed: 9 additions & 2 deletions

File tree

lib/graphql/language.rb

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,13 +47,19 @@ def self.serialize(value)
4747
def self.escape_single_quoted_newlines(query_str)
4848
scanner = StringScanner.new(query_str)
4949
inside_single_quoted_string = false
50+
inside_triple_quoted_string = false
5051
new_query_str = nil
5152
while !scanner.eos?
52-
if scanner.skip(/(?:\\"|[^"\n\r]|""")+/m)
53+
if scanner.skip('"""')
54+
inside_triple_quoted_string = !inside_triple_quoted_string
55+
new_query_str && (new_query_str << scanner.matched)
56+
elsif scanner.skip(/(?:\\"|[^"\n\r])+/m)
5357
new_query_str && (new_query_str << scanner.matched)
5458
elsif scanner.skip('"')
5559
new_query_str && (new_query_str << '"')
56-
inside_single_quoted_string = !inside_single_quoted_string
60+
if !inside_triple_quoted_string
61+
inside_single_quoted_string = !inside_single_quoted_string
62+
end
5763
elsif scanner.skip("\n")
5864
if inside_single_quoted_string
5965
new_query_str ||= query_str[0, scanner.pos - 1]

spec/graphql/language/parser_spec.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@
7272
# No modification to block strings:
7373
"{ a(\"\"\"\n abc\n\"\"\") }" => "{ a(\"\"\"\n abc\n\"\"\") }",
7474
"{ a(\"\"\"\r\n abc\r\n\"\"\") }" => "{ a(\"\"\"\r\n abc\r\n\"\"\") }",
75+
"{ x(s: \"\"\"The user said \"Did\n\"you change my input ?\"\"\") }" => "{ x(s: \"\"\"The user said \"Did\n\"you change my input ?\"\"\") }",
7576
}
7677

7778
replacements.each_with_index do |(before_str, after_str), idx|

0 commit comments

Comments
 (0)