From 7b5e5994065a6e77cdf1743a51b3eeac2dadb5e0 Mon Sep 17 00:00:00 2001 From: Blank Date: Wed, 29 Jul 2026 21:29:05 +0800 Subject: [PATCH] =?UTF-8?q?fix(extensions):=20=E4=B8=BA=20CnReg=20?= =?UTF-8?q?=E8=A1=A5=E4=BC=A0=20Regex=20matchTimeout=20=E6=B6=88=E9=99=A4?= =?UTF-8?q?=20Sonar=20S6444?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Linear: GFX-198 --- .../StringExtensions.cs | 2 +- .../Extensions/StringExtensionsTests.cs | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/GameFrameX.Foundation.Extensions/StringExtensions.cs b/GameFrameX.Foundation.Extensions/StringExtensions.cs index ec4fefa..7f92bed 100644 --- a/GameFrameX.Foundation.Extensions/StringExtensions.cs +++ b/GameFrameX.Foundation.Extensions/StringExtensions.cs @@ -146,7 +146,7 @@ public static string FromUrlSafeBase64(this string value, bool addPadding) /// Regex for matching Chinese characters. /// Matching range includes basic Chinese characters (0x4e00-0x9fa5), excluding rare characters, variant characters, and other extended Chinese characters. /// - private static readonly Regex CnReg = new(@"[\u4e00-\u9fa5]"); + private static readonly Regex CnReg = new(@"[\u4e00-\u9fa5]", RegexOptions.None, TimeSpan.FromSeconds(1)); /// /// 计算字符串的显示宽度,汉字等宽字符算作 2 个单位宽度,其他字符算作 1 个单位宽度。 diff --git a/GameFrameX.Foundation.Tests/Extensions/StringExtensionsTests.cs b/GameFrameX.Foundation.Tests/Extensions/StringExtensionsTests.cs index 10a5ffc..9e920e6 100644 --- a/GameFrameX.Foundation.Tests/Extensions/StringExtensionsTests.cs +++ b/GameFrameX.Foundation.Tests/Extensions/StringExtensionsTests.cs @@ -745,6 +745,21 @@ public void TrimZhCn_StringWithoutChineseChars_ShouldReturnOriginalString() Assert.Equal("Hello World", result); } + [Fact] + public void TrimZhCn_CnReg_ShouldHaveOneSecondMatchTimeout() + { + // Arrange — 反射读取 CnReg 私有静态字段,验证 Sonar S6444 fix 实际生效。 + var field = typeof(StringExtensions).GetField("CnReg", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static); + Assert.NotNull(field); + + // Act + var regex = (Regex)field.GetValue(null); + + // Assert + Assert.NotNull(regex); + Assert.Equal(TimeSpan.FromSeconds(1), regex.MatchTimeout); + } + #endregion #region EqualsFast Tests