diff icon indicating copy to clipboard operation
diff copied to clipboard

`Enum.OutOfBoundsError` when comparing against empty string or list on Elixir 1.2.2 and diff 1.0.0

Open YellowApple opened this issue 9 years ago • 0 comments

Examples to reproduce the issue:

iex> Diff.diff [1,2,3,4,5], []
** (Enum.OutOfBoundsError) out of bounds error
    (elixir) lib/enum.ex:722: Enum.fetch!/2
             lib/diff.ex:94: anonymous fn/5 in Diff.longest_common_subsequence/4
    (elixir) lib/enum.ex:1478: anonymous fn/3 in Enum.reduce/3
    (elixir) lib/range.ex:84: Enumerable.Range.reduce/5
    (elixir) lib/enum.ex:1477: Enum.reduce/3
    (elixir) lib/enum.ex:1478: anonymous fn/3 in Enum.reduce/3
    (elixir) lib/range.ex:80: Enumerable.Range.reduce/5
    (elixir) lib/enum.ex:1477: Enum.reduce/3
iex> Diff.diff [], [1,2,3,4,5]
** (Enum.OutOfBoundsError) out of bounds error
    (elixir) lib/enum.ex:722: Enum.fetch!/2
             lib/diff.ex:94: anonymous fn/5 in Diff.longest_common_subsequence/4
    (elixir) lib/enum.ex:1478: anonymous fn/3 in Enum.reduce/3
    (elixir) lib/range.ex:80: Enumerable.Range.reduce/5
    (elixir) lib/enum.ex:1477: Enum.reduce/3
    (elixir) lib/enum.ex:1478: anonymous fn/3 in Enum.reduce/3
    (elixir) lib/range.ex:84: Enumerable.Range.reduce/5
    (elixir) lib/enum.ex:1477: Enum.reduce/3
iex> Diff.diff "", "asdf"
** (Enum.OutOfBoundsError) out of bounds error
    (elixir) lib/enum.ex:722: Enum.fetch!/2
             lib/diff.ex:94: anonymous fn/5 in Diff.longest_common_subsequence/4
    (elixir) lib/enum.ex:1478: anonymous fn/3 in Enum.reduce/3
    (elixir) lib/range.ex:80: Enumerable.Range.reduce/5
    (elixir) lib/enum.ex:1477: Enum.reduce/3
    (elixir) lib/enum.ex:1478: anonymous fn/3 in Enum.reduce/3
    (elixir) lib/range.ex:84: Enumerable.Range.reduce/5
    (elixir) lib/enum.ex:1477: Enum.reduce/3
iex> Diff.diff "asdf", ""
** (Enum.OutOfBoundsError) out of bounds error
    (elixir) lib/enum.ex:722: Enum.fetch!/2
             lib/diff.ex:94: anonymous fn/5 in Diff.longest_common_subsequence/4
    (elixir) lib/enum.ex:1478: anonymous fn/3 in Enum.reduce/3
    (elixir) lib/range.ex:84: Enumerable.Range.reduce/5
    (elixir) lib/enum.ex:1477: Enum.reduce/3
    (elixir) lib/enum.ex:1478: anonymous fn/3 in Enum.reduce/3
    (elixir) lib/range.ex:80: Enumerable.Range.reduce/5
    (elixir) lib/enum.ex:1477: Enum.reduce/3

For now I can work around it by capturing empty comparison lists before calling Diff.diff, but it's still inconvenient.

YellowApple avatar Aug 15 '16 21:08 YellowApple