Skip to content

Commit bdc766b

Browse files
committed
Never return null from Strings.tokenizeToStringArray (#28224)
This method has a different contract than all the other methods in this class, returning null instead of an empty array when receiving a null input. While switching over some methods from delimitedListToStringArray to this method tokenizeToStringArray, this resulted in unexpected nulls in some places of our code. Relates #28213
1 parent 62ab666 commit bdc766b

File tree

2 files changed

+12
-1
lines changed

2 files changed

+12
-1
lines changed

server/src/main/java/org/elasticsearch/common/Strings.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -474,6 +474,9 @@ public static String[] split(String toSplit, String delimiter) {
474474
* @see #delimitedListToStringArray
475475
*/
476476
public static String[] tokenizeToStringArray(final String s, final String delimiters) {
477+
if (s == null) {
478+
return EMPTY_ARRAY;
479+
}
477480
return toStringArray(tokenizeToCollection(s, delimiters, ArrayList::new));
478481
}
479482

@@ -536,7 +539,7 @@ public static String[] delimitedListToStringArray(String str, String delimiter)
536539
*/
537540
public static String[] delimitedListToStringArray(String str, String delimiter, String charsToDelete) {
538541
if (str == null) {
539-
return new String[0];
542+
return EMPTY_ARRAY;
540543
}
541544
if (delimiter == null) {
542545
return new String[]{str};

server/src/test/java/org/elasticsearch/cluster/routing/allocation/decider/FilterAllocationDeciderTests.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,14 @@ public void testInvalidIPFilter() {
194194
assertEquals("invalid IP address [" + invalidIP + "] for [" + filterSetting.getKey() + ipKey + "]", e.getMessage());
195195
}
196196

197+
public void testNull() {
198+
Setting<String> filterSetting = randomFrom(IndexMetaData.INDEX_ROUTING_REQUIRE_GROUP_SETTING,
199+
IndexMetaData.INDEX_ROUTING_INCLUDE_GROUP_SETTING, IndexMetaData.INDEX_ROUTING_EXCLUDE_GROUP_SETTING);
200+
201+
IndexMetaData.builder("test")
202+
.settings(settings(Version.CURRENT).putNull(filterSetting.getKey() + "name")).numberOfShards(2).numberOfReplicas(0).build();
203+
}
204+
197205
public void testWildcardIPFilter() {
198206
String ipKey = randomFrom("_ip", "_host_ip", "_publish_ip");
199207
Setting<String> filterSetting = randomFrom(IndexMetaData.INDEX_ROUTING_REQUIRE_GROUP_SETTING,

0 commit comments

Comments
 (0)