mirror of
https://github.com/honeymoose/OpenSearch.git
synced 2025-03-29 03:18:26 +00:00
Support only string format
in date, root object & date range (#28117)
Limit date `format` attribute to String values only. Closes #23650
This commit is contained in:
parent
e1e8cf382f
commit
f1f6d4ed33
server/src
main/java/org/elasticsearch/index/mapper
test/java/org/elasticsearch/index/mapper
@ -264,7 +264,10 @@ public class TypeParsers {
|
||||
}
|
||||
|
||||
public static FormatDateTimeFormatter parseDateTimeFormatter(Object node) {
|
||||
return Joda.forPattern(node.toString());
|
||||
if (node instanceof String) {
|
||||
return Joda.forPattern((String) node);
|
||||
}
|
||||
throw new IllegalArgumentException("Invalid format: [" + node.toString() + "]: expected string value");
|
||||
}
|
||||
|
||||
public static void parseTermVector(String fieldName, String termVector, FieldMapper.Builder builder) throws MapperParsingException {
|
||||
|
@ -414,4 +414,22 @@ public class DateFieldMapperTests extends ESSingleNodeTestCase {
|
||||
() -> mapper.merge(update.mapping()));
|
||||
assertEquals("mapper [date] of different type, current_type [date], merged_type [text]", e.getMessage());
|
||||
}
|
||||
|
||||
public void testIllegalFormatField() throws Exception {
|
||||
String mapping = Strings.toString(XContentFactory.jsonBuilder()
|
||||
.startObject()
|
||||
.startObject("type")
|
||||
.startObject("properties")
|
||||
.startObject("field")
|
||||
.field("type", "date")
|
||||
.array("format", "test_format")
|
||||
.endObject()
|
||||
.endObject()
|
||||
.endObject()
|
||||
.endObject());
|
||||
|
||||
IllegalArgumentException e = expectThrows(IllegalArgumentException.class,
|
||||
() -> parser.parse("type", new CompressedXContent(mapping)));
|
||||
assertEquals("Invalid format: [[test_format]]: expected string value", e.getMessage());
|
||||
}
|
||||
}
|
||||
|
@ -443,4 +443,22 @@ public class RangeFieldMapperTests extends AbstractNumericFieldMapperTestCase {
|
||||
}
|
||||
}
|
||||
|
||||
public void testIllegalFormatField() throws Exception {
|
||||
String mapping = Strings.toString(XContentFactory.jsonBuilder()
|
||||
.startObject()
|
||||
.startObject("type")
|
||||
.startObject("properties")
|
||||
.startObject("field")
|
||||
.field("type", "date_range")
|
||||
.array("format", "test_format")
|
||||
.endObject()
|
||||
.endObject()
|
||||
.endObject()
|
||||
.endObject());
|
||||
|
||||
IllegalArgumentException e = expectThrows(IllegalArgumentException.class,
|
||||
() -> parser.parse("type", new CompressedXContent(mapping)));
|
||||
assertEquals("Invalid format: [[test_format]]: expected string value", e.getMessage());
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -159,4 +159,30 @@ public class RootObjectMapperTests extends ESSingleNodeTestCase {
|
||||
mapper = mapperService.merge("type", new CompressedXContent(mapping3), MergeReason.MAPPING_UPDATE);
|
||||
assertEquals(mapping3, mapper.mappingSource().toString());
|
||||
}
|
||||
|
||||
public void testIllegalFormatField() throws Exception {
|
||||
String dynamicMapping = Strings.toString(XContentFactory.jsonBuilder()
|
||||
.startObject()
|
||||
.startObject("type")
|
||||
.startArray("dynamic_date_formats")
|
||||
.startArray().value("test_format").endArray()
|
||||
.endArray()
|
||||
.endObject()
|
||||
.endObject());
|
||||
String mapping = Strings.toString(XContentFactory.jsonBuilder()
|
||||
.startObject()
|
||||
.startObject("type")
|
||||
.startArray("date_formats")
|
||||
.startArray().value("test_format").endArray()
|
||||
.endArray()
|
||||
.endObject()
|
||||
.endObject());
|
||||
|
||||
DocumentMapperParser parser = createIndex("test").mapperService().documentMapperParser();
|
||||
for (String m : Arrays.asList(mapping, dynamicMapping)) {
|
||||
IllegalArgumentException e = expectThrows(IllegalArgumentException.class,
|
||||
() -> parser.parse("type", new CompressedXContent(m)));
|
||||
assertEquals("Invalid format: [[test_format]]: expected string value", e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user