Skip to content

Commit 954401f

Browse files
spahnkeoliverbock
authored andcommitted
Use ReferenceEquals to prevent infinite recursion; add regression test for the equals operator
1 parent 7ad6943 commit 954401f

File tree

2 files changed

+14
-2
lines changed

2 files changed

+14
-2
lines changed

Source/Noesis.Javascript/JavascriptFunction.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,8 @@ System::Object^ JavascriptFunction::Call(... cli::array<System::Object^>^ args)
7575

7676
bool JavascriptFunction::operator==(JavascriptFunction^ func1, JavascriptFunction^ func2)
7777
{
78-
bool func1_null = func1 == nullptr,
79-
func2_null = func2 == nullptr;
78+
bool func1_null = ReferenceEquals(func1, nullptr),
79+
func2_null = ReferenceEquals(func2, nullptr);
8080
if (func1_null != func2_null)
8181
return false;
8282
if (func1_null && func2_null)

Tests/Noesis.Javascript.Tests/JavascriptFunctionTests.cs

+12
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,18 @@ public void GetFunctionExpressionFromJsContext()
3333
funcObj.Call(1, 2).Should().BeOfType<int>().Which.Should().Be(3);
3434
}
3535

36+
[TestMethod]
37+
public void EqualsOperatorWorksWithFunctionObjects()
38+
{
39+
_context.Run("a = function(a, b) { return a + b; }");
40+
41+
JavascriptFunction funcObj = _context.GetParameter("a") as JavascriptFunction;
42+
(funcObj == null).Should().BeFalse();
43+
(funcObj != null).Should().BeTrue();
44+
(null == funcObj).Should().BeFalse();
45+
(null != funcObj).Should().BeTrue();
46+
}
47+
3648
[TestMethod]
3749
public void GetNamedFunctionFromJsContext()
3850
{

0 commit comments

Comments
 (0)