Fixed server writing invalid item network events incorrectly (NetBuffer.Position is the read position, not write position)

This commit is contained in:
Joonas Rikkonen
2018-07-30 10:46:52 +03:00
parent 5233b51e18
commit 9964923eba

View File

@@ -1303,7 +1303,7 @@ namespace Barotrauma
return;
}
long initialWritePos = msg.Position;
int initialWritePos = msg.LengthBits;
NetEntityEvent.Type eventType = (NetEntityEvent.Type)extraData[0];
msg.WriteRangedInteger(0, Enum.GetValues(typeof(NetEntityEvent.Type)).Length - 1, (int)eventType);
@@ -1368,7 +1368,8 @@ namespace Barotrauma
if (!string.IsNullOrEmpty(errorMsg))
{
//something went wrong - rewind the write position and write invalid event type to prevent creating an unreadable event
msg.Position = initialWritePos;
msg.ReadBits(msg.Data, 0, initialWritePos);
msg.LengthBits = initialWritePos;
msg.WriteRangedInteger(0, Enum.GetValues(typeof(NetEntityEvent.Type)).Length - 1, (int)NetEntityEvent.Type.Invalid);
DebugConsole.Log(errorMsg);
GameAnalyticsManager.AddErrorEventOnce("Item.ServerWrite:" + errorMsg, GameAnalyticsSDK.Net.EGAErrorSeverity.Error, errorMsg);