(geronimo-mail) 04/07: GERONIMO-6898 - store.getDefaultFolder().list() returns empty when the server hierarchy delimiter is not '/'

[email protected] Sat, 18 Jul 2026 18:49:03 +0000
Newsgroups gmane.comp.java.geronimo.cvs
Message-ID <[email protected]>
This is an automated email from the ASF dual-hosted git repository.

rzo1 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/geronimo-mail.git

commit e4ab6c1fe983197c54367d19c840d4b0d2e07dac
Author: Richard Zowalla <[email protected]>
AuthorDate: Sat Jul 18 20:48:28 2026 +0200

    GERONIMO-6898 - store.getDefaultFolder().list() returns empty when the server hierarchy delimiter is not '/'
---
 .../geronimo/mail/store/imap/IMAPFolder.java       |  8 +++++--
 .../mail/store/imap/IMAPTckRegressionTest.java     | 26 ++++++++++++++++++++++
 geronimo-mail_2.1_tck/src/tck/geronimo.jtx         |  2 --
 3 files changed, 32 insertions(+), 4 deletions(-)

diff --git a/geronimo-mail_2.1_impl/geronimo-mail_2.1_provider/src/main/java/org/apache/geronimo/mail/store/imap/IMAPFolder.java b/geronimo-mail_2.1_impl/geronimo-mail_2.1_provider/src/main/java/org/apache/geronimo/mail/store/imap/IMAPFolder.java
index d94d6e8..62bebeb 100644
--- a/geronimo-mail_2.1_impl/geronimo-mail_2.1_provider/src/main/java/org/apache/geronimo/mail/store/imap/IMAPFolder.java
+++ b/geronimo-mail_2.1_impl/geronimo-mail_2.1_provider/src/main/java/org/apache/geronimo/mail/store/imap/IMAPFolder.java
@@ -1594,8 +1594,12 @@ public class IMAPFolder extends Folder implements UIDFolder, IMAPUntaggedRespons
      */
     protected synchronized Folder[] filterFolders(String pattern, boolean subscribed) throws MessagingException {
         IMAPConnection connection = getConnection();
-        // this is used to filter out our own folder from the search
-        String root = fullname + getSeparator();
+        // this is used to filter out our own folder from the search.
+        // NB:  for the root (default) folder the fullname is empty and the
+        // reference must be the empty string as well.  Using the hard-coded
+        // root separator (e.g. "/") as the reference does not match anything
+        // on servers using a different hierarchy delimiter (James uses '.').
+        String root = fullname.length() == 0 ? "" : fullname + getSeparator();
 
         List responses = null;
         try {
diff --git a/geronimo-mail_2.1_impl/geronimo-mail_2.1_provider/src/test/java/org/apache/geronimo/mail/store/imap/IMAPTckRegressionTest.java b/geronimo-mail_2.1_impl/geronimo-mail_2.1_provider/src/test/java/org/apache/geronimo/mail/store/imap/IMAPTckRegressionTest.java
index 57c11d8..6cb5727 100644
--- a/geronimo-mail_2.1_impl/geronimo-mail_2.1_provider/src/test/java/org/apache/geronimo/mail/store/imap/IMAPTckRegressionTest.java
+++ b/geronimo-mail_2.1_impl/geronimo-mail_2.1_provider/src/test/java/org/apache/geronimo/mail/store/imap/IMAPTckRegressionTest.java
@@ -93,6 +93,32 @@ public class IMAPTckRegressionTest extends AbstractProtocolTest {
         }
     }
 
+    /**
+     * Folder#list_Test/listSubscribed_Test: listing the default folder used to
+     * issue LIST / "%" (the hard-coded root separator as reference), which
+     * matches nothing on servers with a '.' hierarchy delimiter such as James.
+     * The reference for the root folder must be the empty string.
+     */
+    @Test
+    public void testDefaultFolderListIsNonEmpty() throws Exception {
+        start();
+        createMailboxWithMessage("test1");
+
+        final Store store = connect();
+        try {
+            final Folder[] folders = store.getDefaultFolder().list("%");
+            assertTrue(folders.length > 0, "default folder list(\"%\") must return at least INBOX");
+
+            // also exercise the LSUB flavour of the same code path
+            final Folder test1 = store.getDefaultFolder().getFolder("test1");
+            test1.setSubscribed(true);
+            final Folder[] subscribed = store.getDefaultFolder().listSubscribed("%");
+            assertTrue(subscribed.length > 0, "default folder listSubscribed(\"%\") must find the subscribed folder");
+        } finally {
+            store.close();
+        }
+    }
+
     /**
      * MimeMessage#getContentLanguage_Test: a message whose BODYSTRUCTURE
      * carries no language information used to trigger a NullPointerException;
diff --git a/geronimo-mail_2.1_tck/src/tck/geronimo.jtx b/geronimo-mail_2.1_tck/src/tck/geronimo.jtx
index 9a534c2..c00fe5a 100644
--- a/geronimo-mail_2.1_tck/src/tck/geronimo.jtx
+++ b/geronimo-mail_2.1_tck/src/tck/geronimo.jtx
@@ -44,8 +44,6 @@ javasoft/sqe/tests/jakarta/mail/event/FolderEvent/testlist.html#addMsgChangeList
 javasoft/sqe/tests/jakarta/mail/exception/testlist.html#folderNotFoundExp_Test
 javasoft/sqe/tests/jakarta/mail/exception/testlist.html#msgRemoveExp_Test
 javasoft/sqe/tests/jakarta/mail/Folder/testlist.html#getPermanentFlags_Test
-javasoft/sqe/tests/jakarta/mail/Folder/testlist.html#list_Test
-javasoft/sqe/tests/jakarta/mail/Folder/testlist.html#listSubscribed_Test
 javasoft/sqe/tests/jakarta/mail/internet/InternetAddress/testlist.html#unicode_Test
 javasoft/sqe/tests/jakarta/mail/internet/MimeBodyPart/testlist.html#attachFile_saveFile_Test
 javasoft/sqe/tests/jakarta/mail/internet/MimeBodyPart/testlist.html#isMimeType_Test