Skip to content

Commit 7b23c70

Browse files
committed
Ensure there is adequate space in the output buffer. Fixes #520
1 parent acb0fc0 commit 7b23c70

File tree

3 files changed

+31
-2
lines changed

3 files changed

+31
-2
lines changed

src/MySqlConnector/Protocol/Serialization/ByteBufferWriter.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ public void Write(ReadOnlySpan<char> chars)
148148
m_encoder = Encoding.UTF8.GetEncoder();
149149
while (chars.Length > 0)
150150
{
151-
if (m_output.Length == 0)
151+
if (m_output.Length < 4)
152152
Reallocate();
153153
m_encoder.Convert(chars, m_output.Span, true, out var charsUsed, out var bytesUsed, out var completed);
154154
chars = chars.Slice(charsUsed);
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
using MySqlConnector.Protocol.Serialization;
2+
using Xunit;
3+
4+
namespace MySqlConnector.Tests
5+
{
6+
public class ByteBufferWriterTests
7+
{
8+
[Theory]
9+
[InlineData(1)]
10+
[InlineData(10)]
11+
[InlineData(100)]
12+
public void WriteString(int length)
13+
{
14+
var expected = new byte[length * 3];
15+
for (var i = 0; i < length; i++)
16+
{
17+
expected[i * 3] = 0xEE;
18+
expected[i * 3 + 1] = 0x80;
19+
expected[i * 3 + 2] = 0x81;
20+
}
21+
22+
var writer = new ByteBufferWriter();
23+
var input = char.ConvertFromUtf32(0xE001);
24+
for (var i = 0; i < length; i++)
25+
writer.Write(input);
26+
Assert.Equal(expected, writer.ArraySegment);
27+
}
28+
}
29+
}

tests/MySqlConnector.Tests/MySqlConnector.Tests.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232

3333
<ItemGroup Condition=" '$(Configuration)' == 'Baseline' ">
3434
<PackageReference Include="MySql.Data" Version="8.0.11" />
35-
<Compile Remove="ConnectionTests.cs;FakeMySqlServer.cs;FakeMySqlServerConnection.cs;LoadBalancerTests.cs;NormalizeTests.cs;StatementPreparerTests.cs;TypeMapperTests.cs;UtilityTests.cs" />
35+
<Compile Remove="ByteBufferWriterTests.cs;ConnectionTests.cs;FakeMySqlServer.cs;FakeMySqlServerConnection.cs;LoadBalancerTests.cs;NormalizeTests.cs;StatementPreparerTests.cs;TypeMapperTests.cs;UtilityTests.cs" />
3636
</ItemGroup>
3737

3838
<ItemGroup Condition=" '$(TargetFramework)' == 'net462' ">

0 commit comments

Comments
 (0)