瀏覽代碼

Ensure DateTime.MinValue can be passed via interop (#1442)

Marko Lahma 2 年之前
父節點
當前提交
4eb7fc55b4
共有 2 個文件被更改,包括 16 次插入1 次删除
  1. 15 0
      Jint.Tests/Runtime/InteropTests.cs
  2. 1 1
      Jint/Native/Date/DateConstructor.cs

+ 15 - 0
Jint.Tests/Runtime/InteropTests.cs

@@ -3140,5 +3140,20 @@ try {
             Assert.Equal(null, _engine.Evaluate("Context.method({});").ToObject());
             Assert.Equal(5, _engine.Evaluate("Context.method({ value: 5 });").AsInteger());
         }
+
+        [Fact]
+        public void CanPassDateTimeMinViaInterop()
+        {
+            var engine = new Engine(cfg => cfg.AllowClrWrite());
+
+            var dt = DateTime.UtcNow;
+            engine.SetValue("capture", new Action<object>(o => dt = (DateTime) o));
+            engine.SetValue("minDate", DateTime.MinValue);
+
+            engine.Execute("capture(minDate);");
+            Assert.Equal(DateTime.MinValue, dt);
+
+            // DateTime.MaxValue cannot be handled due to internal presentation that would require tick precision
+        }
     }
 }

+ 1 - 1
Jint/Native/Date/DateConstructor.cs

@@ -262,7 +262,7 @@ internal sealed class DateConstructor : Constructor
 
     internal long FromDateTime(DateTime dt, bool negative = false)
     {
-        var convertToUtcAfter = dt.Kind == DateTimeKind.Unspecified;
+        var convertToUtcAfter = dt.Kind == DateTimeKind.Unspecified && dt != DateTime.MinValue;
 
         var dateAsUtc = dt.Kind == DateTimeKind.Local
             ? dt.ToUniversalTime()