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 824e8f6ec3fbfd30651738f2ade1c693f36f0e85
Author: Benoit Tellier <btell...@linagora.com>
AuthorDate: Tue Mar 8 09:21:24 2022 +0700

    JAMES-3722 SELECT + QRESYNC did not comply with formal syntax
    
    sequence match data can theorically be specified without known uids.
    
    CF:
    select-param        =  \"QRESYNC\" SP \"(\" uidvalidity SP" +
                            mod-sequence-value [SP known-uids]
                            [SP seq-match-data]
---
 .../decode/parser/AbstractSelectionCommandParser.java  | 18 ++++++++++++------
 .../apache/james/imapserver/netty/IMAPServerTest.java  |  5 -----
 2 files changed, 12 insertions(+), 11 deletions(-)

diff --git 
a/protocols/imap/src/main/java/org/apache/james/imap/decode/parser/AbstractSelectionCommandParser.java
 
b/protocols/imap/src/main/java/org/apache/james/imap/decode/parser/AbstractSelectionCommandParser.java
index 8959299..d06f2f1 100644
--- 
a/protocols/imap/src/main/java/org/apache/james/imap/decode/parser/AbstractSelectionCommandParser.java
+++ 
b/protocols/imap/src/main/java/org/apache/james/imap/decode/parser/AbstractSelectionCommandParser.java
@@ -35,9 +35,12 @@ import 
org.apache.james.imap.message.request.AbstractMailboxSelectionRequest;
 import 
org.apache.james.imap.message.request.AbstractMailboxSelectionRequest.ClientSpecifiedUidValidity;
 import org.apache.james.mailbox.MessageUid;
 
+import com.google.common.base.CharMatcher;
+
 public abstract class AbstractSelectionCommandParser extends 
AbstractImapCommandParser {
     private static final String CONDSTORE = 
ImapConstants.SUPPORTS_CONDSTORE.asString();
     private static final String QRESYNC = 
ImapConstants.SUPPORTS_QRESYNC.asString();
+    private static final CharMatcher NUMERIC = CharMatcher.inRange('0', '9');
 
     public AbstractSelectionCommandParser(ImapCommand command, 
StatusResponseFactory statusResponseFactory) {
         super(command, statusResponseFactory);
@@ -89,15 +92,18 @@ public abstract class AbstractSelectionCommandParser 
extends AbstractImapCommand
                        
                     // Consume the SP
                     request.consumeChar(' ');
-                    uidSet = request.parseUidRange();
-                    
-                    // Check for *
-                    checkUidRanges(uidSet, false);
+                    if (NUMERIC.matches(request.nextChar())) {
+                        uidSet = request.parseUidRange();
+                        // Check for *
+                        checkUidRanges(uidSet, false);
+                    }
                     
                     nc = request.nextChar();
-                    if (nc == ' ')  {
+                    if (nc == ' ') {
                         request.consumeChar(' ');
-                        
+                    }
+                    nc = request.nextChar();
+                    if (nc == '(') {
                         // This is enclosed in () so remove (
                         request.consumeChar('(');
                         knownSequenceSet = request.parseIdRange();
diff --git 
a/server/protocols/protocols-imap4/src/test/java/org/apache/james/imapserver/netty/IMAPServerTest.java
 
b/server/protocols/protocols-imap4/src/test/java/org/apache/james/imapserver/netty/IMAPServerTest.java
index e5d78ef..54ad3d6 100644
--- 
a/server/protocols/protocols-imap4/src/test/java/org/apache/james/imapserver/netty/IMAPServerTest.java
+++ 
b/server/protocols/protocols-imap4/src/test/java/org/apache/james/imapserver/netty/IMAPServerTest.java
@@ -1517,11 +1517,6 @@ class IMAPServerTest {
                 .hasSize(1);
         }
 
-        @Disabled("JAMES-3722 SELECT + QRESYNC did not comply with formal 
syntax: sequence match data can theorically" +
-            "be specified without known uids. CF:" +
-            "   select-param        =  \"QRESYNC\" SP \"(\" uidvalidity SP" +
-            "           mod-sequence-value [SP known-uids]" +
-            "           [SP seq-match-data]")
         @Test
         void 
selectShouldReturnDeletedMessagesWhenSequenceMatchDataAndNoKnownUid() throws 
Exception {
             inbox.delete(ImmutableList.of(MessageUid.MIN_VALUE), 
mailboxSession);

---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscr...@james.apache.org
For additional commands, e-mail: notifications-h...@james.apache.org

Reply via email to