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]

Reply via email to