Skip to content

Commit f69cbbf

Browse files
Merge pull request #1222 from rabbitmq/rabbitmq-dotnet-client-1221
Check the return value of Read
2 parents 1a4b8bc + e5dde06 commit f69cbbf

File tree

1 file changed

+13
-2
lines changed
  • projects/RabbitMQ.Client/client/impl

1 file changed

+13
-2
lines changed

projects/RabbitMQ.Client/client/impl/Frame.cs

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,11 @@ internal static InboundFrame ReadFrom(Stream reader, byte[] frameHeaderBuffer, A
237237
break;
238238
}
239239

240-
reader.Read(frameHeaderBuffer, 0, frameHeaderBuffer.Length);
240+
if (reader.Read(frameHeaderBuffer, 0, frameHeaderBuffer.Length) == 0)
241+
{
242+
throw new EndOfStreamException("Reached the end of the stream while reading the frame header length.");
243+
}
244+
241245
int channel = NetworkOrderDeserializer.ReadUInt16(new ReadOnlySpan<byte>(frameHeaderBuffer));
242246
int payloadSize = NetworkOrderDeserializer.ReadInt32(new ReadOnlySpan<byte>(frameHeaderBuffer, 2, 4));
243247
if ((maxMessageSize > 0) && (payloadSize > maxMessageSize))
@@ -249,12 +253,19 @@ internal static InboundFrame ReadFrom(Stream reader, byte[] frameHeaderBuffer, A
249253
// Is returned by InboundFrame.Dispose in Connection.MainLoopIteration
250254
var readSize = payloadSize + EndMarkerLength;
251255
byte[] payloadBytes = pool.Rent(readSize);
256+
int read = 0;
252257
int bytesRead = 0;
253258
try
254259
{
255260
while (bytesRead < readSize)
256261
{
257-
bytesRead += reader.Read(payloadBytes, bytesRead, readSize - bytesRead);
262+
read = reader.Read(payloadBytes, bytesRead, readSize - bytesRead);
263+
if (read == 0)
264+
{
265+
throw new EndOfStreamException("Reached the end of the stream while reading frame payload.");
266+
}
267+
268+
bytesRead += read;
258269
}
259270
}
260271
catch (Exception)

0 commit comments

Comments
 (0)