Skip to content

Commit 7411385

Browse files
author
Shuode Li
committed
Fix underlying assumption of SessionTrack that not work well for MariaDB
Signed-off-by: elemount <[email protected]>
1 parent 2bf280a commit 7411385

File tree

1 file changed

+16
-13
lines changed

1 file changed

+16
-13
lines changed

src/MySqlConnector/Protocol/Payloads/OkPayload.cs

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -43,22 +43,25 @@ public static OkPayload Create(ReadOnlySpan<byte> span, bool deprecateEof)
4343
{
4444
reader.ReadLengthEncodedByteString(); // human-readable info
4545

46-
// implies ProtocolCapabilities.SessionTrack
47-
var sessionStateChangeDataLength = checked((int) reader.ReadLengthEncodedInteger());
48-
var endOffset = reader.Offset + sessionStateChangeDataLength;
49-
while (reader.Offset < endOffset)
46+
// If ProtocolCapabilities.SessionTrack is enabled, it will contains the information. Otherwise, it will contains Nothing.
47+
if (reader.BytesRemaining > 0)
5048
{
51-
var kind = (SessionTrackKind) reader.ReadByte();
52-
var dataLength = (int) reader.ReadLengthEncodedInteger();
53-
switch (kind)
49+
var sessionStateChangeDataLength = checked((int) reader.ReadLengthEncodedInteger());
50+
var endOffset = reader.Offset + sessionStateChangeDataLength;
51+
while (reader.Offset < endOffset)
5452
{
55-
case SessionTrackKind.Schema:
56-
newSchema = Encoding.UTF8.GetString(reader.ReadLengthEncodedByteString());
57-
break;
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;
5860

59-
default:
60-
reader.Offset += dataLength;
61-
break;
61+
default:
62+
reader.Offset += dataLength;
63+
break;
64+
}
6265
}
6366
}
6467
}

0 commit comments

Comments
 (0)