From 1b7d710a339a7195fae44eadcf4737aa19c160db Mon Sep 17 00:00:00 2001 From: John Blum Date: Wed, 1 Apr 2020 18:08:24 -0700 Subject: [PATCH] DATAGEODE-244 - Guard against invalid Region names. --- .../AbstractCachingRegionResolver.java | 5 +++- ...bstractCachingRegionResolverUnitTests.java | 27 +++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/spring-data-geode/src/main/java/org/springframework/data/gemfire/support/AbstractCachingRegionResolver.java b/spring-data-geode/src/main/java/org/springframework/data/gemfire/support/AbstractCachingRegionResolver.java index f4638abd..af72ae09 100644 --- a/spring-data-geode/src/main/java/org/springframework/data/gemfire/support/AbstractCachingRegionResolver.java +++ b/spring-data-geode/src/main/java/org/springframework/data/gemfire/support/AbstractCachingRegionResolver.java @@ -63,7 +63,10 @@ public abstract class AbstractCachingRegionResolver extends CacheListenerAdapter */ @Nullable @Override @SuppressWarnings("unchecked") public synchronized Region resolve(@Nullable String regionName) { - return this.nameToRegionCache.computeIfAbsent(regionName, this::doResolveAndRegisterResolverAsCacheListener); + + return StringUtils.hasText(regionName) + ? this.nameToRegionCache.computeIfAbsent(regionName, this::doResolveAndRegisterResolverAsCacheListener) + : null; } /** diff --git a/spring-data-geode/src/test/java/org/springframework/data/gemfire/support/AbstractCachingRegionResolverUnitTests.java b/spring-data-geode/src/test/java/org/springframework/data/gemfire/support/AbstractCachingRegionResolverUnitTests.java index e9c6ccd1..e72c2272 100644 --- a/spring-data-geode/src/test/java/org/springframework/data/gemfire/support/AbstractCachingRegionResolverUnitTests.java +++ b/spring-data-geode/src/test/java/org/springframework/data/gemfire/support/AbstractCachingRegionResolverUnitTests.java @@ -85,6 +85,33 @@ public class AbstractCachingRegionResolverUnitTests { verifyNoMoreInteractions(mockRegion); } + public void testResolveWithInvalidRegionName(String regionName) { + + AbstractCachingRegionResolver regionResolver = spy(AbstractCachingRegionResolver.class); + + when(regionResolver.resolve(any())).thenCallRealMethod(); + + assertThat(regionResolver.resolve(regionName)).isNull(); + + verify(regionResolver, never()).doResolveAndRegisterResolverAsCacheListener(anyString()); + verify(regionResolver, never()).doResolve(anyString()); + } + + @Test + public void resolveWithBlankRegionNameReturnsNull() { + testResolveWithInvalidRegionName(" "); + } + + @Test + public void resolveWithEmptyRegionNameReturnsNull() { + testResolveWithInvalidRegionName(""); + } + + @Test + public void resolveWithNullRegionNameReturnsNull() { + testResolveWithInvalidRegionName(null); + } + @Test public void afterRegionDestroyClearsCacheEntryForCachedRegionWithName() {