Browse Source

Fix error 500 on invalid ParentIdQuery (#105693)

We need to enforce non-null values here, otherwise we'll error out and return
a 500 when a user fails to set either id or type.

closes #105366
Armin Braun 1 year ago
parent
commit
1f1636e1f7

+ 6 - 0
docs/changelog/105693.yaml

@@ -0,0 +1,6 @@
+pr: 105693
+summary: Fix error 500 on invalid `ParentIdQuery`
+area: Search
+type: bug
+issues:
+ - 105366

+ 2 - 2
modules/parent-join/src/main/java/org/elasticsearch/join/query/ParentIdQueryBuilder.java

@@ -51,8 +51,8 @@ public final class ParentIdQueryBuilder extends AbstractQueryBuilder<ParentIdQue
     private boolean ignoreUnmapped = DEFAULT_IGNORE_UNMAPPED;
 
     public ParentIdQueryBuilder(String type, String id) {
-        this.type = type;
-        this.id = id;
+        this.type = requireValue(type, "[" + NAME + "] requires '" + TYPE_FIELD.getPreferredName() + "' field");
+        this.id = requireValue(id, "[" + NAME + "] requires '" + ID_FIELD.getPreferredName() + "' field");
     }
 
     /**

+ 5 - 0
modules/parent-join/src/test/java/org/elasticsearch/join/query/ParentIdQueryBuilderTests.java

@@ -156,6 +156,11 @@ public class ParentIdQueryBuilderTests extends AbstractQueryTestCase<ParentIdQue
         assertThat(e.getMessage(), containsString("[" + ParentIdQueryBuilder.NAME + "] no relation found for child [unmapped]"));
     }
 
+    public void testThrowsOnNullTypeOrId() {
+        expectThrows(IllegalArgumentException.class, () -> new ParentIdQueryBuilder(null, randomAlphaOfLength(5)));
+        expectThrows(IllegalArgumentException.class, () -> new ParentIdQueryBuilder(randomAlphaOfLength(5), null));
+    }
+
     public void testDisallowExpensiveQueries() {
         SearchExecutionContext searchExecutionContext = mock(SearchExecutionContext.class);
         when(searchExecutionContext.allowExpensiveQueries()).thenReturn(false);