Skip to content

Make client robust against evil maps that could crash the client #621

Open
@SadPencil

Description

A map provided by an adversary could crash the client. There should be try-catch surroundings, and if exception happens, unset the map to null and show a message to the user

05.01. 06:09:00.622    KABOOOOOOM!!! Info:
05.01. 06:09:00.623    Type: System.FormatException
05.01. 06:09:00.623    Message: Input string was not in a correct format.
05.01. 06:09:00.638    Source: mscorlib
05.01. 06:09:00.638    TargetSite.Name: StringToNumber
05.01. 06:09:00.639    Stacktrace:    at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
   at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
   at System.Convert.ToInt32(String value, IFormatProvider provider)
   at DTAClient.Domain.Multiplayer.Map.GetIsometricWaypointCoords(String waypoint, String[] actualSizeValues, String[] localSizeValues, Point previewSizePoint) in C:\Dev\xna-cncnet-client\DXMainClient\Domain\Multiplayer\Map.cs:line 879
   at DTAClient.Domain.Multiplayer.Map.GetStartingLocationPreviewCoords(Point previewSize) in C:\Dev\xna-cncnet-client\DXMainClient\Domain\Multiplayer\Map.cs:line 475
   at DTAClient.DXGUI.Multiplayer.GameLobby.MapPreviewBox.UpdateMap() in C:\Dev\xna-cncnet-client\DXMainClient\DXGUI\Multiplayer\GameLobby\MapPreviewBox.cs:line 456
   at DTAClient.DXGUI.Multiplayer.GameLobby.MapPreviewBox.set_GameModeMap(GameModeMap value) in C:\Dev\xna-cncnet-client\DXMainClient\DXGUI\Multiplayer\GameLobby\MapPreviewBox.cs:line 109
   at DTAClient.DXGUI.Multiplayer.GameLobby.GameLobbyBase.ChangeMap(GameModeMap gameModeMap) in C:\Dev\xna-cncnet-client\DXMainClient\DXGUI\Multiplayer\GameLobby\GameLobbyBase.cs:line 2228
   at DTAClient.DXGUI.Multiplayer.GameLobby.MultiplayerGameLobby.ChangeMap(GameModeMap gameModeMap) in C:\Dev\xna-cncnet-client\DXMainClient\DXGUI\Multiplayer\GameLobby\MultiplayerGameLobby.cs:line 1110
   at DTAClient.DXGUI.Multiplayer.GameLobby.CnCNetGameLobby.ChangeMap(GameModeMap gameModeMap) in C:\Dev\xna-cncnet-client\DXMainClient\DXGUI\Multiplayer\GameLobby\CnCNetGameLobby.cs:line 1251
   at DTAClient.DXGUI.Multiplayer.GameLobby.GameLobbyBase.LbGameModeMapList_SelectedIndexChanged() in C:\Dev\xna-cncnet-client\DXMainClient\DXGUI\Multiplayer\GameLobby\GameLobbyBase.cs:line 704
   at DTAClient.DXGUI.Multiplayer.GameLobby.GameLobbyBase.LbGameModeMapList_SelectedIndexChanged(Object sender, EventArgs e) in C:\Dev\xna-cncnet-client\DXMainClient\DXGUI\Multiplayer\GameLobby\GameLobbyBase.cs:line 708
   at Rampastring.XNAUI.XNAControls.XNAMultiColumnListBox.ListBox_SelectedIndexChanged(Object sender, EventArgs e)
   at Rampastring.XNAUI.XNAControls.XNAListBox.set_SelectedIndex(Int32 value)
   at Rampastring.XNAUI.XNAControls.XNAListBox.OnMouseLeftDown()
   at Rampastring.XNAUI.XNAControls.XNAControl.Update(GameTime gameTime)
   at Rampastring.XNAUI.XNAControls.XNAPanel.Update(GameTime gameTime)
   at Rampastring.XNAUI.XNAControls.XNAListBox.Update(GameTime gameTime)
   at Rampastring.XNAUI.XNAControls.XNAControl.Update(GameTime gameTime)
   at Rampastring.XNAUI.XNAControls.XNAPanel.Update(GameTime gameTime)
   at Rampastring.XNAUI.XNAControls.XNAControl.Update(GameTime gameTime)
   at Rampastring.XNAUI.XNAControls.XNAPanel.Update(GameTime gameTime)
   at Rampastring.XNAUI.XNAControls.XNAControl.Update(GameTime gameTime)
   at Rampastring.XNAUI.XNAControls.XNAPanel.Update(GameTime gameTime)
   at ClientGUI.DarkeningPanel.Update(GameTime gameTime) in C:\Dev\xna-cncnet-client\ClientGUI\DarkeningPanel.cs:line 93
   at Rampastring.XNAUI.WindowManager.Update(GameTime gameTime)
   at Microsoft.Xna.Framework.Game.SortingFilteringCollection`1.ForEachFilteredItem[TUserData](Action`2 action, TUserData userData)
   at Microsoft.Xna.Framework.Game.DoUpdate(GameTime gameTime)
   at Microsoft.Xna.Framework.Game.Tick()
   at MonoGame.Framework.WinFormsGameWindow.TickOnIdle(Object sender, EventArgs e)
   at System.Windows.Forms.Application.ThreadContext.System.Windows.Forms.UnsafeNativeMethods.IMsoComponent.FDoIdle(Int32 grfidlef)
   at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
   at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
   at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
   at MonoGame.Framework.WinFormsGameWindow.RunLoop()
   at Microsoft.Xna.Framework.Game.Run(GameRunBehavior runBehavior)
   at DTAClient.Startup.Execute() in C:\Dev\xna-cncnet-client\DXMainClient\Startup.cs:line 157
   at DTAClient.PreStartup.Initialize(StartupParams parameters) in C:\Dev\xna-cncnet-client\DXMainClient\PreStartup.cs:line 213

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions