Skip to content

NullPointerException when Levenshtein distance and NewObjectsSnapshot are used together #820

@bkuzio

Description

@bkuzio

Hello,

When configuring Javers to use new objects snapshot and Levenshtein distance list comparison, then comparing to null object, I'm getting NullPointerException. It doesn't happen when either a different list comparison method is used or new object snapshot is not used.

Test case to reproduce (version 5.3.4):

class BugTest {

    @Test
    void shouldNotFail() {
        Javers javers = JaversBuilder.javers().withNewObjectsSnapshot(true)
                                     .withListCompareAlgorithm(ListCompareAlgorithm.LEVENSHTEIN_DISTANCE).build();

        javers.compare(null, new Obj(Collections.singletonList("test")));
    }
    static class Obj {
        private List<String> strings;

        public Obj(List<String> strings) {
            this.strings = strings;
        }
    }
}

The issue seems to be similar to #240, but not exactly the same.

Same error happens when comparing a list to an empty list:
javers.compareCollections(Collections.emptyList(), Collections.singletonList(obj));

Stack trace:

java.lang.NullPointerException
at org.javers.core.diff.appenders.levenshtein.Backtrack.evaluateSteps(Backtrack.java:21)
at org.javers.core.diff.appenders.levenshtein.LevenshteinListChangeAppender.calculateChanges(LevenshteinListChangeAppender.java:44)
at org.javers.core.diff.appenders.levenshtein.LevenshteinListChangeAppender.calculateChanges(LevenshteinListChangeAppender.java:17)
at org.javers.core.diff.appenders.CorePropertyChangeAppender.calculateChanges(CorePropertyChangeAppender.java:45)
at org.javers.core.diff.DiffFactory.appendChanges(DiffFactory.java:153)
at org.javers.core.diff.DiffFactory.appendPropertyChanges(DiffFactory.java:143)
at org.javers.core.diff.DiffFactory.createAndAppendChanges(DiffFactory.java:119)
at org.javers.core.diff.DiffFactory.create(DiffFactory.java:69)
at org.javers.core.diff.DiffFactory.compare(DiffFactory.java:54)
at org.javers.core.JaversCore.compare(JaversCore.java:171)

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions