Author: norman
Date: Fri Apr 8 08:43:23 2011
New Revision: 1090160
URL: http://svn.apache.org/viewvc?rev=1090160&view=rev
Log:
Correctly parse STORE arguments which contains flags. See IMAP-281
Modified:
james/imap/trunk/message/src/main/java/org/apache/james/imap/decode/ImapRequestLineReader.java
james/imap/trunk/message/src/main/java/org/apache/james/imap/decode/parser/StoreCommandParser.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=1090160&r1=1090159&r2=1090160&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
Fri Apr 8 08:43:23 2011
@@ -481,7 +481,7 @@ public abstract class ImapRequestLineRea
}
/**
- * Reads a "flags" argument from the request.
+ * Reads a "flags-list" argument from the request.
*/
public Flags flagList()
throws DecodingException {
@@ -507,6 +507,21 @@ public abstract class ImapRequestLineRea
}
/**
+ * Reads a "flag" argument from the request.
+ */
+ public Flags flag()
+ throws DecodingException {
+ Flags flags = new Flags();
+ nextWordChar();
+
+ CharacterValidator validator = new NoopCharValidator();
+ String nextFlag = consumeWord(validator);
+ DecoderUtils.setFlag(nextFlag, flags);
+ return flags;
+ }
+
+
+ /**
* Reads an argument of type "number" from the request.
*/
public long number() throws DecodingException {
Modified:
james/imap/trunk/message/src/main/java/org/apache/james/imap/decode/parser/StoreCommandParser.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/message/src/main/java/org/apache/james/imap/decode/parser/StoreCommandParser.java?rev=1090160&r1=1090159&r2=1090160&view=diff
==============================================================================
---
james/imap/trunk/message/src/main/java/org/apache/james/imap/decode/parser/StoreCommandParser.java
(original)
+++
james/imap/trunk/message/src/main/java/org/apache/james/imap/decode/parser/StoreCommandParser.java
Fri Apr 8 08:43:23 2011
@@ -71,8 +71,25 @@ public class StoreCommandParser extends
throw new DecodingException(HumanReadableText.ILLEGAL_ARGUMENTS,
"Invalid Store Directive: '" + directive + "'");
}
-
- final Flags flags = request.flagList();
+
+ // Handle all kind of "store-att-flags"
+ // See IMAP-281
+ final Flags flags = new Flags();
+ if (request.nextWordChar() == '(') {
+ flags.add(request.flagList());
+ } else {
+ boolean moreFlags = true;
+ while (moreFlags) {
+ flags.add(request.flag());
+ try {
+ request.consumeChar(' ');
+ } catch (DecodingException e) {
+ // seems like no more flags were found
+ moreFlags = false;
+ }
+ }
+ }
+
request.eol();
final ImapMessage result = new StoreRequest(command, idSet, silent,
flags, useUids, tag, sign);
return result;
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]