Skip to content

Reject fields that start with or end with a . #22794

@dakrone

Description

@dakrone

When dynamically updating mappings, these fields can cause the document parser to throw an NPE since the parent mapper doesn't exist for the line:

ObjectMapper withNewMapper = parentMappers.get(lastIndex).mappingUpdate(mapper);

Causing this exception:

Caused by: java.lang.NullPointerException
	at org.elasticsearch.index.mapper.DocumentParser.createUpdate(DocumentParser.java:309) ~[elasticsearch-5.1.2.jar:5.1.2]
	at org.elasticsearch.index.mapper.DocumentParser.createDynamicUpdate(DocumentParser.java:190) ~[elasticsearch-5.1.2.jar:5.1.2]
	at org.elasticsearch.index.mapper.DocumentParser.parseDocument(DocumentParser.java:78) ~[elasticsearch-5.1.2.jar:5.1.2]
	at org.elasticsearch.index.mapper.DocumentMapper.parse(DocumentMapper.java:275) ~[elasticsearch-5.1.2.jar:5.1.2]
	at org.elasticsearch.index.shard.IndexShard.prepareIndex(IndexShard.java:533) ~[elasticsearch-5.1.2.jar:5.1.2]
	at org.elasticsearch.index.shard.IndexShard.prepareIndexOnPrimary(IndexShard.java:510) ~[elasticsearch-5.1.2.jar:5.1.2]
	at org.elasticsearch.action.index.TransportIndexAction.prepareIndexOperationOnPrimary(TransportIndexAction.java:174) ~[elasticsearch-5.1.2.jar:5.1.2]
	at org.elasticsearch.action.index.TransportIndexAction.executeIndexRequestOnPrimary(TransportIndexAction.java:179) ~[elasticsearch-5.1.2.jar:5.1.2]
	at org.elasticsearch.action.index.TransportIndexAction.onPrimaryShard(TransportIndexAction.java:144) ~[elasticsearch-5.1.2.jar:5.1.2]
	at org.elasticsearch.action.index.TransportIndexAction.onPrimaryShard(TransportIndexAction.java:63) ~[elasticsearch-5.1.2.jar:5.1.2]
	at org.elasticsearch.action.support.replication.TransportWriteAction.shardOperationOnPrimary(TransportWriteAction.java:75) ~[elasticsearch-5.1.2.jar:5.1.2]
	at org.elasticsearch.action.support.replication.TransportWriteAction.shardOperationOnPrimary(TransportWriteAction.java:48) ~[elasticsearch-5.1.2.jar:5.1.2]
	at org.elasticsearch.action.support.replication.TransportReplicationAction$PrimaryShardReference.perform(TransportReplicationAction.java:905) ~[elasticsearch-5.1.2.jar:5.1.2]
	at org.elasticsearch.action.support.replication.TransportReplicationAction$PrimaryShardReference.perform(TransportReplicationAction.java:875) ~[elasticsearch-5.1.2.jar:5.1.2]
	at org.elasticsearch.action.support.replication.ReplicationOperation.execute(ReplicationOperation.java:113) ~[elasticsearch-5.1.2.jar:5.1.2]
	at org.elasticsearch.action.support.replication.TransportReplicationAction$AsyncPrimaryAction.onResponse(TransportReplicationAction.java:323) [elasticsearch-5.1.2.jar:5.1.2]
	at org.elasticsearch.action.support.replication.TransportReplicationAction$AsyncPrimaryAction.onResponse(TransportReplicationAction.java:258) [elasticsearch-5.1.2.jar:5.1.2]
	at org.elasticsearch.action.support.replication.TransportReplicationAction$1.onResponse(TransportReplicationAction.java:855) [elasticsearch-5.1.2.jar:5.1.2]
	at org.elasticsearch.action.support.replication.TransportReplicationAction$1.onResponse(TransportReplicationAction.java:852) [elasticsearch-5.1.2.jar:5.1.2]
	at org.elasticsearch.index.shard.IndexShardOperationsLock.acquire(IndexShardOperationsLock.java:142) [elasticsearch-5.1.2.jar:5.1.2]
	at org.elasticsearch.index.shard.IndexShard.acquirePrimaryOperationLock(IndexShard.java:1648) [elasticsearch-5.1.2.jar:5.1.2]
	at org.elasticsearch.action.support.replication.TransportReplicationAction.acquirePrimaryShardReference(TransportReplicationAction.java:864) [elasticsearch-5.1.2.jar:5.1.2]
	at org.elasticsearch.action.support.replication.TransportReplicationAction.access$400(TransportReplicationAction.java:90) [elasticsearch-5.1.2.jar:5.1.2]
	at org.elasticsearch.action.support.replication.TransportReplicationAction$AsyncPrimaryAction.doRun(TransportReplicationAction.java:275) [elasticsearch-5.1.2.jar:5.1.2]
	at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37) [elasticsearch-5.1.2.jar:5.1.2]
	at org.elasticsearch.action.support.replication.TransportReplicationAction$PrimaryOperationTransportHandler.messageReceived(TransportReplicationAction.java:254) [elasticsearch-5.1.2.jar:5.1.2]
	at org.elasticsearch.action.support.replication.TransportReplicationAction$PrimaryOperationTransportHandler.messageReceived(TransportReplicationAction.java:246) [elasticsearch-5.1.2.jar:5.1.2]
	at org.elasticsearch.transport.RequestHandlerRegistry.processMessageReceived(RequestHandlerRegistry.java:69) [elasticsearch-5.1.2.jar:5.1.2]
	at org.elasticsearch.transport.TransportService$6.doRun(TransportService.java:577) [elasticsearch-5.1.2.jar:5.1.2]
	at org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:527) [elasticsearch-5.1.2.jar:5.1.2]
	at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37) [elasticsearch-5.1.2.jar:5.1.2]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [?:1.8.0_111]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [?:1.8.0_111]
	at java.lang.Thread.run(Thread.java:745) [?:1.8.0_111]

Which can be reproduced with:

DELETE /i

POST /i/d?pretty
{
  "top.": [
    {
      "foo.": [{
        "thing": "bah"
      }]
    }
  ]
}

POST /i/d?pretty
{
  "top.": [
    {
      "foo.": [{
        "bar.": {
          "aoeu.": {
            "a": 1,
            "b": 2
          },
          "baz": "eggplant"
        }
      }]
    }
  ]
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    :Search Foundations/MappingIndex mappings, including merging and defining field types>bugTeam:Search FoundationsMeta label for the Search Foundations team in Elasticsearch

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions