Browse Source

#473. Fixed NRE on comparison CLR and JS objects. (#474)

Konstantin 7 years ago
parent
commit
e12d44374b
2 changed files with 26 additions and 9 deletions
  1. 14 0
      Jint.Tests/Runtime/EngineTests.cs
  2. 12 9
      Jint/Runtime/ExpressionIntepreter.cs

+ 14 - 0
Jint.Tests/Runtime/EngineTests.cs

@@ -1964,6 +1964,20 @@ namespace Jint.Tests.Runtime
 
             Assert.True(result);
         }
+        
+        [Fact]
+        public void ShouldNotCompareClrInstancesWithObjects()
+        {
+            var engine = new Engine();
+
+            var guid1 = Guid.NewGuid();
+
+            engine.SetValue("guid1", guid1);
+
+            var result = engine.Execute("guid1 == {}").GetCompletionValue().AsBoolean();
+
+            Assert.False(result);
+        }
 
         [Fact]
         public void ShouldStringifyNumWithoutV8DToA()

+ 12 - 9
Jint/Runtime/ExpressionIntepreter.cs

@@ -501,14 +501,17 @@ namespace Jint.Runtime
                 return ((JsBoolean) x)._value == ((JsBoolean) y)._value;
             }
 
-			if (typea == Types.Object)
-			{
-			    if (x.AsObject() is IObjectWrapper xw)
-				{
-					var yw = y.AsObject() as IObjectWrapper;
-					return Equals(xw.Target, yw.Target);
-				}
-			}
+            if (typea == Types.Object)
+            {
+                if (x.AsObject() is IObjectWrapper xw)
+                {
+                    var yw = y.AsObject() as IObjectWrapper;
+                    if (yw == null)
+                        return false;
+
+                    return Equals(xw.Target, yw.Target);
+                }
+            }
 
             if (typea == Types.None)
             {
@@ -1164,4 +1167,4 @@ namespace Jint.Runtime
             }
         }
     }
-}
+}