[PATCH] Add checks for new and tmp directories to mx_is_maildir()

"Kevin J. McCarthy" <[email protected]>
Newsgroups gmane.mail.mutt.devel
Message-ID <[email protected]>
From: Kevin McCarthy <[email protected]>

This function is used by mx_get_magic() to check if a path is a
maildir mailbox.  I believe it was only looking for "cur" to save on
stat calls.

However, this can cause misbehavior in some cases.  The browser won't
enter a (non-maildir) directory that contains only a subdirectory
"cur".  On the other other hand, mutt relies on the "tmp" and "new"
subdirectories existing or fails operations, such as append to
mailbox, or postponing mail.
---
Just going through some branches I'd accumulated over the  past few years.

I'm sure I don't need to ask for feedback, but this is a tradeoff of a
couple stat calls for correct behavior in some less common situations.
Thoughts?

 mh.c | 18 +++++++++++++++---
 1 file changed, 15 insertions(+), 3 deletions(-)

diff --git a/mh.c b/mh.c
index 45beb7b8..b048a791 100644
--- a/mh.c
+++ b/mh.c
@@ -2749,10 +2749,22 @@ int mx_is_maildir (const char *path)
   int rc = 0;
 
   tmp = mutt_buffer_pool_get ();
-  mutt_buffer_printf (tmp, "%s/cur", path);
-  if (stat (mutt_b2s (tmp), &st) == 0 && S_ISDIR (st.st_mode))
-    rc = 1;
 
+  mutt_buffer_printf (tmp, "%s/cur", path);
+  if (stat (mutt_b2s (tmp), &st) != 0 || !S_ISDIR (st.st_mode))
+    goto out;
+
+  mutt_buffer_printf (tmp, "%s/new", path);
+  if (stat (mutt_b2s (tmp), &st) != 0 || !S_ISDIR (st.st_mode))
+    goto out;
+
+  mutt_buffer_printf (tmp, "%s/tmp", path);
+  if (stat (mutt_b2s (tmp), &st) != 0 || !S_ISDIR (st.st_mode))
+    goto out;
+
+  rc = 1;
+
+out:
   mutt_buffer_pool_release (&tmp);
   return rc;
 }
-- 
2.52.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.