Re: Bug in 1.1.2: Folder.search() alters Folder.mode (works with 1.1.1)

Boris Folgmann <[email protected]> Fri, 13 Nov 2009 15:24:08 +0100
Newsgroups gmane.comp.java.classpath.extensions.javamail
Message-ID <[email protected]>
Hi Chris,

Chris Burdess schrieb/wrote:
> The mode is only changed from a call to update(MailboxStatus,
> boolean). This can happen during various method calls, but not search
> (). Are you sure this is your complete code with respect to IMAPFolder?

Yes, I tried some even simpler constructions:

     public void modeBug() throws MessagingException, IOException
     {
	try {
	    store.connect();
	    Folder folder = store.getFolder("empty IMAP folder");
	    folder.open(Folder.READ_WRITE);
	    System.out.println("10 mode: " + folder.getMode());
	    folder.expunge();
	    System.out.println("20 mode: " + folder.getMode());
	    folder.search(remoteDsnTerm); // returns 0 msgs, as folder is empty
	    System.out.println("30 mode: " + folder.getMode());
	    folder.close(true);
	} finally {
	    store.close();
	}
     }

The output is:
10 mode: 2
20 mode: 2
30 mode: 1

I further investigated and found out that the mode change does not happen 
with every search term. Here's mine triggering the bug:

remoteDsnTerm = new AndTerm(new SearchTerm[] {
	    new OrTerm(new SearchTerm[] {
		new FromStringTerm("Mail Delivery Subsystem <MAILER-DAEMON@"),
		new FromStringTerm("Mail Delivery System <MAILER-DAEMON@"),
		new FromStringTerm("Mail Delivery Service <postmaster@")
	    }),
	    new RecipientTerm(Message.RecipientType.TO, new 
InternetAddress(toAddress)),
	    new HeaderTerm("content-type", "multipart/report; 
report-type=delivery-status;")
     });

1. The bug happens not if the complete OrTerm is removed.
2. The bug happens not if expunge() is not called before search().

I hope you find the problem.

cu,
	boris