Browse Source

fix: table.unpack with arg value int32 overflow

Akeit0 7 months ago
parent
commit
fbdf8f750a
1 changed files with 5 additions and 5 deletions
  1. 5 5
      src/Lua/Standard/TableLibrary.cs

+ 5 - 5
src/Lua/Standard/TableLibrary.cs

@@ -1,7 +1,6 @@
 using Lua.CodeAnalysis;
 using System.Runtime.CompilerServices;
 using System.Text;
-using Lua.Internal;
 using Lua.Runtime;
 
 namespace Lua.Standard;
@@ -214,16 +213,17 @@ public sealed class TableLibrary
     {
         var arg0 = context.GetArgument<LuaTable>(0);
         var arg1 = context.HasArgument(1)
-            ? (int)context.GetArgument<double>(1)
+            ? (long)context.GetArgument<double>(1)
             : 1;
         var arg2 = context.HasArgument(2)
-            ? (int)context.GetArgument<double>(2)
+            ? (long)context.GetArgument<double>(2)
             : arg0.ArrayLength;
 
         var index = 0;
-        var count = arg2 - arg1 + 1;
+        arg1 = Math.Min(arg1, arg2+1);
+        var count = (int)(arg2 - arg1 + 1);
         var buffer = context.GetReturnBuffer(count);
-        for (int i = arg1; i <= arg2; i++)
+        for (long i = arg1; i <= arg2; i++)
         {
             buffer[index] = arg0[i];
             index++;