Skip to content

Commit 5c364a0

Browse files
committed
Explicit check for retriever object
1 parent 3fc0d35 commit 5c364a0

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed

x-pack/plugin/rank-rrf/src/main/java/org/elasticsearch/xpack/rank/rrf/RRFRetrieverComponent.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,9 @@ public static RRFRetrieverComponent fromXContent(XContentParser parser, Retrieve
8282
throw new ParsingException(parser.getTokenLocation(), "only one retriever can be specified");
8383
}
8484
parser.nextToken();
85+
if (parser.currentToken() != XContentParser.Token.START_OBJECT) {
86+
throw new ParsingException(parser.getTokenLocation(), "retriever must be an object");
87+
}
8588
parser.nextToken();
8689
String retrieverType = parser.currentName();
8790
retriever = parser.namedObject(RetrieverBuilder.class, retrieverType, context);

x-pack/plugin/rank-rrf/src/test/java/org/elasticsearch/xpack/rank/rrf/RRFRetrieverBuilderParsingTests.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -336,6 +336,27 @@ public void testRRFRetrieverComponentErrorCases() throws IOException {
336336
""";
337337

338338
expectParsingException(negativeWeightContent, "[weight] must be non-negative");
339+
340+
// Test case 5: Retriever as non-object
341+
String retrieverAsStringContent = """
342+
{
343+
"retriever": {
344+
"rrf": {
345+
"retrievers": [
346+
{
347+
"retriever": "not_an_object"
348+
}
349+
],
350+
"rank_window_size": 100,
351+
"rank_constant": 10,
352+
"min_score": 20.0,
353+
"_name": "foo_rrf"
354+
}
355+
}
356+
}
357+
""";
358+
359+
expectParsingException(retrieverAsStringContent, "retriever must be an object");
339360
}
340361

341362
private void expectParsingException(String restContent, String expectedMessageFragment) throws IOException {

0 commit comments

Comments
 (0)