瀏覽代碼

Fix reading more data than required for the body.

release/3.x.x
Christian 7 年之前
父節點
當前提交
751ac19c4b
共有 1 個檔案被更改,包括 9 行新增1 行删除
  1. +9
    -1
      Frameworks/MQTTnet.NetStandard/Adapter/MqttChannelAdapter.cs

+ 9
- 1
Frameworks/MQTTnet.NetStandard/Adapter/MqttChannelAdapter.cs 查看文件

@@ -142,7 +142,13 @@ namespace MQTTnet.Adapter
var buffer = new byte[ReadBufferSize];
while (body.Length < header.BodyLength)
{
var readBytesCount = await stream.ReadAsync(buffer, 0, buffer.Length, cancellationToken).ConfigureAwait(false);
var bytesLeft = header.BodyLength - (int)body.Length;
if (bytesLeft > buffer.Length)
{
bytesLeft = buffer.Length;
}

var readBytesCount = await stream.ReadAsync(buffer, 0, bytesLeft, cancellationToken).ConfigureAwait(false);
// Check if the client closed the connection before sending the full body.
if (readBytesCount == 0)
@@ -150,6 +156,8 @@ namespace MQTTnet.Adapter
throw new MqttCommunicationException("Connection closed while reading remaining packet body.");
}

// Here is no need to await because internally only an array is used and no real I/O operation is made.
// Using async here will only generate overhead.
body.Write(buffer, 0, readBytesCount);
}



Loading…
取消
儲存