diff --git a/server/src/main/java/org/elasticsearch/index/mapper/DocumentParser.java b/server/src/main/java/org/elasticsearch/index/mapper/DocumentParser.java index 78320a536dec1..311cf2a165f66 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/DocumentParser.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/DocumentParser.java @@ -749,8 +749,20 @@ private static void parseNonDynamicArray( XContentParser.Token token; XContentParser.Token previousToken = parser.currentToken(); int elements = 0; + int countArray = 0; + long nestedDocsLimit = context.indexSettings().getMappingNestedDocsLimit(); while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) { if (token == XContentParser.Token.START_OBJECT) { + if (countArray++ >= nestedDocsLimit) { + throw new IllegalStateException( + "The number of nested documents has exceeded the allowed limit of [" + + nestedDocsLimit + + "]. " + + "This limit can be set by changing the [" + + MapperService.INDEX_MAPPING_NESTED_DOCS_LIMIT_SETTING.getKey() + + "] index level setting." + ); + } elements = 2; parseObject(context, lastFieldName); } else if (token == XContentParser.Token.START_ARRAY) { diff --git a/server/src/test/java/org/elasticsearch/index/mapper/NestedObjectMapperTests.java b/server/src/test/java/org/elasticsearch/index/mapper/NestedObjectMapperTests.java index 2d87e121875b4..b05c36cfb4c77 100644 --- a/server/src/test/java/org/elasticsearch/index/mapper/NestedObjectMapperTests.java +++ b/server/src/test/java/org/elasticsearch/index/mapper/NestedObjectMapperTests.java @@ -905,7 +905,7 @@ public void testLimitNestedDocs() throws Exception { SourceToParse source2 = new SourceToParse("2", BytesReference.bytes(docBuilder2), XContentType.JSON); DocumentParsingException e = expectThrows(DocumentParsingException.class, () -> docMapper.parse(source2)); assertEquals( - "[1:73] The number of nested documents has exceeded the allowed limit of [" + "[1:73] failed to parse: The number of nested documents has exceeded the allowed limit of [" + maxNoNestedDocs + "]. This limit can be set by changing the [" + MapperService.INDEX_MAPPING_NESTED_DOCS_LIMIT_SETTING.getKey()