Ignore malformed orders instead of crashing.

This commit is contained in:
Paul Chote
2018-08-24 17:33:55 +01:00
committed by reaperrr
parent cdfa52d918
commit 8475bd6294

View File

@@ -76,10 +76,12 @@ namespace OpenRA
public static Order Deserialize(World world, BinaryReader r) public static Order Deserialize(World world, BinaryReader r)
{ {
var magic = r.ReadByte(); try
switch (magic)
{ {
case 0xFF: var magic = r.ReadByte();
switch (magic)
{
case 0xFF:
{ {
var order = r.ReadString(); var order = r.ReadString();
var subjectId = r.ReadUInt32(); var subjectId = r.ReadUInt32();
@@ -156,7 +158,7 @@ namespace OpenRA
return new Order(order, subject, target, targetString, queued, extraLocation, extraData); return new Order(order, subject, target, targetString, queued, extraLocation, extraData);
} }
case 0xfe: case 0xfe:
{ {
var name = r.ReadString(); var name = r.ReadString();
var data = r.ReadString(); var data = r.ReadString();
@@ -164,11 +166,23 @@ namespace OpenRA
return new Order(name, null, false) { IsImmediate = true, TargetString = data }; return new Order(name, null, false) { IsImmediate = true, TargetString = data };
} }
default: default:
{ {
Log.Write("debug", "Received unknown order with magic {0}", magic); Log.Write("debug", "Received unknown order with magic {0}", magic);
return null; return null;
} }
}
}
catch (Exception e)
{
Log.Write("debug", "Caught exception while processing order");
Log.Write("debug", e.ToString());
// HACK: this can hopefully go away in the future
Game.Debug("Ignoring malformed order that would have crashed the game");
Game.Debug("Please file a bug report and include the replay from this match");
return null;
} }
} }