Fix potential IllegalStateException in Limit.

Fixes GH-3023.
This commit is contained in:
Oliver Drotbohm
2024-01-12 20:59:26 +01:00
parent 5dd7b322b6
commit 12efa9ae78
2 changed files with 20 additions and 6 deletions

View File

@@ -17,7 +17,7 @@ package org.springframework.data.domain;
import org.springframework.data.domain.Limit.Limited;
import org.springframework.data.domain.Limit.Unlimited;
import org.springframework.util.ClassUtils;
import org.springframework.lang.Nullable;
/**
* {@link Limit} represents the maximum value up to which an operation should continue processing. It may be used for
@@ -94,14 +94,17 @@ public sealed interface Limit permits Limited,Unlimited {
if (obj == null) {
return false;
}
if (!ClassUtils.isAssignable(Limit.class, obj.getClass())) {
if (!(obj instanceof Limit that)) {
return false;
}
Limit that = (Limit) obj;
if (this.isUnlimited() && that.isUnlimited()) {
return true;
if (this.isUnlimited() ^ that.isUnlimited()) {
return false;
}
return max() == that.max();
return this.isUnlimited() && that.isUnlimited()
|| max() == that.max();
}
@Override

View File

@@ -55,4 +55,15 @@ class LimitUnitTests {
void unlimitedErrorsOnMax() {
assertThatExceptionOfType(IllegalStateException.class).isThrownBy(() -> Limit.unlimited().max());
}
@Test // GH-3023
void equalsProperly() {
Limit unlimited = Limit.unlimited();
Limit limited = Limit.of(5);
assertThat(limited.equals(unlimited)).isFalse();
assertThat(unlimited.equals(limited)).isFalse();
assertThat(unlimited.equals(unlimited)).isTrue();
}
}