Skip to content

Commit 388fbaf

Browse files
committed
Merge from v8
2 parents 651da05 + 81a05a6 commit 388fbaf

File tree

5 files changed

+28
-3
lines changed

5 files changed

+28
-3
lines changed

src/GraphQLParser.ApiTests/GraphQLParser.ApiTests.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
<ItemGroup>
1010
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.7.2" />
1111
<PackageReference Include="Shouldly" Version="4.2.1" />
12-
<PackageReference Include="xunit" Version="2.5.1" />
12+
<PackageReference Include="xunit" Version="2.5.2" />
1313
<PackageReference Include="xunit.runner.visualstudio" Version="2.5.1" />
1414
<PackageReference Include="PublicApiGenerator" Version="11.0.0" />
1515
</ItemGroup>

src/GraphQLParser.Tests/GraphQLParser.Tests.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
</PackageReference>
2929
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.7.2" />
3030
<PackageReference Include="Shouldly" Version="4.2.1" />
31-
<PackageReference Include="xunit" Version="2.5.1" />
31+
<PackageReference Include="xunit" Version="2.5.2" />
3232
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.5" />
3333
</ItemGroup>
3434

src/GraphQLParser.Tests/Visitors/SDLPrinterFromParsedTextTests.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -984,6 +984,7 @@ public async Task SDLPrinter_Should_Print_Document(
984984
[InlineData(30, "Test \\ escaping", "Test \\\\ escaping", false)]
985985
[InlineData(31, "t\"est\n line2", "\nt\"est\nline2\n", true)] // BlockString with double quote inside
986986
[InlineData(32, "t\\\"\"\"est\n line2", "\nt\\\"\"\"est\nline2\n", true)] // BlockString with triple double quote inside
987+
[InlineData(32, "t\\\"\"\"\"est\n line2", "\nt\\\"\"\"\"est\nline2\n", true)] // BlockString with quad double quote inside
987988
public async Task SDLPrinter_Should_Print_BlockStrings(int number, string input, string expected, bool isBlockString)
988989
{
989990
number.ShouldBeGreaterThan(0);

src/GraphQLParser/LexerContext.cs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,30 @@ private Token ReadBlockString()
217217
// if last character was \ then go ahead and write out the """, skipping the \
218218
if (escape)
219219
{
220+
// write """ to buffer
221+
if ((index + 2) < buffer.Length)
222+
{
223+
buffer[index++] = '\"';
224+
buffer[index++] = '\"';
225+
buffer[index++] = '\"';
226+
}
227+
else // fallback to StringBuilder in case of buffer overflow
228+
{
229+
sb ??= new StringBuilder(buffer.Length * 2);
230+
231+
for (int i = 0; i < index; ++i)
232+
sb.Append(buffer[i]);
233+
234+
sb.Append("\"\"\"");
235+
index = 0;
236+
}
237+
// skip \""" from source
238+
_currentIndex += 2;
220239
escape = false;
240+
lastWasCr = false;
241+
// advance to next character
242+
code = NextCode();
243+
continue;
221244
}
222245
else
223246
{

src/GraphQLParser/Visitors/SDLPrinter.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,8 @@ async ValueTask WriteMultilineBlockString()
111111
case '"':
112112
if (i < length - 2 && description.Value.Span[i + 1] == '"' && description.Value.Span[i + 2] == '"')
113113
{
114-
await context.WriteAsync("\\\"").ConfigureAwait(false);
114+
await context.WriteAsync("\\\"\"\"").ConfigureAwait(false);
115+
i += 2;
115116
}
116117
else
117118
{

0 commit comments

Comments
 (0)