Skip to content

Commit f93a0b8

Browse files
opensearch-trigger-bot[bot]github-actions[bot]dbwiddis
authored andcommitted
Fix issue 14519:Parsing a GetResult returns NPE if found field is mis… (opensearch-project#14552) (opensearch-project#14600)
* Fix issue 14519:Parsing a GetResult returns NPE if found field is missing. Signed-off-by: Vatsal <[email protected]> * Fix issue 14519:Parsing a GetResult returns NPE if found field is missing. Signed-off-by: Vatsal <[email protected]> * Fix issue 14519:Fix wildcart import. Signed-off-by: Vatsal <[email protected]> * Fix issue 14519:Fix wildcart import. Signed-off-by: Vatsal <[email protected]> * Fix issue 14519:Fix spotless issues. Signed-off-by: Vatsal <[email protected]> * Fix issue 14519:update changelog --------- (cherry picked from commit c71fd4a) Signed-off-by: vatsal <[email protected]> Signed-off-by: Daniel Widdis <[email protected]> Signed-off-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: Daniel Widdis <[email protected]> Signed-off-by: kkewwei <[email protected]>
1 parent 5a6e2a8 commit f93a0b8

File tree

3 files changed

+31
-0
lines changed

3 files changed

+31
-0
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
4949
- Add ListPitInfo::getKeepAlive() getter ([#14495](https://github.com/opensearch-project/OpenSearch/pull/14495))
5050
- Fix FuzzyQuery in keyword field will use IndexOrDocValuesQuery when both of index and doc_value are true ([#14378](https://github.com/opensearch-project/OpenSearch/pull/14378))
5151
- Fix file cache initialization ([#14004](https://github.com/opensearch-project/OpenSearch/pull/14004))
52+
- Handle NPE in GetResult if "found" field is missing ([#14552](https://github.com/opensearch-project/OpenSearch/pull/14552))
5253

5354
### Security
5455

server/src/main/java/org/opensearch/index/get/GetResult.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
import org.opensearch.common.annotation.PublicApi;
3939
import org.opensearch.common.document.DocumentField;
4040
import org.opensearch.common.xcontent.XContentHelper;
41+
import org.opensearch.core.common.ParsingException;
4142
import org.opensearch.core.common.Strings;
4243
import org.opensearch.core.common.bytes.BytesReference;
4344
import org.opensearch.core.common.io.stream.StreamInput;
@@ -57,6 +58,7 @@
5758
import java.util.Collections;
5859
import java.util.HashMap;
5960
import java.util.Iterator;
61+
import java.util.Locale;
6062
import java.util.Map;
6163
import java.util.Objects;
6264

@@ -411,6 +413,14 @@ public static GetResult fromXContentEmbedded(XContentParser parser, String index
411413
}
412414
}
413415
}
416+
417+
if (found == null) {
418+
throw new ParsingException(
419+
parser.getTokenLocation(),
420+
String.format(Locale.ROOT, "Missing required field [%s]", GetResult.FOUND)
421+
);
422+
}
423+
414424
return new GetResult(index, id, seqNo, primaryTerm, version, found, source, documentFields, metaFields);
415425
}
416426

server/src/test/java/org/opensearch/index/get/GetResultTests.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,16 @@
3535
import org.opensearch.common.collect.Tuple;
3636
import org.opensearch.common.document.DocumentField;
3737
import org.opensearch.common.io.stream.BytesStreamOutput;
38+
import org.opensearch.common.xcontent.LoggingDeprecationHandler;
3839
import org.opensearch.common.xcontent.XContentType;
40+
import org.opensearch.common.xcontent.json.JsonXContent;
41+
import org.opensearch.core.common.ParsingException;
3942
import org.opensearch.core.common.Strings;
4043
import org.opensearch.core.common.bytes.BytesArray;
4144
import org.opensearch.core.common.bytes.BytesReference;
4245
import org.opensearch.core.xcontent.MediaType;
4346
import org.opensearch.core.xcontent.MediaTypeRegistry;
47+
import org.opensearch.core.xcontent.NamedXContentRegistry;
4448
import org.opensearch.core.xcontent.ToXContent;
4549
import org.opensearch.core.xcontent.XContentParser;
4650
import org.opensearch.index.mapper.IdFieldMapper;
@@ -220,6 +224,22 @@ public void testEqualsAndHashcode() {
220224
);
221225
}
222226

227+
public void testFomXContentEmbeddedFoundParsingException() throws IOException {
228+
String json = "{\"_index\":\"foo\",\"_id\":\"bar\"}";
229+
try (
230+
XContentParser parser = JsonXContent.jsonXContent.createParser(
231+
NamedXContentRegistry.EMPTY,
232+
LoggingDeprecationHandler.INSTANCE,
233+
json
234+
)
235+
) {
236+
ensureExpectedToken(XContentParser.Token.START_OBJECT, parser.nextToken(), parser);
237+
ParsingException parsingException = assertThrows(ParsingException.class, () -> GetResult.fromXContentEmbedded(parser));
238+
assertEquals("Missing required field [found]", parsingException.getMessage());
239+
}
240+
241+
}
242+
223243
public static GetResult copyGetResult(GetResult getResult) {
224244
return new GetResult(
225245
getResult.getIndex(),

0 commit comments

Comments
 (0)