From 916cb645818caf6cbf054a43cd79f11a8c336c3f Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Wed, 29 Apr 2026 21:52:04 +0200 Subject: [PATCH 1/2] Detect custom deserialized NullValue instances Closes gh-36727 --- .../cache/support/AbstractValueAdaptingCache.java | 2 +- .../context/testfixture/cache/AbstractCacheTests.java | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/spring-context/src/main/java/org/springframework/cache/support/AbstractValueAdaptingCache.java b/spring-context/src/main/java/org/springframework/cache/support/AbstractValueAdaptingCache.java index 23b4d7b777c..bcd2bb529cd 100644 --- a/spring-context/src/main/java/org/springframework/cache/support/AbstractValueAdaptingCache.java +++ b/spring-context/src/main/java/org/springframework/cache/support/AbstractValueAdaptingCache.java @@ -84,7 +84,7 @@ public abstract class AbstractValueAdaptingCache implements Cache { * @return the value to return to the user */ protected @Nullable Object fromStoreValue(@Nullable Object storeValue) { - if (this.allowNullValues && storeValue == NullValue.INSTANCE) { + if (this.allowNullValues && storeValue instanceof NullValue) { return null; } return storeValue; diff --git a/spring-context/src/testFixtures/java/org/springframework/context/testfixture/cache/AbstractCacheTests.java b/spring-context/src/testFixtures/java/org/springframework/context/testfixture/cache/AbstractCacheTests.java index b869d3bec5b..29a9443cfd7 100644 --- a/spring-context/src/testFixtures/java/org/springframework/context/testfixture/cache/AbstractCacheTests.java +++ b/spring-context/src/testFixtures/java/org/springframework/context/testfixture/cache/AbstractCacheTests.java @@ -24,7 +24,9 @@ import java.util.concurrent.atomic.AtomicInteger; import org.junit.jupiter.api.Test; +import org.springframework.beans.BeanUtils; import org.springframework.cache.Cache; +import org.springframework.cache.support.NullValue; import static org.assertj.core.api.Assertions.assertThat; @@ -72,6 +74,12 @@ public abstract class AbstractCacheTests { assertThat(cache.get(key).get()).isNull(); assertThat(cache.get(key, String.class)).isNull(); assertThat(cache.get(key, Object.class)).isNull(); + + cache.put(key, BeanUtils.instantiateClass(NullValue.class)); + assertThat(cache.get(key)).isNotNull(); + assertThat(cache.get(key).get()).isNull(); + assertThat(cache.get(key, String.class)).isNull(); + assertThat(cache.get(key, Object.class)).isNull(); } @Test From cd5fee53479a91cdfcb9bbd2ab7895161f70f70f Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Wed, 29 Apr 2026 21:52:10 +0200 Subject: [PATCH 2/2] Polishing --- .../testfixture/cache/AbstractValueAdaptingCacheTests.java | 7 +++---- .../main/java/org/springframework/util/AntPathMatcher.java | 1 - 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/spring-context/src/testFixtures/java/org/springframework/context/testfixture/cache/AbstractValueAdaptingCacheTests.java b/spring-context/src/testFixtures/java/org/springframework/context/testfixture/cache/AbstractValueAdaptingCacheTests.java index 0598560847d..b0484052085 100644 --- a/spring-context/src/testFixtures/java/org/springframework/context/testfixture/cache/AbstractValueAdaptingCacheTests.java +++ b/spring-context/src/testFixtures/java/org/springframework/context/testfixture/cache/AbstractValueAdaptingCacheTests.java @@ -36,10 +36,9 @@ public abstract class AbstractValueAdaptingCacheTests - cache.put(key, null)) - .withMessageContaining(CACHE_NAME_NO_NULL) - .withMessageContaining("is configured to not allow null values but null was provided"); + assertThatIllegalArgumentException().isThrownBy(() -> cache.put(key, null)) + .withMessageContaining(CACHE_NAME_NO_NULL) + .withMessageContaining("is configured to not allow null values but null was provided"); } } diff --git a/spring-core/src/main/java/org/springframework/util/AntPathMatcher.java b/spring-core/src/main/java/org/springframework/util/AntPathMatcher.java index cd62997a4a1..684046caf12 100644 --- a/spring-core/src/main/java/org/springframework/util/AntPathMatcher.java +++ b/spring-core/src/main/java/org/springframework/util/AntPathMatcher.java @@ -854,7 +854,6 @@ public class AntPathMatcher implements PathMatcher { */ private static class PatternInfo { - private final @Nullable String pattern; private int uriVars;