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 no...@apache.org on 2011/04/10 15:22:31 UTC

svn commit: r1090796 - in /james/imap/trunk: message/src/main/java/org/apache/james/imap/decode/ImapRequestLineReader.java processor/src/main/java/org/apache/james/imap/processor/AbstractMailboxProcessor.java

Author: norman
Date: Sun Apr 10 13:22:31 2011
New Revision: 1090796

URL: http://svn.apache.org/viewvc?rev=1090796&view=rev
Log:
Correctly parse and handle "*" and "*:*" message ranges. See IMAP-289

Modified:
    james/imap/trunk/message/src/main/java/org/apache/james/imap/decode/ImapRequestLineReader.java
    james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/AbstractMailboxProcessor.java

Modified: james/imap/trunk/message/src/main/java/org/apache/james/imap/decode/ImapRequestLineReader.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/message/src/main/java/org/apache/james/imap/decode/ImapRequestLineReader.java?rev=1090796&r1=1090795&r2=1090796&view=diff
==============================================================================
--- james/imap/trunk/message/src/main/java/org/apache/james/imap/decode/ImapRequestLineReader.java (original)
+++ james/imap/trunk/message/src/main/java/org/apache/james/imap/decode/ImapRequestLineReader.java Sun Apr 10 13:22:31 2011
@@ -643,14 +643,24 @@ public abstract class ImapRequestLineRea
         int pos = range.indexOf(':');
         try {
             if (pos == -1) {
-                long value = parseUnsignedInteger(range);
-                return new IdRange(value);
+                
+                // Check if its a single "*" and so should return last message in mailbox. See IMAP-289
+                if (range.length() == 1 && range.charAt(0) == '*') {
+                    return new IdRange(Long.MAX_VALUE, Long.MAX_VALUE);
+                } else {
+                    long value = parseUnsignedInteger(range);
+                    return new IdRange(value);
+                }
             } else {
                 // Make sure we detect the low and high value
                 // See https://issues.apache.org/jira/browse/IMAP-212
                 long val1 = parseUnsignedInteger(range.substring(0, pos));
                 long val2 = parseUnsignedInteger(range.substring(pos + 1));
-                if (val1 <= val2) {
+                
+                // handle "*:*" ranges. See IMAP-289
+                if (val1 == Long.MAX_VALUE && val2 == Long.MAX_VALUE) {
+                    return new IdRange(Long.MAX_VALUE, Long.MAX_VALUE);
+                } else if (val1 <= val2) {
                     return new IdRange(val1, val2);
                 } else if(val1 == Long.MAX_VALUE) {
                     return new IdRange(Long.MIN_VALUE, val2);

Modified: james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/AbstractMailboxProcessor.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/AbstractMailboxProcessor.java?rev=1090796&r1=1090795&r2=1090796&view=diff
==============================================================================
--- james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/AbstractMailboxProcessor.java (original)
+++ james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/AbstractMailboxProcessor.java Sun Apr 10 13:22:31 2011
@@ -388,6 +388,12 @@ abstract public class AbstractMailboxPro
         long highVal = range.getHighVal();
       
         if (useUids == false) {
+            // Take care of "*" and "*:*" values by return the last message in the mailbox. See IMAP-289
+            if (lowVal == Long.MAX_VALUE && highVal == Long.MAX_VALUE) {
+                lowVal = selected.getLastUid();
+                highVal = lowVal;
+            }
+            
             if (lowVal != Long.MIN_VALUE) {
                 lowVal = selected.uid((int) lowVal);
                 if (lowVal == SelectedMailbox.NO_SUCH_MESSAGE)
@@ -398,6 +404,12 @@ abstract public class AbstractMailboxPro
                 if (highVal == SelectedMailbox.NO_SUCH_MESSAGE)
                     throw new MessageRangeException("No message found with msn " + highVal);
             }
+        } else {
+            // Take care of "*" and "*:*" values by return the last message in the mailbox. See IMAP-289
+            if (lowVal == Long.MAX_VALUE && highVal == Long.MAX_VALUE) {
+                lowVal = selected.getLastUid();
+                highVal = lowVal;
+            }
         }
         MessageRange mRange = MessageRange.range(lowVal, highVal);
         return mRange;



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