diff --git a/docs/changelog/130776.yaml b/docs/changelog/130776.yaml new file mode 100644 index 0000000000000..9d35a343e91d0 --- /dev/null +++ b/docs/changelog/130776.yaml @@ -0,0 +1,6 @@ +pr: 130776 +summary: Fix msearch request parsing when index expression is null +area: Search +type: bug +issues: + - 129631 diff --git a/server/src/main/java/org/elasticsearch/common/xcontent/support/XContentMapValues.java b/server/src/main/java/org/elasticsearch/common/xcontent/support/XContentMapValues.java index a1ba3759c7854..74bf3b9b5ff62 100644 --- a/server/src/main/java/org/elasticsearch/common/xcontent/support/XContentMapValues.java +++ b/server/src/main/java/org/elasticsearch/common/xcontent/support/XContentMapValues.java @@ -560,6 +560,9 @@ public static Map nodeMapValue(Object node, String desc) { * Otherwise the node is treated as a comma-separated string. */ public static String[] nodeStringArrayValue(Object node) { + if (node == null) { + throw new ElasticsearchParseException("Expected a list of strings but got null"); + } if (isArray(node)) { List list = (List) node; String[] arr = new String[list.size()]; diff --git a/server/src/test/java/org/elasticsearch/action/search/MultiSearchRequestTests.java b/server/src/test/java/org/elasticsearch/action/search/MultiSearchRequestTests.java index 008230c5e3fe3..3ed63ff5e90d1 100644 --- a/server/src/test/java/org/elasticsearch/action/search/MultiSearchRequestTests.java +++ b/server/src/test/java/org/elasticsearch/action/search/MultiSearchRequestTests.java @@ -9,6 +9,7 @@ package org.elasticsearch.action.search; +import org.elasticsearch.ElasticsearchParseException; import org.elasticsearch.action.support.IndicesOptions; import org.elasticsearch.common.CheckedBiConsumer; import org.elasticsearch.common.Strings; @@ -537,6 +538,14 @@ public void testFailOnExtraCharacters() throws IOException { } } + public void testNullIndex() throws IOException { + ElasticsearchParseException e = expectThrows(ElasticsearchParseException.class, () -> parseMultiSearchRequestFromString(""" + {"index": null} + { "query": {"match_all": {}}} + """)); + assertThat(e.getMessage(), containsString("Expected a list of strings but got null")); + } + private static MultiSearchRequest mutate(MultiSearchRequest searchRequest) throws IOException { MultiSearchRequest mutation = copyRequest(searchRequest); List> mutators = new ArrayList<>();