From 1fe0e593ec5176ba26a9021fbecb8c98711ceb65 Mon Sep 17 00:00:00 2001 From: Akeit0 <90429982+Akeit0@users.noreply.github.com> Date: Thu, 17 Apr 2025 00:23:00 +0900 Subject: [PATCH 1/2] Fix: invariant culture in not used in string.format --- src/Lua/Standard/StringLibrary.cs | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/Lua/Standard/StringLibrary.cs b/src/Lua/Standard/StringLibrary.cs index 996adf82..e92702c7 100644 --- a/src/Lua/Standard/StringLibrary.cs +++ b/src/Lua/Standard/StringLibrary.cs @@ -2,6 +2,7 @@ using System.Text.RegularExpressions; using Lua.Internal; using Lua.Runtime; +using System.Globalization; namespace Lua.Standard; @@ -259,23 +260,23 @@ public async ValueTask Format(LuaFunctionExecutionContext context, Memory Format(LuaFunctionExecutionContext context, Memory().ToString(); + formattedValue = parameter.Read().ToString(CultureInfo.InvariantCulture); break; default: using (var strBuffer = new PooledArray(1)) From 365f352d03befab2ba55740eee2dd8574fc2212d Mon Sep 17 00:00:00 2001 From: Akeit0 <90429982+Akeit0@users.noreply.github.com> Date: Thu, 17 Apr 2025 00:36:13 +0900 Subject: [PATCH 2/2] Add: test of string.format with noninvariant culture --- tests/Lua.Tests/StringTests.cs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/tests/Lua.Tests/StringTests.cs b/tests/Lua.Tests/StringTests.cs index 921205d0..93bea036 100644 --- a/tests/Lua.Tests/StringTests.cs +++ b/tests/Lua.Tests/StringTests.cs @@ -1,5 +1,7 @@ using Lua.CodeAnalysis.Syntax; using Lua.CodeAnalysis.Syntax.Nodes; +using Lua.Standard; +using System.Globalization; namespace Lua.Tests; @@ -14,4 +16,16 @@ public async Task Test_ShortString_RealNewLine(string newLine) Assert.That(result, Has.Length.EqualTo(1)); Assert.That(result[0], Is.EqualTo(new LuaValue("\n"))); } + + [TestCase("fr-FR")] + public async Task Test_StringFormat_Culture(string newLine) + { + var state = LuaState.Create(); + state.OpenBasicLibrary(); + state.OpenStringLibrary(); + var culture = CultureInfo.CurrentCulture; + CultureInfo.CurrentCulture = CultureInfo.GetCultureInfo(newLine); + await state.DoStringAsync($"""assert(tonumber(string.format("%f", 10.3)) == 10.3)"""); + CultureInfo.CurrentCulture = culture; + } } \ No newline at end of file