Skip to content

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

@YellowApple

Description

@YellowApple

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions