Ignore malformed orders instead of crashing.
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user