From ccdbbddb108929ea5e272383c712147c4153a1da Mon Sep 17 00:00:00 2001 From: yv01p Date: Sun, 7 Dec 2025 22:19:30 +0000 Subject: [PATCH] perf: cache regex in GetFileExtension MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- .../Extensions/StringExtensions.Sanitization.cs | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/Umbraco.Core/Extensions/StringExtensions.Sanitization.cs b/src/Umbraco.Core/Extensions/StringExtensions.Sanitization.cs index fe31796681..7760258c2c 100644 --- a/src/Umbraco.Core/Extensions/StringExtensions.Sanitization.cs +++ b/src/Umbraco.Core/Extensions/StringExtensions.Sanitization.cs @@ -22,6 +22,9 @@ public static partial class StringExtensions @"(? FileExtensionRegex = new(() => + new Regex(@"(?\.[^\.\?]+)(\?.*|$)", RegexOptions.Compiled)); + /// /// Cleans string to aid in preventing xss attacks. /// @@ -117,12 +120,8 @@ public static partial class StringExtensions /// Extension of the file public static string GetFileExtension(this string file) { - // Find any characters between the last . and the start of a query string or the end of the string - const string pattern = @"(?\.[^\.\?]+)(\?.*|$)"; - Match match = Regex.Match(file, pattern); - return match.Success - ? match.Groups["extension"].Value - : string.Empty; + Match match = FileExtensionRegex.Value.Match(file); + return match.Success ? match.Groups["extension"].Value : string.Empty; } ///