keycloak-memoizeit

Merge pull request #2979 from cainj13/localeNpeFix make

7/1/2016 7:33:36 AM

Details

diff --git a/services/src/main/java/org/keycloak/services/util/LocaleHelper.java b/services/src/main/java/org/keycloak/services/util/LocaleHelper.java
index d8a7c80..b60ecf5 100755
--- a/services/src/main/java/org/keycloak/services/util/LocaleHelper.java
+++ b/services/src/main/java/org/keycloak/services/util/LocaleHelper.java
@@ -135,21 +135,23 @@ public class LocaleHelper {
 
     private static Locale findLocale(Set<String> supportedLocales, String... localeStrings) {
         for (String localeString : localeStrings) {
-            Locale result = null;
-            Locale search = Locale.forLanguageTag(localeString);
-            for (String languageTag : supportedLocales) {
-                Locale locale = Locale.forLanguageTag(languageTag);
-                if (locale.getLanguage().equals(search.getLanguage())) {
-                    if (locale.getCountry().equals("") && result == null) {
-                        result = locale;
-                    }
-                    if (locale.getCountry().equals(search.getCountry())) {
-                        return locale;
+            if (localeString != null) {
+                Locale result = null;
+                Locale search = Locale.forLanguageTag(localeString);
+                for (String languageTag : supportedLocales) {
+                    Locale locale = Locale.forLanguageTag(languageTag);
+                    if (locale.getLanguage().equals(search.getLanguage())) {
+                        if (locale.getCountry().equals("") && result == null) {
+                            result = locale;
+                        }
+                        if (locale.getCountry().equals(search.getCountry())) {
+                            return locale;
+                        }
                     }
                 }
-            }
-            if (result != null) {
-                return result;
+                if (result != null) {
+                    return result;
+                }
             }
         }
         return null;
diff --git a/services/src/test/java/org/keycloak/services/util/LocaleHelperTest.java b/services/src/test/java/org/keycloak/services/util/LocaleHelperTest.java
new file mode 100644
index 0000000..5735886
--- /dev/null
+++ b/services/src/test/java/org/keycloak/services/util/LocaleHelperTest.java
@@ -0,0 +1,23 @@
+package org.keycloak.services.util;
+
+import org.junit.Test;
+
+import java.lang.reflect.Method;
+import java.util.Locale;
+import java.util.Set;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.IsNull.nullValue;
+
+public class LocaleHelperTest {
+
+    @Test
+    public void shouldNotExceptionOnNullLocaleAttributeItem() throws Exception {
+        final Method method = LocaleHelper.class.getDeclaredMethod("findLocale", Set.class, String[].class);
+        method.setAccessible(true);
+        Locale foundLocale = (Locale) method.invoke(null, Stream.of("en", "es", "fr").collect(Collectors.toSet()), new String[]{null});
+        assertThat(foundLocale, nullValue());
+    }
+}