Skip to content

Commit 5cfc157

Browse files
authored
fix: Accessing FastBufferReader after it was disposed in MessagingSystem [MTT-5707] (#2464)
1 parent e0e0098 commit 5cfc157

File tree

1 file changed

+30
-32
lines changed

1 file changed

+30
-32
lines changed

com.unity.netcode.gameobjects/Runtime/Messaging/MessagingSystem.cs

Lines changed: 30 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -333,37 +333,35 @@ internal void SetServerMessageOrder(NativeArray<uint> messagesInIdOrder)
333333

334334
public void HandleMessage(in MessageHeader header, FastBufferReader reader, ulong senderId, float timestamp, int serializedHeaderSize)
335335
{
336-
if (header.MessageType >= m_HighMessageType)
337-
{
338-
Debug.LogWarning($"Received a message with invalid message type value {header.MessageType}");
339-
reader.Dispose();
340-
return;
341-
}
342-
var context = new NetworkContext
343-
{
344-
SystemOwner = m_Owner,
345-
SenderId = senderId,
346-
Timestamp = timestamp,
347-
Header = header,
348-
SerializedHeaderSize = serializedHeaderSize,
349-
MessageSize = header.MessageSize,
350-
};
351-
352-
var type = m_ReverseTypeMap[header.MessageType];
353-
if (!CanReceive(senderId, type, reader, ref context))
336+
using (reader)
354337
{
355-
reader.Dispose();
356-
return;
357-
}
338+
if (header.MessageType >= m_HighMessageType)
339+
{
340+
Debug.LogWarning($"Received a message with invalid message type value {header.MessageType}");
341+
return;
342+
}
343+
var context = new NetworkContext
344+
{
345+
SystemOwner = m_Owner,
346+
SenderId = senderId,
347+
Timestamp = timestamp,
348+
Header = header,
349+
SerializedHeaderSize = serializedHeaderSize,
350+
MessageSize = header.MessageSize,
351+
};
352+
353+
var type = m_ReverseTypeMap[header.MessageType];
354+
if (!CanReceive(senderId, type, reader, ref context))
355+
{
356+
return;
357+
}
358358

359-
for (var hookIdx = 0; hookIdx < m_Hooks.Count; ++hookIdx)
360-
{
361-
m_Hooks[hookIdx].OnBeforeReceiveMessage(senderId, type, reader.Length + FastBufferWriter.GetWriteSize<MessageHeader>());
362-
}
359+
var handler = m_MessageHandlers[header.MessageType];
360+
for (var hookIdx = 0; hookIdx < m_Hooks.Count; ++hookIdx)
361+
{
362+
m_Hooks[hookIdx].OnBeforeReceiveMessage(senderId, type, reader.Length + FastBufferWriter.GetWriteSize<MessageHeader>());
363+
}
363364

364-
var handler = m_MessageHandlers[header.MessageType];
365-
using (reader)
366-
{
367365
// This will also log an exception is if the server knows about a message type the client doesn't know
368366
// about. In this case the handler will be null. It is still an issue the user must deal with: If the
369367
// two connecting builds know about different messages, the server should not send a message to a client
@@ -388,10 +386,10 @@ public void HandleMessage(in MessageHeader header, FastBufferReader reader, ulon
388386
Debug.LogException(e);
389387
}
390388
}
391-
}
392-
for (var hookIdx = 0; hookIdx < m_Hooks.Count; ++hookIdx)
393-
{
394-
m_Hooks[hookIdx].OnAfterReceiveMessage(senderId, type, reader.Length + FastBufferWriter.GetWriteSize<MessageHeader>());
389+
for (var hookIdx = 0; hookIdx < m_Hooks.Count; ++hookIdx)
390+
{
391+
m_Hooks[hookIdx].OnAfterReceiveMessage(senderId, type, reader.Length + FastBufferWriter.GetWriteSize<MessageHeader>());
392+
}
395393
}
396394
}
397395

0 commit comments

Comments
 (0)