You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by "Benoit Tellier (Jira)" <se...@james.apache.org> on 2020/07/16 05:25:00 UTC

[jira] [Created] (JAMES-3309) NPE when unselecting during a FETCH

Benoit Tellier created JAMES-3309:
-------------------------------------

             Summary: NPE when unselecting during a FETCH
                 Key: JAMES-3309
                 URL: https://issues.apache.org/jira/browse/JAMES-3309
             Project: James Server
          Issue Type: Bug
          Components: IMAPServer
    Affects Versions: master
            Reporter: Benoit Tellier


We encountered the following error:

{code:java}
t action 	FETCH
? fetchedData 	FetchData{flags=true, uid=true, internalDate=false, size=false, envelope=false, body=false, bodyStructure=false, setSeen=false, bodyElements=[], modSeq=false, changedSince=-1, vanished=false}
t host 	james-69956575bc-jlsgx
? idSet 	Optional[[IdRange ( 1->9223372036854775807 )]]
t ip 	10.2.0.0
t logger 	org.apache.james.imap.processor.AbstractMailboxProcessor
t message 	Unexpected error during IMAP processing
t protocol 	IMAP
t selectedMailbox 	1e54f590-49a4-11ea-b268-5bd54f0fe5f2
t sessionId 	SID-rxzyjwusjzrc
t severity 	ERROR
t stacktrace 	java.lang.NullPointerException: null
	at org.apache.james.imap.processor.fetch.FetchResponseBuilder.build(FetchResponseBuilder.java:117)
	at org.apache.james.imap.processor.fetch.FetchProcessor.processMessageRanges(FetchProcessor.java:153)
	at org.apache.james.imap.processor.fetch.FetchProcessor.processRequest(FetchProcessor.java:107)
	at org.apache.james.imap.processor.fetch.FetchProcessor.processRequest(FetchProcessor.java:53)
	at org.apache.james.imap.processor.AbstractMailboxProcessor.doProcess(AbstractMailboxProcessor.java:100)
	at org.apache.james.imap.processor.AbstractMailboxProcessor.doProcess(AbstractMailboxProcessor.java:77)
	at org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:58)
	at org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
	at org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
	at org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
	at org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
	at org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
	at org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
	at org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
	at org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
	at org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
	at org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
	at org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
	at org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
	at org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
	at org.apache.james.imapserver.netty.ImapChannelUpstreamHandler.messageReceived(ImapChannelUpstreamHandler.java:198)
	at org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70)
	at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
	at org.jboss.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791)
	at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:296)
	at org.jboss.netty.handler.codec.frame.FrameDecoder.unfoldAndFireMessageReceived(FrameDecoder.java:462)
	at org.jboss.netty.handler.codec.frame.FrameDecoder.callDecode(FrameDecoder.java:443)
	at org.jboss.netty.handler.codec.frame.FrameDecoder.messageReceived(FrameDecoder.java:303)
	at org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70)
	at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
	at org.jboss.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791)
	at org.jboss.netty.handler.execution.ChannelUpstreamEventRunnable.doRun(ChannelUpstreamEventRunnable.java:43)
	at org.jboss.netty.handler.execution.ChannelEventRunnable.run(ChannelEventRunnable.java:67)
	at org.jboss.netty.handler.execution.OrderedMemoryAwareThreadPoolExecutor$ChildExecutor.run(OrderedMemoryAwareThreadPoolExecutor.java:314)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.base/java.lang.Thread.run(Unknown Source)
t thread 	imapserver-executor-451
? useUid 	true
{code}

It turns out ImapSession::getSelectedMailbox can return null when the mailbox is deselected.

Furthermore, data races can occurs upon selected mailbox switches.

In FetchReponseBuilder we need to rely on the mailbox selected when the command was first issued.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org