From 507d4ba8252056ce7771250ee845f60f67fa70db Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Mon, 25 Mar 2019 13:53:54 +0100 Subject: [PATCH] StringUtils.parseLocale consistently handles invalid locale values Closes gh-22603 --- .../org/springframework/util/StringUtils.java | 4 +++- .../springframework/util/StringUtilsTests.java | 18 +++++++++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/spring-core/src/main/java/org/springframework/util/StringUtils.java b/spring-core/src/main/java/org/springframework/util/StringUtils.java index 95242154f7..4616508a2d 100644 --- a/spring-core/src/main/java/org/springframework/util/StringUtils.java +++ b/spring-core/src/main/java/org/springframework/util/StringUtils.java @@ -774,7 +774,9 @@ public abstract class StringUtils { if (tokens.length == 1) { validateLocalePart(localeValue); Locale resolved = Locale.forLanguageTag(localeValue); - return (resolved.getLanguage().length() > 0 ? resolved : null); + if (resolved.getLanguage().length() > 0) { + return resolved; + } } return parseLocaleTokens(localeValue, tokens); } diff --git a/spring-core/src/test/java/org/springframework/util/StringUtilsTests.java b/spring-core/src/test/java/org/springframework/util/StringUtilsTests.java index ab0e294d21..8b77c0b271 100644 --- a/spring-core/src/test/java/org/springframework/util/StringUtilsTests.java +++ b/spring-core/src/test/java/org/springframework/util/StringUtilsTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2018 the original author or authors. + * Copyright 2002-2019 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -765,4 +765,20 @@ public class StringUtilsTests { } } + @Test + public void testInvalidLocaleWithLocaleString() { + assertEquals(new Locale("invalid"), StringUtils.parseLocaleString("invalid")); + assertEquals(new Locale("invalidvalue"), StringUtils.parseLocaleString("invalidvalue")); + assertEquals(new Locale("invalidvalue", "foo"), StringUtils.parseLocaleString("invalidvalue_foo")); + assertNull(StringUtils.parseLocaleString("")); + } + + @Test + public void testInvalidLocaleWithLanguageTag() { + assertEquals(new Locale("invalid"), StringUtils.parseLocale("invalid")); + assertEquals(new Locale("invalidvalue"), StringUtils.parseLocale("invalidvalue")); + assertEquals(new Locale("invalidvalue", "foo"), StringUtils.parseLocale("invalidvalue_foo")); + assertNull(StringUtils.parseLocale("")); + } + }