fix: Fixes crashing due to bad packet assumptions. (#1829)
### Summary - Fixes various exploits that can crash the shard when the client misbehaves. - Clients will now be disconnected if they send packets that are marked as out of game only (new flag), while they are in-game. > [!Note] > **Developer Note** > Added an `OutOfGameOnly` which should be used to flag packets as only available out of the game. > This is the opposite of, yet not the converse to `InGameOnly`.
This commit is contained in:
parent
2429b00638
commit
6f444488a5
10 changed files with 113 additions and 46 deletions
|
|
@ -806,20 +806,27 @@ public partial class NetState : IComparable<NetState>, IValueLinkListNode<NetSta
|
|||
return ParserState.AwaitingPartialPacket;
|
||||
}
|
||||
|
||||
if (handler.Ingame)
|
||||
if (handler.InGameOnly)
|
||||
{
|
||||
if (Mobile == null)
|
||||
{
|
||||
LogInfo($"received packet 0x{packetId:X2} before having been attached to a mobile");
|
||||
LogInfo($"Received packet 0x{packetId:X2} before having been attached to a mobile.");
|
||||
return ParserState.Error;
|
||||
}
|
||||
|
||||
if (Mobile.Deleted)
|
||||
{
|
||||
LogInfo($"Received packet 0x{packetId:X2} after having been attached to a deleted mobile.");
|
||||
return ParserState.Error;
|
||||
}
|
||||
}
|
||||
|
||||
if (handler.OutOfGameOnly && Mobile?.Deleted == false)
|
||||
{
|
||||
LogInfo($"Received packet 0x{packetId:X2} after having been attached to a mobile.");
|
||||
return ParserState.Error;
|
||||
}
|
||||
|
||||
var throttler = handler.ThrottleCallback;
|
||||
if (throttler != null)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue