Skip to content

Commit ef2c619

Browse files
committed
Merge 0.69.5 into 1.0.
2 parents 5be8ec2 + 43bd227 commit ef2c619

File tree

3 files changed

+37
-20
lines changed

3 files changed

+37
-20
lines changed

azure-pipelines.yml

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,12 +144,16 @@ jobs:
144144
inputs:
145145
targetType: 'inline'
146146
script: '((Get-Content .\tests\SideBySide\SideBySide.csproj -Raw) -replace(''<TargetFrameworks>.*</TargetFrameworks>'', ''<TargetFrameworks>net472;netcoreapp2.0</TargetFrameworks>'')) | Set-Content .\tests\SideBySide\SideBySide.csproj'
147+
- task: DotNetCoreCLI@2
148+
displayName: 'Restore packages'
149+
inputs:
150+
command: 'restore'
147151
- task: DotNetCoreCLI@2
148152
displayName: 'Side by Side tests (net472/netcoreapp2.0)'
149153
inputs:
150154
command: 'test'
151155
projects: 'tests/SideBySide/SideBySide.csproj'
152-
arguments: '-c Release'
156+
arguments: '-c Release --no-restore'
153157
testRunTitle: ${{ format('{0}, $(Agent.OS), {1}, {2}', 'mysql:8.0', 'net472/netcoreapp2.0', 'No SSL') }}
154158
env:
155159
DATA__UNSUPPORTEDFEATURES: 'Ed25519,Tls11,UnixDomainSocket'
@@ -177,12 +181,16 @@ jobs:
177181
inputs:
178182
targetType: 'inline'
179183
script: '((Get-Content .\tests\SideBySide\SideBySide.csproj -Raw) -replace(''<TargetFrameworks>.*</TargetFrameworks>'', ''<TargetFrameworks>netcoreapp2.1;netcoreapp3.0</TargetFrameworks>'')) | Set-Content .\tests\SideBySide\SideBySide.csproj'
184+
- task: DotNetCoreCLI@2
185+
displayName: 'Restore packages'
186+
inputs:
187+
command: 'restore'
180188
- task: DotNetCoreCLI@2
181189
displayName: 'Side by Side tests (netcoreapp2.1/netcoreapp3.0)'
182190
inputs:
183191
command: 'test'
184192
projects: 'tests/SideBySide/SideBySide.csproj'
185-
arguments: '-c Release -f netcoreapp2.1'
193+
arguments: '-c Release -f netcoreapp2.1 --no-restore'
186194
testRunTitle: ${{ format('{0}, $(Agent.OS), {1}, {2}', 'mysql:8.0', 'netcoreapp2.1/netcoreapp3.0', 'No SSL') }}
187195
env:
188196
DATA__UNSUPPORTEDFEATURES: 'Ed25519,Tls11,UnixDomainSocket'

docs/content/overview/version-history.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,10 @@ Version History
3737
* Add `net5.0` target framework.
3838
* Reduce memory allocations when hashing passwords (during login).
3939

40+
### 0.69.5
41+
42+
* Improve robustness of OK packet parsing: [#842](https://github.com/mysql-net/MySqlConnector/issues/842).
43+
4044
### 0.69.4
4145

4246
* Fix connection pool leak when a failure (e.g., timeout) occurs on a connection: [#836](https://github.com/mysql-net/MySqlConnector/issues/836).

src/MySqlConnector/Protocol/Payloads/OkPayload.cs

Lines changed: 23 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -37,33 +37,38 @@ public static OkPayload Create(ReadOnlySpan<byte> span, bool deprecateEof, bool
3737
var warningCount = (int) reader.ReadUInt16();
3838
string? newSchema = null;
3939

40-
if (clientSessionTrack && (serverStatus & ServerStatus.SessionStateChanged) == ServerStatus.SessionStateChanged)
40+
if (clientSessionTrack)
4141
{
42-
reader.ReadLengthEncodedByteString(); // human-readable info
43-
44-
// implies ProtocolCapabilities.SessionTrack
45-
var sessionStateChangeDataLength = checked((int) reader.ReadLengthEncodedInteger());
46-
var endOffset = reader.Offset + sessionStateChangeDataLength;
47-
while (reader.Offset < endOffset)
42+
if (reader.BytesRemaining > 0)
4843
{
49-
var kind = (SessionTrackKind) reader.ReadByte();
50-
var dataLength = (int) reader.ReadLengthEncodedInteger();
51-
switch (kind)
44+
reader.ReadLengthEncodedByteString(); // human-readable info
45+
46+
if ((serverStatus & ServerStatus.SessionStateChanged) == ServerStatus.SessionStateChanged && reader.BytesRemaining > 0)
5247
{
53-
case SessionTrackKind.Schema:
54-
newSchema = Encoding.UTF8.GetString(reader.ReadLengthEncodedByteString());
55-
break;
48+
// implies ProtocolCapabilities.SessionTrack
49+
var sessionStateChangeDataLength = checked((int) reader.ReadLengthEncodedInteger());
50+
var endOffset = reader.Offset + sessionStateChangeDataLength;
51+
while (reader.Offset < endOffset)
52+
{
53+
var kind = (SessionTrackKind) reader.ReadByte();
54+
var dataLength = (int) reader.ReadLengthEncodedInteger();
55+
switch (kind)
56+
{
57+
case SessionTrackKind.Schema:
58+
newSchema = Encoding.UTF8.GetString(reader.ReadLengthEncodedByteString());
59+
break;
5660

57-
default:
58-
reader.Offset += dataLength;
59-
break;
61+
default:
62+
reader.Offset += dataLength;
63+
break;
64+
}
65+
}
6066
}
6167
}
6268
}
6369
else
6470
{
65-
// either "string<EOF> info" or "string<lenenc> info" (followed by no session change info)
66-
// ignore human-readable string in both cases
71+
// ignore "string<EOF> info" human-readable string
6772
}
6873

6974
if (affectedRowCount == 0 && lastInsertId == 0 && warningCount == 0 && newSchema is null)

0 commit comments

Comments
 (0)