This is an automated email from the ASF dual-hosted git repository. btellier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit fffd43e061b37576dbe69e2bef8bd01c4fcc1caa Author: Benoit Tellier <[email protected]> AuthorDate: Thu Aug 20 16:24:16 2020 +0700 JAMES-3357 Mailbox/set create should reject names containing delimiter --- .../contract/MailboxSetMethodContract.scala | 55 ++++++++++++++++++++++ .../james/jmap/method/MailboxSetMethod.scala | 3 ++ 2 files changed, 58 insertions(+) diff --git a/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/MailboxSetMethodContract.scala b/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/MailboxSetMethodContract.scala index 0ac39c3..f979028 100644 --- a/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/MailboxSetMethodContract.scala +++ b/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/MailboxSetMethodContract.scala @@ -330,6 +330,61 @@ trait MailboxSetMethodContract { } @Test + def createShouldFailWhenNameWithDelimiter(): Unit = { + val request = + """ + |{ + | "using": [ "urn:ietf:params:jmap:core", "urn:ietf:params:jmap:mail" ], + | "methodCalls": [ + | [ + | "Mailbox/set", + | { + | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", + | "create": { + | "C42": { + | "name": "my.mailbox" + | } + | } + | }, + | "c1" + | ] + | ] + |} + |""".stripMargin + + val response = `given` + .header(ACCEPT.toString, ACCEPT_RFC8621_VERSION_HEADER) + .body(request) + .when + .post + .`then` + .log().ifValidationFails() + .statusCode(SC_OK) + .contentType(JSON) + .extract + .body + .asString + + assertThatJson(response).isEqualTo( + s"""{ + | "sessionState": "75128aab4b1b", + | "methodResponses": [ + | ["Mailbox/set", { + | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", + | "newState": "000001", + | "notCreated": { + | "C42": { + | "type": "invalidArguments", + | "description": "The mailbox 'my.mailbox' contains an illegal character: '.'", + | "properties": ["name"] + | } + | } + | }, "c1"] + | ] + |}""".stripMargin) + } + + @Test def updateShouldFailWhenModifyingUnreadThreads(server: GuiceJamesServer): Unit = { val mailboxId: MailboxId = server.getProbe(classOf[MailboxProbeImpl]) .createMailbox(MailboxPath.forUser(BOB, "INBOX")) diff --git a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxSetMethod.scala b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxSetMethod.scala index 3d9add2..e6bf852 100644 --- a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxSetMethod.scala +++ b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxSetMethod.scala @@ -378,6 +378,9 @@ class MailboxSetMethod @Inject()(serializer: Serializer, private def resolvePath(mailboxSession: MailboxSession, mailboxCreationRequest: MailboxCreationRequest, processingContext: ProcessingContext): Either[Exception, MailboxPath] = { + if (mailboxCreationRequest.name.value.contains(mailboxSession.getPathDelimiter)) { + return Left(new MailboxNameException(s"The mailbox '${mailboxCreationRequest.name.value}' contains an illegal character: '${mailboxSession.getPathDelimiter}'")) + } mailboxCreationRequest.parentId .map(maybeParentId => for { parentId <- processingContext.resolveMailboxId(maybeParentId, mailboxIdFactory) --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
