Malformed Content-Disposition causes emails to fail to be processed

XMLWordPrintable

    • 4
    • Severity 2 - Major

      Summary

      An email that has a Content-Disposition but no value for that will fail to be processed by Service Desk, and the following error appears in the JIRA logs:

      [c.a.s.i.feature.emailchannel.IncomingEmailParser] Error processing email message
      javax.mail.internet.ParseException: Expected disposition, got null
            at javax.mail.internet.ContentDisposition.<init>(ContentDisposition.java:94)
            at javax.mail.internet.MimeBodyPart.getDisposition(MimeBodyPart.java:1193)
            at javax.mail.internet.MimeBodyPart.getDisposition(MimeBodyPart.java:315)
            at com.atlassian.mail.MailUtils.isAttachment(MailUtils.java:389)
            at com.atlassian.mail.MailUtils.addAttachments(MailUtils.java:301)
            at com.atlassian.mail.MailUtils.internalGetAttachments(MailUtils.java:289)
            at com.atlassian.mail.MailUtils.getAttachments(MailUtils.java:281)
            at com.atlassian.servicedesk.squalor.email.ServiceDeskMailUtils.getServiceDeskAttachments(ServiceDeskMailUtils.java:162)
            at com.atlassian.servicedesk.internal.feature.emailchannel.IncomingEmailParser.parse(IncomingEmailParser.java:57)
            at com.atlassian.servicedesk.internal.feature.emailchannel.IncomingEmailManagerImpl.lambda$createIssueInJiraContext$16(IncomingEmailManagerImpl.java:428)
            at com.atlassian.pocketknife.step.EitherStep1.lambda$then$0(EitherStep1.java:23)
            at io.atlassian.fugue.Either$RightProjection.flatMap(Either.java:870)
            at io.atlassian.fugue.Either.flatMap(Either.java:230)
            at com.atlassian.pocketknife.step.EitherStep1.then(EitherStep1.java:23)
            at com.atlassian.servicedesk.internal.feature.emailchannel.IncomingEmailManagerImpl.createIssueInJiraContext(IncomingEmailManagerImpl.java:428)
            at com.atlassian.servicedesk.internal.feature.emailchannel.IncomingEmailManagerImpl.createIssueFromEmail(IncomingEmailManagerImpl.java:172)
            at com.atlassian.servicedesk.internal.feature.emailchannel.IncomingEmailServiceImpl.createNewIssueWithRequestType(IncomingEmailServiceImpl.java:269)
            at com.atlassian.servicedesk.internal.feature.emailchannel.IncomingEmailServiceImpl.lambda$createNewIssueWithMailChannel$24(IncomingEmailServiceImpl.java:251)
            at io.atlassian.fugue.Either$RightProjection.flatMap(Either.java:870)
            at io.atlassian.fugue.Either.flatMap(Either.java:230)
            at com.atlassian.servicedesk.internal.feature.emailchannel.IncomingEmailServiceImpl.createNewIssueWithMailChannel(IncomingEmailServiceImpl.java:251)
            at com.atlassian.servicedesk.internal.feature.emailchannel.IncomingEmailServiceImpl.lambda$createNewOrCommentOnIssueWithMailChannelAsEmailSender$17(IncomingEmailServiceImpl.java:188)
            at io.atlassian.fugue.Option$None.fold(Option.java:383)
            at com.atlassian.servicedesk.internal.feature.emailchannel.IncomingEmailServiceImpl.createNewOrCommentOnIssueWithMailChannelAsEmailSender(IncomingEmailServiceImpl.java:187)
            at com.atlassian.servicedesk.internal.feature.emailchannel.IncomingEmailServiceImpl.lambda$null$14(IncomingEmailServiceImpl.java:175)
            at com.atlassian.servicedesk.internal.utils.context.ReentrantThreadLocalBasedCodeContext.rteInvoke(ReentrantThreadLocalBasedCodeContext.java:139)
            at com.atlassian.servicedesk.internal.utils.context.ReentrantThreadLocalBasedCodeContext.runInContext(ReentrantThreadLocalBasedCodeContext.java:57)
            at com.atlassian.servicedesk.internal.utils.context.CustomerContextServiceImpl.runInCustomerContext(CustomerContextServiceImpl.java:38)
            at com.atlassian.servicedesk.internal.feature.emailchannel.IncomingEmailServiceImpl.inCustomerContext(IncomingEmailServiceImpl.java:479)
            at com.atlassian.servicedesk.internal.feature.emailchannel.IncomingEmailServiceImpl.lambda$inEmailContext$43(IncomingEmailServiceImpl.java:472)
            at com.atlassian.pocketknife.internal.util.runner.AuthenticationContextUtilImpl.runAs(AuthenticationContextUtilImpl.java:56)
            at com.atlassian.servicedesk.internal.feature.emailchannel.IncomingEmailServiceImpl.inEmailContext(IncomingEmailServiceImpl.java:474)
            at com.atlassian.servicedesk.internal.feature.emailchannel.IncomingEmailServiceImpl.lambda$doCreateNewOrCommentOnIssueWithMailChannel$15(IncomingEmailServiceImpl.java:175)
            at io.atlassian.fugue.Either$Right.fold(Either.java:606)
            at com.atlassian.servicedesk.internal.feature.emailchannel.IncomingEmailServiceImpl.doCreateNewOrCommentOnIssueWithMailChannel(IncomingEmailServiceImpl.java:173)
            at com.atlassian.servicedesk.internal.feature.emailchannel.IncomingEmailServiceImpl.lambda$createNewOrCommentOnIssueWithMailChannel$6(IncomingEmailServiceImpl.java:148)
            at com.atlassian.pocketknife.step.EitherStep2.lambda$null$0(EitherStep2.java:20)
            at io.atlassian.fugue.Either$RightProjection.flatMap(Either.java:870)
            at io.atlassian.fugue.Either.flatMap(Either.java:230)
            at com.atlassian.pocketknife.step.EitherStep2.lambda$then$1(EitherStep2.java:20)
            at io.atlassian.fugue.Either$RightProjection.flatMap(Either.java:870)
            at io.atlassian.fugue.Either.flatMap(Either.java:230)
            at com.atlassian.pocketknife.step.EitherStep2.then(EitherStep2.java:20)
            at com.atlassian.servicedesk.internal.feature.emailchannel.IncomingEmailServiceImpl.createNewOrCommentOnIssueWithMailChannel(IncomingEmailServiceImpl.java:148)
            at com.atlassian.servicedesk.internal.feature.emailchannel.IncomingEmailServiceImpl.lambda$processEmailWithMailChannel$1(IncomingEmailServiceImpl.java:139)
            at io.atlassian.fugue.Either$RightProjection.flatMap(Either.java:870)
            at io.atlassian.fugue.Either.flatMap(Either.java:230)
            at com.atlassian.pocketknife.step.EitherStep1.then(EitherStep1.java:18)
            at com.atlassian.servicedesk.internal.feature.emailchannel.IncomingEmailServiceImpl.processEmailWithMailChannel(IncomingEmailServiceImpl.java:139)
            at com.atlassian.servicedesk.internal.feature.emailchannel.emailplatform.handler.SDMailHandler.processMessage(SDMailHandler.java:76)
            at com.atlassian.servicedesk.internal.feature.emailchannel.emailplatform.handler.SDMailHandler.handleNewMessage(SDMailHandler.java:50)
            at com.atlassian.jira.internal.mail.processor.feature.processor.MailHandlerWorker.handle(MailHandlerWorker.java:64)
            at com.atlassian.jira.internal.mail.processor.feature.processor.MailProcessorWorker.processMailItem(MailProcessorWorker.java:100)
            at com.atlassian.jira.internal.mail.processor.feature.processor.MailProcessorWorker.lambda$process$0(MailProcessorWorker.java:77)
            at com.atlassian.pocketknife.internal.querydsl.DatabaseAccessorImpl.lambda$execute$0(DatabaseAccessorImpl.java:54)
            at com.atlassian.sal.core.rdbms.DefaultTransactionalExecutor.executeInternal(DefaultTransactionalExecutor.java:88)
            at com.atlassian.sal.core.rdbms.DefaultTransactionalExecutor$1.execute(DefaultTransactionalExecutor.java:42)
            at com.atlassian.sal.jira.rdbms.JiraHostConnectionAccessor.lambda$borrowConnectionAndExecute$0(JiraHostConnectionAccessor.java:62)
            at com.atlassian.jira.database.DatabaseAccessorImpl.executeQuery(DatabaseAccessorImpl.java:42)
            ... 2 filtered
            at java.lang.reflect.Method.invoke(Method.java:498)
            at com.atlassian.plugin.util.ContextClassLoaderSettingInvocationHandler.invoke(ContextClassLoaderSettingInvocationHandler.java:26)
            at com.sun.proxy.$Proxy509.executeQuery(Unknown Source)
            ... 2 filtered
            at java.lang.reflect.Method.invoke(Method.java:498)
            at com.atlassian.plugin.osgi.bridge.external.HostComponentFactoryBean$DynamicServiceInvocationHandler.invoke(HostComponentFactoryBean.java:136)
            at com.sun.proxy.$Proxy509.executeQuery(Unknown Source)
            at com.atlassian.sal.jira.rdbms.JiraHostConnectionAccessor.borrowConnectionAndExecute(JiraHostConnectionAccessor.java:50)
            at com.atlassian.sal.jira.rdbms.JiraHostConnectionAccessor.execute(JiraHostConnectionAccessor.java:35)
            at com.atlassian.sal.core.rdbms.DefaultTransactionalExecutor.execute(DefaultTransactionalExecutor.java:39)
            at com.atlassian.pocketknife.internal.querydsl.DatabaseAccessorImpl.execute(DatabaseAccessorImpl.java:52)
            at com.atlassian.pocketknife.internal.querydsl.DatabaseAccessorImpl.runInNewTransaction(DatabaseAccessorImpl.java:32)
            at com.atlassian.jira.internal.mail.processor.feature.processor.MailProcessorWorker.process(MailProcessorWorker.java:74)
            at com.atlassian.jira.internal.mail.processor.feature.processor.MailProcessorService.run(MailProcessorService.java:36)
            at com.atlassian.jira.internal.mail.processor.services.MailProcessorExecutor.run(MailProcessorExecutor.java:33)
            at com.atlassian.jira.internal.mail.processor.services.AbstractMailExecutor.execute(AbstractMailExecutor.java:41)
            at com.atlassian.jira.internal.mail.processor.services.MailJobRunner.runJob(MailJobRunner.java:35)
            at com.atlassian.scheduler.core.JobLauncher.runJob(JobLauncher.java:153)
            at com.atlassian.scheduler.core.JobLauncher.launchAndBuildResponse(JobLauncher.java:118)
            at com.atlassian.scheduler.core.JobLauncher.launch(JobLauncher.java:97)
            at com.atlassian.scheduler.caesium.impl.CaesiumSchedulerService.launchJob(CaesiumSchedulerService.java:443)
            at com.atlassian.scheduler.caesium.impl.CaesiumSchedulerService.executeClusteredJob(CaesiumSchedulerService.java:438)
            at com.atlassian.scheduler.caesium.impl.CaesiumSchedulerService.executeClusteredJobWithRecoveryGuard(CaesiumSchedulerService.java:462)
            at com.atlassian.scheduler.caesium.impl.CaesiumSchedulerService.executeQueuedJob(CaesiumSchedulerService.java:390)
            at com.atlassian.jira.scheduler.JiraCaesiumSchedulerService.executeQueuedJob(JiraCaesiumSchedulerService.java:75)
            at com.atlassian.scheduler.caesium.impl.CaesiumSchedulerService$1.consume(CaesiumSchedulerService.java:285)
            at com.atlassian.scheduler.caesium.impl.CaesiumSchedulerService$1.consume(CaesiumSchedulerService.java:282)
            at com.atlassian.scheduler.caesium.impl.SchedulerQueueWorker.executeJob(SchedulerQueueWorker.java:65)
            at com.atlassian.scheduler.caesium.impl.SchedulerQueueWorker.executeNextJob(SchedulerQueueWorker.java:59)
            at com.atlassian.scheduler.caesium.impl.SchedulerQueueWorker.run(SchedulerQueueWorker.java:34)
            at java.lang.Thread.run(Thread.java:745)
      

      Notes

      The email in question looked like this:

      --0__=C5BB0AE8DF12DD0C8f9e8a93df938690918cC5BB0AE8DF12DD0C
      Content-type: multipart/related; 
      	Boundary="1__=C5BB0AE8DF12DD0C8f9e8a93df938690918cC5BB0AE8DF12DD0C"
      Content-Disposition: 
      
      --1__=C5BB0AE8DF12DD0C8f9e8a93df938690918cC5BB0AE8DF12DD0C
      Content-type: multipart/alternative; 
      	Boundary="2__=C5BB0AE8DF12DD0C8f9e8a93df938690918cC5BB0AE8DF12DD0C"
      
      --2__=C5BB0AE8DF12DD0C8f9e8a93df938690918cC5BB0AE8DF12DD0C
      Content-type: text/plain; charset=UTF-8
      Content-transfer-encoding: quoted-printable
      

      Service Desk should handle emails like this in a sensible manner.

            Assignee:
            Unassigned
            Reporter:
            Nick Mason
            Votes:
            0 Vote for this issue
            Watchers:
            5 Start watching this issue

              Created:
              Updated:
              Resolved: