Skip to content

Commit bdaffc3

Browse files
committed
Fix infinite loop when diffing functions, closes #12828
1 parent 5d79b34 commit bdaffc3

File tree

2 files changed

+13
-3
lines changed

2 files changed

+13
-3
lines changed

lib/ex_unit/lib/ex_unit/diff.ex

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,11 +200,15 @@ defmodule ExUnit.Diff do
200200

201201
{diff, env}
202202
else
203-
diff_value(left, right, env)
203+
non_recursive_diff_value(left, right, env)
204204
end
205205
end
206206

207207
defp diff_value(left, right, env) do
208+
non_recursive_diff_value(left, right, env)
209+
end
210+
211+
defp non_recursive_diff_value(left, right, env) do
208212
diff_left = escape(left) |> update_diff_meta(true)
209213
diff_right = escape(right) |> update_diff_meta(true)
210214
diff = %__MODULE__{equivalent?: false, left: diff_left, right: diff_right}

lib/ex_unit/test/ex_unit/diff_test.exs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1121,6 +1121,8 @@ defmodule ExUnit.DiffTest do
11211121
)
11221122
end
11231123

1124+
@compile {:no_warn_undefined, String}
1125+
11241126
test "functions" do
11251127
identity = & &1
11261128
inspect = inspect(identity)
@@ -1130,11 +1132,15 @@ defmodule ExUnit.DiffTest do
11301132

11311133
refute_diff(identity == :a, "-#{inspect}-", "+:a+")
11321134
refute_diff({identity, identity} == :a, "-{#{inspect}, #{inspect}}", "+:a+")
1133-
11341135
refute_diff({identity, :a} == {:a, identity}, "{-#{inspect}-, -:a-}", "{+:a+, +#{inspect}+}")
1135-
11361136
refute_diff(%{identity => identity} == :a, "-%{#{inspect} => #{inspect}}", "+:a+")
11371137

1138+
refute_diff(
1139+
(&String.to_charlist/1) == (&String.unknown/1),
1140+
"-&String.to_charlist/1-",
1141+
"+&String.unknown/1"
1142+
)
1143+
11381144
refute_diff(
11391145
%Opaque{data: identity} == :a,
11401146
"-#Opaque<???>-",

0 commit comments

Comments
 (0)