From eae481a218ee24ad343d59c4e271ad566f1c882d Mon Sep 17 00:00:00 2001 From: Stanislav Malyshev Date: Wed, 9 Jul 2025 18:28:30 -0600 Subject: [PATCH 1/2] Fix msearch request parsing when index expression is null (#130776) * Fix parsing when index expression is null --- docs/changelog/130776.yaml | 6 ++++++ .../common/xcontent/support/XContentMapValues.java | 3 +++ .../action/search/MultiSearchRequestTests.java | 9 +++++++++ 3 files changed, 18 insertions(+) create mode 100644 docs/changelog/130776.yaml 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 19cb6b384d96c..1f0c63d1623e7 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 8211fc8dfa4c6..1ffe381212a74 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; @@ -594,6 +595,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<>(); From bbaf6b771b01d81f6dac7bf847f0529f021f1f26 Mon Sep 17 00:00:00 2001 From: Stanislav Malyshev Date: Wed, 9 Jul 2025 18:57:36 -0600 Subject: [PATCH 2/2] fix test --- .../elasticsearch/action/search/MultiSearchRequestTests.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 1ffe381212a74..d4d8b3f9c25af 100644 --- a/server/src/test/java/org/elasticsearch/action/search/MultiSearchRequestTests.java +++ b/server/src/test/java/org/elasticsearch/action/search/MultiSearchRequestTests.java @@ -599,7 +599,7 @@ public void testNullIndex() throws IOException { ElasticsearchParseException e = expectThrows(ElasticsearchParseException.class, () -> parseMultiSearchRequestFromString(""" {"index": null} { "query": {"match_all": {}}} - """)); + """, null)); assertThat(e.getMessage(), containsString("Expected a list of strings but got null")); }