From c5d4c570b8caac1916a99d256862276be2dca448 Mon Sep 17 00:00:00 2001 From: Nils Bandener Date: Sat, 25 Oct 2025 09:33:15 +0200 Subject: [PATCH] Fixed StringIndexOutOfBoundsException caused by empty index expression strings Signed-off-by: Nils Bandener --- .../metadata/IndexNameExpressionResolver.java | 1 + .../IndexNameExpressionResolverTests.java | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/server/src/main/java/org/opensearch/cluster/metadata/IndexNameExpressionResolver.java b/server/src/main/java/org/opensearch/cluster/metadata/IndexNameExpressionResolver.java index 3ea2cf97ef358..9fc2dc29dac5e 100644 --- a/server/src/main/java/org/opensearch/cluster/metadata/IndexNameExpressionResolver.java +++ b/server/src/main/java/org/opensearch/cluster/metadata/IndexNameExpressionResolver.java @@ -1111,6 +1111,7 @@ private Set innerResolve(Context context, List expressions, Indi String expression = expressions.get(i); if (Strings.isEmpty(expression)) { context.addResolutionError(indexNotFoundException(expression)); + continue; } validateAliasOrIndex(context, expression); if (aliasOrIndexExists(context, options, metadata, expression)) { diff --git a/server/src/test/java/org/opensearch/cluster/metadata/IndexNameExpressionResolverTests.java b/server/src/test/java/org/opensearch/cluster/metadata/IndexNameExpressionResolverTests.java index 153e3f389cf05..d489f4632cb73 100644 --- a/server/src/test/java/org/opensearch/cluster/metadata/IndexNameExpressionResolverTests.java +++ b/server/src/test/java/org/opensearch/cluster/metadata/IndexNameExpressionResolverTests.java @@ -2112,6 +2112,22 @@ public void testInvalidIndex() { assertEquals("Invalid index name [_foo], must not start with '_'.", iine.getMessage()); } + public void testInvalidEmptyIndex() { + Metadata.Builder mdBuilder = Metadata.builder().put(indexBuilder("test")); + ClusterState state = ClusterState.builder(new ClusterName("_name")).metadata(mdBuilder).build(); + IndexNameExpressionResolver.Context context = new IndexNameExpressionResolver.Context( + state, + IndicesOptions.lenientExpandOpen(), + false + ); + + IndexNotFoundException indexNotFoundException = expectThrows( + IndexNotFoundException.class, + () -> indexNameExpressionResolver.concreteIndexNames(context, "") + ); + assertEquals("no such index []", indexNotFoundException.getMessage()); + } + public void testIgnoreThrottled() { Metadata.Builder mdBuilder = Metadata.builder() .put(