Skip to content

Commit c71fd4a

Browse files
imvtsldbwiddis
andauthored
Fix issue 14519:Parsing a GetResult returns NPE if found field is mis… (#14552)
* Fix issue 14519:Parsing a GetResult returns NPE if found field is missing. Signed-off-by: Vatsal <vatsal.v.anand@gmail.com> Signed-off-by: vatsal <vatsal.v.anand@gmail.com> * Fix issue 14519:Parsing a GetResult returns NPE if found field is missing. Signed-off-by: Vatsal <vatsal.v.anand@gmail.com> Signed-off-by: vatsal <vatsal.v.anand@gmail.com> * Fix issue 14519:Fix wildcart import. Signed-off-by: Vatsal <vatsal.v.anand@gmail.com> Signed-off-by: vatsal <vatsal.v.anand@gmail.com> * Fix issue 14519:Fix wildcart import. Signed-off-by: Vatsal <vatsal.v.anand@gmail.com> Signed-off-by: vatsal <vatsal.v.anand@gmail.com> * Fix issue 14519:Fix spotless issues. Signed-off-by: Vatsal <vatsal.v.anand@gmail.com> Signed-off-by: vatsal <vatsal.v.anand@gmail.com> * Fix issue 14519:update changelog Signed-off-by: vatsal <vatsal.v.anand@gmail.com> --------- Signed-off-by: vatsal <vatsal.v.anand@gmail.com> Signed-off-by: Daniel Widdis <widdis@gmail.com> Co-authored-by: Daniel Widdis <widdis@gmail.com>
1 parent 5c8623f commit c71fd4a

File tree

3 files changed

+31
-0
lines changed

3 files changed

+31
-0
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5252
- Add ListPitInfo::getKeepAlive() getter ([#14495](https://github.com/opensearch-project/OpenSearch/pull/14495))
5353
- 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))
5454
- Fix file cache initialization ([#14004](https://github.com/opensearch-project/OpenSearch/pull/14004))
55+
- Handle NPE in GetResult if "found" field is missing ([#14552](https://github.com/opensearch-project/OpenSearch/pull/14552))
5556

5657
### Security
5758

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

+10
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import org.opensearch.common.annotation.PublicApi;
3838
import org.opensearch.common.document.DocumentField;
3939
import org.opensearch.common.xcontent.XContentHelper;
40+
import org.opensearch.core.common.ParsingException;
4041
import org.opensearch.core.common.Strings;
4142
import org.opensearch.core.common.bytes.BytesReference;
4243
import org.opensearch.core.common.io.stream.StreamInput;
@@ -56,6 +57,7 @@
5657
import java.util.Collections;
5758
import java.util.HashMap;
5859
import java.util.Iterator;
60+
import java.util.Locale;
5961
import java.util.Map;
6062
import java.util.Objects;
6163

@@ -398,6 +400,14 @@ public static GetResult fromXContentEmbedded(XContentParser parser, String index
398400
}
399401
}
400402
}
403+
404+
if (found == null) {
405+
throw new ParsingException(
406+
parser.getTokenLocation(),
407+
String.format(Locale.ROOT, "Missing required field [%s]", GetResult.FOUND)
408+
);
409+
}
410+
401411
return new GetResult(index, id, seqNo, primaryTerm, version, found, source, documentFields, metaFields);
402412
}
403413

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

+20
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)