From 41b90b3e2af9fb7004ea6fa238a98ad77e7c7035 Mon Sep 17 00:00:00 2001 From: feifeiiiiiiiiii <3310967+feifeiiiiiiiiiii@users.noreply.github.com> Date: Sat, 1 Feb 2020 20:07:10 +0800 Subject: [PATCH 1/6] Fix issue #51486 --- .../java/org/elasticsearch/index/mapper/RootObjectMapper.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/server/src/main/java/org/elasticsearch/index/mapper/RootObjectMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/RootObjectMapper.java index cd3242e98a2d7..a724cbb5f1dec 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/RootObjectMapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/RootObjectMapper.java @@ -168,6 +168,9 @@ protected boolean processField(RootObjectMapper.Builder builder, String fieldNam } ] */ + if (!(fieldNode instanceof List)) { + throw new MapperParsingException("Dynamic template syntax error"); + } List tmplNodes = (List) fieldNode; List templates = new ArrayList<>(); for (Object tmplNode : tmplNodes) { From 62083e0b8e42652a1891678c9eacdc7f09a5be6b Mon Sep 17 00:00:00 2001 From: feifeiiiiiiiiii Date: Tue, 4 Feb 2020 08:28:03 +0800 Subject: [PATCH 2/6] Fix style and add detail error information --- .../java/org/elasticsearch/index/mapper/RootObjectMapper.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/src/main/java/org/elasticsearch/index/mapper/RootObjectMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/RootObjectMapper.java index a724cbb5f1dec..4724d5d8c825a 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/RootObjectMapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/RootObjectMapper.java @@ -168,8 +168,8 @@ protected boolean processField(RootObjectMapper.Builder builder, String fieldNam } ] */ - if (!(fieldNode instanceof List)) { - throw new MapperParsingException("Dynamic template syntax error"); + if ((fieldNode instanceof List) == false) { + throw new MapperParsingException("Dynamic template syntax error, expects an array of named objects"); } List tmplNodes = (List) fieldNode; List templates = new ArrayList<>(); From 8e4460bd00b7552228e61378cc745312f54a82c4 Mon Sep 17 00:00:00 2001 From: feifeiiiiiiiiii Date: Tue, 4 Feb 2020 08:51:18 +0800 Subject: [PATCH 3/6] Add illegal dynamic templates test --- .../index/mapper/RootObjectMapperTests.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/server/src/test/java/org/elasticsearch/index/mapper/RootObjectMapperTests.java b/server/src/test/java/org/elasticsearch/index/mapper/RootObjectMapperTests.java index 0b805eb726646..5cfde84492976 100644 --- a/server/src/test/java/org/elasticsearch/index/mapper/RootObjectMapperTests.java +++ b/server/src/test/java/org/elasticsearch/index/mapper/RootObjectMapperTests.java @@ -185,4 +185,21 @@ public void testIllegalFormatField() throws Exception { assertEquals("Invalid format: [[test_format]]: expected string value", e.getMessage()); } } + + public void testIllegalDynamicTemplates() throws Exception { + String mapping = Strings.toString(XContentFactory.jsonBuilder() + .startObject() + .startObject("type") + .startObject("dynamic_templates") + .endObject() + .endObject() + .endObject()); + + DocumentMapperParser parser = createIndex("test").mapperService().documentMapperParser(); + MapperParsingException e = expectThrows(MapperParsingException.class, + () -> parser.parse("type", new CompressedXContent(mapping))); + assertEquals("Dynamic template syntax error, expects an array of named objects", e.getMessage()); + } +} + } From 3537a180ca440641c37b75e2cbedf969a68c696e Mon Sep 17 00:00:00 2001 From: feifeiiiiiiiiii Date: Tue, 4 Feb 2020 22:12:27 +0800 Subject: [PATCH 4/6] Update server/src/main/java/org/elasticsearch/index/mapper/RootObjectMapper.java MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Christoph Büscher --- .../java/org/elasticsearch/index/mapper/RootObjectMapper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/src/main/java/org/elasticsearch/index/mapper/RootObjectMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/RootObjectMapper.java index 4724d5d8c825a..27afb49e36998 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/RootObjectMapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/RootObjectMapper.java @@ -169,7 +169,7 @@ protected boolean processField(RootObjectMapper.Builder builder, String fieldNam ] */ if ((fieldNode instanceof List) == false) { - throw new MapperParsingException("Dynamic template syntax error, expects an array of named objects"); + throw new MapperParsingException("Dynamic template syntax error. An array of named objects is expected."); } List tmplNodes = (List) fieldNode; List templates = new ArrayList<>(); From fa73a2199fece0a80d1224ed244e06e2aa71aa3d Mon Sep 17 00:00:00 2001 From: feifeiiiiiiiiii Date: Tue, 4 Feb 2020 22:18:22 +0800 Subject: [PATCH 5/6] Fix syntax error --- .../org/elasticsearch/index/mapper/RootObjectMapperTests.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/server/src/test/java/org/elasticsearch/index/mapper/RootObjectMapperTests.java b/server/src/test/java/org/elasticsearch/index/mapper/RootObjectMapperTests.java index 5cfde84492976..01c6a6f7c8907 100644 --- a/server/src/test/java/org/elasticsearch/index/mapper/RootObjectMapperTests.java +++ b/server/src/test/java/org/elasticsearch/index/mapper/RootObjectMapperTests.java @@ -201,5 +201,3 @@ public void testIllegalDynamicTemplates() throws Exception { assertEquals("Dynamic template syntax error, expects an array of named objects", e.getMessage()); } } - -} From 5775adea37495721428d473914f3e83640f7f016 Mon Sep 17 00:00:00 2001 From: feifeiiiiiiiiii Date: Tue, 4 Feb 2020 22:27:51 +0800 Subject: [PATCH 6/6] Update test exception message --- .../org/elasticsearch/index/mapper/RootObjectMapperTests.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/src/test/java/org/elasticsearch/index/mapper/RootObjectMapperTests.java b/server/src/test/java/org/elasticsearch/index/mapper/RootObjectMapperTests.java index 01c6a6f7c8907..a8bd8f5a0e2d3 100644 --- a/server/src/test/java/org/elasticsearch/index/mapper/RootObjectMapperTests.java +++ b/server/src/test/java/org/elasticsearch/index/mapper/RootObjectMapperTests.java @@ -198,6 +198,6 @@ public void testIllegalDynamicTemplates() throws Exception { DocumentMapperParser parser = createIndex("test").mapperService().documentMapperParser(); MapperParsingException e = expectThrows(MapperParsingException.class, () -> parser.parse("type", new CompressedXContent(mapping))); - assertEquals("Dynamic template syntax error, expects an array of named objects", e.getMessage()); + assertEquals("Dynamic template syntax error. An array of named objects is expected.", e.getMessage()); } }