[ 
https://issues.apache.org/jira/browse/JAMES-1375?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13209356#comment-13209356
 ] 

Oleg Zhurakousky commented on JAMES-1375:
-----------------------------------------

Thanks Eric

The problem is in how ImapRequestLineReader.consumeWord is invoked from 
ImapRequestLineReader.atom().
Currently you are invoking:

public String consumeWord(CharacterValidator validator)

However the stack originates from SearchComomandParser.addUntilParen(..) which 
clearly means that you want to consume the word up until you encounter closing 
paren, so you you should actually invoke:

private String consumeWord(CharacterValidator validator, boolean stripParen)

... with boolean value 'true', so the atom() method should look like this:

public String atom() throws DecodingException {
        return consumeWord(new ATOM_CHARValidator(), true);
}

And here is the passing test to include in SearchCommandParserNotTest (nothing 
else failed)

@Test
    public void testUserFlagsParsing() throws Exception {
        ImapRequestLineReader reader = new ImapRequestStreamLineReader(
                new ByteArrayInputStream("NOT (KEYWORD bar KEYWORD 
foo)".getBytes("US-ASCII")),
                new ByteArrayOutputStream());
        SearchKey key = parser.searchKey(null, reader, null, false);
        List<SearchKey> keys = key.getKeys().get(0).getKeys();
        assertEquals(2, keys.size());
        assertEquals("bar", keys.get(0).getValue());
        assertEquals("foo", keys.get(1).getValue());
    }

I'll try to set up the full dev environment and start James from it and 
integration test it but so far the problem seems to be straight forward.

                
> IMap server fails to search for mail using SearchTerms which contain USER 
> flags
> -------------------------------------------------------------------------------
>
>                 Key: JAMES-1375
>                 URL: https://issues.apache.org/jira/browse/JAMES-1375
>             Project: JAMES Server
>          Issue Type: Bug
>          Components: IMAPServer
>    Affects Versions: 3.0-beta3
>            Reporter: Oleg Zhurakousky
>            Priority: Critical
>
> The code below will fail
> {code}
> public void testWithSearchTerm() throws Exception {
>       Properties props = System.getProperties();
>       props.setProperty("mail.store.protocol", "imap");
>       props.setProperty("mail.debug", "true");
>       Session session = Session.getDefaultInstance(props);
>       URLName urlName = new URLName(
>                               
> "imap://oleg%40oleg-2.local:[email protected]/INBOX");
>       Store store = session.getStore(urlName);
>       if (!store.isConnected()) {
>               store.connect();
>               Folder folder = store.getFolder(urlName);
>               folder.open(2);
>               NotTerm notJunk = new NotTerm(new FlagTerm(new Flags("foo"), 
> true));
>               folder.search(notJunk);
>       }
> }
> {code}
> with 
> {code}
> Caused by: com.sun.mail.iap.BadCommandException: A4 BAD SEARCH failed. 
> Illegal arguments.
>       at com.sun.mail.iap.Protocol.handleResult(Protocol.java:346)
>       at 
> com.sun.mail.imap.protocol.IMAPProtocol.issueSearch(IMAPProtocol.java:1693)
>       at 
> com.sun.mail.imap.protocol.IMAPProtocol.search(IMAPProtocol.java:1599)
>       at 
> com.sun.mail.imap.protocol.IMAPProtocol.search(IMAPProtocol.java:1586)
>       at com.sun.mail.imap.IMAPFolder.search(IMAPFolder.java:1649)
> {code}
> However setting the user flag works fine and it can be seen in the incoming 
> message

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to