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: [email protected]
For additional commands, e-mail: [email protected]