(3be596a23) Don't allow using invalid filename characters in a save name. Fixes crashing when attempting to use symbols such as <, > or | in the name.

This commit is contained in:
Joonas Rikkonen
2019-05-03 13:45:10 +03:00
parent a640439617
commit 904cad71a5
7 changed files with 143 additions and 247 deletions
@@ -237,6 +237,19 @@ namespace Barotrauma.Items.Components
return true;
}
public override void OnItemLoaded()
{
sonar = item.GetComponent<Sonar>();
}
public override bool Select(Character character)
{
if (!CanBeSelected) return false;
user = character;
return true;
}
public override void Update(float deltaTime, Camera cam)
{
networkUpdateTimer -= deltaTime;
@@ -146,12 +146,7 @@ namespace Barotrauma.Networking
}
string fileName = ServerName + "_" + DateTime.Now.ToString("yyyy-MM-dd_HH:mm") + ".txt";
var invalidChars = Path.GetInvalidFileNameChars();
foreach (char invalidChar in invalidChars)
{
fileName = fileName.Replace(invalidChar.ToString(), "");
}
fileName = ToolBox.RemoveInvalidFileNameChars(fileName);
string filePath = Path.Combine(SavePath, fileName);
@@ -192,8 +192,9 @@ namespace Barotrauma
public static string CreateSavePath(SaveType saveType, string fileName = "Save_Default")
{
string folder = saveType == SaveType.Singleplayer ? SaveFolder : MultiplayerSaveFolder;
fileName = ToolBox.RemoveInvalidFileNameChars(fileName);
string folder = saveType == SaveType.Singleplayer ? SaveFolder : MultiplayerSaveFolder;
if (fileName == "Save_Default")
{
fileName = TextManager.Get("SaveFile.DefaultName", true);
@@ -205,7 +206,7 @@ namespace Barotrauma
DebugConsole.ThrowError("Save folder \"" + folder + "\" not found. Created new folder");
Directory.CreateDirectory(folder);
}
string extension = ".save";
string pathWithoutExtension = Path.Combine(folder, fileName);
@@ -119,6 +119,16 @@ namespace Barotrauma
return true;
}
public static string RemoveInvalidFileNameChars(string fileName)
{
var invalidChars = Path.GetInvalidFileNameChars();
foreach (char invalidChar in invalidChars)
{
fileName = fileName.Replace(invalidChar.ToString(), "");
}
return fileName;
}
public static string LimitString(string str, int maxCharacters)
{
if (str == null || maxCharacters < 0) return null;