From 92c6a77cf8367e349b70526f3ea3575ce832c06d Mon Sep 17 00:00:00 2001 From: Nadya <4567166+NadyaNayme@users.noreply.github.com> Date: Sat, 16 Jul 2022 19:20:40 -0700 Subject: [PATCH 1/4] Regex adjustment for valid paths This makes further adjustments to the Regex to allow for valid Windows and Linux paths. - Valid Windows paths can necessarily contain spaces and hyphens as the game's installation path contains both. (eg. `\SquareEnix\FINAL FANTASY XIV - A Realm Reborn`) so a check for `\w` is insufficient - Valid Linux paths can also be double-slashed (eg. `/path//to//file`) In addition some pointless optimizations were made by making the groups non-capturing, lazy matching, and including an ending anchor. Because a valid path must necessarily include at least one valid character `*` was changed to `+`. --- MareSynchronos/UI/UIShared.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MareSynchronos/UI/UIShared.cs b/MareSynchronos/UI/UIShared.cs index a825c12..8a5c1ab 100644 --- a/MareSynchronos/UI/UIShared.cs +++ b/MareSynchronos/UI/UIShared.cs @@ -410,7 +410,7 @@ namespace MareSynchronos.UI _isPenumbraDirectory = path.ToLower() == _ipcManager.PenumbraModDirectory()?.ToLower(); _isDirectoryWritable = IsDirectoryWritable(path); _cacheDirectoryHasOtherFilesThanCache = Directory.GetFiles(path, "*", SearchOption.AllDirectories).Any(f => new FileInfo(f).Name.Length != 40); - _cacheDirectoryHasIllegalCharacter = Regex.IsMatch(path, @"^(\w:\\(\w|\\| |-|_)*|\/(\w|\/| |-|_)*)"); + _cacheDirectoryHasIllegalCharacter = Regex.IsMatch(path, @"^(?:[a-zA-Z]:\\(?:[\w\s\-]|[\\])+?|[\/]{1}(?:[\w\s\-]|[\/])+?)$"); if (!string.IsNullOrEmpty(path) && Directory.Exists(path) From f7ec570040da5e710928753542412726ae4a2a03 Mon Sep 17 00:00:00 2001 From: Nadya <4567166+NadyaNayme@users.noreply.github.com> Date: Sat, 16 Jul 2022 21:29:27 -0700 Subject: [PATCH 2/4] Cleaner regex This doesn't change any valid matches but does remove some unnecessary cruft. Thanks to MegaScience for the second pair of eyes. --- MareSynchronos/UI/UIShared.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MareSynchronos/UI/UIShared.cs b/MareSynchronos/UI/UIShared.cs index 8a5c1ab..81165c0 100644 --- a/MareSynchronos/UI/UIShared.cs +++ b/MareSynchronos/UI/UIShared.cs @@ -410,7 +410,7 @@ namespace MareSynchronos.UI _isPenumbraDirectory = path.ToLower() == _ipcManager.PenumbraModDirectory()?.ToLower(); _isDirectoryWritable = IsDirectoryWritable(path); _cacheDirectoryHasOtherFilesThanCache = Directory.GetFiles(path, "*", SearchOption.AllDirectories).Any(f => new FileInfo(f).Name.Length != 40); - _cacheDirectoryHasIllegalCharacter = Regex.IsMatch(path, @"^(?:[a-zA-Z]:\\(?:[\w\s\-]|[\\])+?|[\/]{1}(?:[\w\s\-]|[\/])+?)$"); + _cacheDirectoryHasIllegalCharacter = Regex.IsMatch(path, @"^(?:[a-zA-Z]:\\(?:[\w\s\-\\])+?|\/(?:[\w\s\-]|[\/])+?)$"); if (!string.IsNullOrEmpty(path) && Directory.Exists(path) From d23541a0ac6216b4e725621e7692c68fd86f7e1e Mon Sep 17 00:00:00 2001 From: Nadya <4567166+NadyaNayme@users.noreply.github.com> Date: Sat, 16 Jul 2022 21:30:39 -0700 Subject: [PATCH 3/4] ... squashing --- MareSynchronos/UI/UIShared.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MareSynchronos/UI/UIShared.cs b/MareSynchronos/UI/UIShared.cs index 81165c0..7ab7cf3 100644 --- a/MareSynchronos/UI/UIShared.cs +++ b/MareSynchronos/UI/UIShared.cs @@ -410,7 +410,7 @@ namespace MareSynchronos.UI _isPenumbraDirectory = path.ToLower() == _ipcManager.PenumbraModDirectory()?.ToLower(); _isDirectoryWritable = IsDirectoryWritable(path); _cacheDirectoryHasOtherFilesThanCache = Directory.GetFiles(path, "*", SearchOption.AllDirectories).Any(f => new FileInfo(f).Name.Length != 40); - _cacheDirectoryHasIllegalCharacter = Regex.IsMatch(path, @"^(?:[a-zA-Z]:\\(?:[\w\s\-\\])+?|\/(?:[\w\s\-]|[\/])+?)$"); + _cacheDirectoryHasIllegalCharacter = Regex.IsMatch(path, @"^(?:[a-zA-Z]:\\[\w\s\-\\]+?|\/(?:[\w\s\-]|[\/])+?)$"); if (!string.IsNullOrEmpty(path) && Directory.Exists(path) From c8f915459c9e36425a3f4c621f6bdfa11134eeb1 Mon Sep 17 00:00:00 2001 From: Nadya <4567166+NadyaNayme@users.noreply.github.com> Date: Sat, 16 Jul 2022 21:37:22 -0700 Subject: [PATCH 4/4] ... gunna squash --- MareSynchronos/UI/UIShared.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MareSynchronos/UI/UIShared.cs b/MareSynchronos/UI/UIShared.cs index 7ab7cf3..ce7b6ca 100644 --- a/MareSynchronos/UI/UIShared.cs +++ b/MareSynchronos/UI/UIShared.cs @@ -410,7 +410,7 @@ namespace MareSynchronos.UI _isPenumbraDirectory = path.ToLower() == _ipcManager.PenumbraModDirectory()?.ToLower(); _isDirectoryWritable = IsDirectoryWritable(path); _cacheDirectoryHasOtherFilesThanCache = Directory.GetFiles(path, "*", SearchOption.AllDirectories).Any(f => new FileInfo(f).Name.Length != 40); - _cacheDirectoryHasIllegalCharacter = Regex.IsMatch(path, @"^(?:[a-zA-Z]:\\[\w\s\-\\]+?|\/(?:[\w\s\-]|[\/])+?)$"); + _cacheDirectoryHasIllegalCharacter = Regex.IsMatch(path, @"^(?:[a-zA-Z]:\\[\w\s\-\\]+?|\/(?:[\w\s\-\/])+?)$"); if (!string.IsNullOrEmpty(path) && Directory.Exists(path)