diff --git a/TIASshot/Utils/IoUtil.cs b/TIASshot/Utils/IoUtil.cs index 0d7c41e..301f963 100644 --- a/TIASshot/Utils/IoUtil.cs +++ b/TIASshot/Utils/IoUtil.cs @@ -73,7 +73,7 @@ var paths = new List() { Config.GetString("File/SaveFolder"), dt.ToString("yyyy-MM-dd"), - dt.ToString("HH_mm_ss") + $"-{note}", + dt.ToString("HH_mm_ss") + $"-{SanitizeFolderNameElement(note)}", }; var saveFolder = Path.Combine(paths.ToArray()); Directory.CreateDirectory(saveFolder); @@ -81,6 +81,23 @@ } /// + /// ユーザー入力をフォルダ名の一要素として安全に使えるよう無害化する. + /// パス区切り(\ /)・ドライブ区切り(:)を含む不正なファイル名文字を _ に置換し, + /// 保存先がベースフォルダの外へ出る(パストラバーサル)・例外で撮影が中断することを防ぐ. + /// + /// ユーザー入力の名前(null 可) + /// 不正文字を _ に置換した文字列 + internal static string SanitizeFolderNameElement(string name) { + if (string.IsNullOrEmpty(name)) return ""; + var invalidChars = Path.GetInvalidFileNameChars(); + var chars = name.ToCharArray(); + for (var i = 0; i < chars.Length; i++) { + if (Array.IndexOf(invalidChars, chars[i]) >= 0) chars[i] = '_'; + } + return new string(chars); + } + + /// /// 設定値をCSVファイルに書き込む /// ///