bug-mailutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [bug-mailutils] /usr/bin/mail segfaults when tab-completing after "c


From: Sergey Poznyakoff
Subject: Re: [bug-mailutils] /usr/bin/mail segfaults when tab-completing after "cd x"
Date: Sat, 22 Jul 2006 11:39:15 +0300

Daniel Kahn Gillmor <address@hidden> wrote:

> I'm using debian's mailutils version 0.6.94-1, and i found the
> following misbehavior.

Thanks for reporting. I have installed a fix in the CVS. Please find
enclosed the minimal patch.

> It's currently filed as debian bug 379156 [0],
> if you care to followup there.

No, I guess, I rather don't.

Thanks also for your mails regarding TLS/GSSAPI issues. Please, allow me
some time to answer these.

Regards,
Sergey

Index: mail/mailline.c
===================================================================
RCS file: /cvsroot/mailutils/mailutils/mail/mailline.c,v
retrieving revision 1.28
diff -p -u -r1.28 mailline.c
--- mail/mailline.c     23 Jan 2006 11:23:25 -0000      1.28
+++ mail/mailline.c     22 Jul 2006 08:05:02 -0000
@@ -335,9 +335,19 @@ command_compl (int argc, char **argv, in
   return rl_completion_matches (argv[argc-1], ml_command_generator);
 }
 
+/* Generate file list based on reference prefix TEXT, relative to PATH.
+   Remove PATHLEN leading characters from the returned names. Replace
+   them with REPL unless it is 0.
+
+   Select only those files that match given FLAGS (MU_FOLDER_ATTRIBUTE_*
+   constants).
+   
+   STATE is 0 for the first call, 1 otherwise.
+ */
 static char *
-file_generator (const char *text, int state, char *path, size_t pathlen,
-               char repl,
+file_generator (const char *text, int state,
+               char *path, size_t pathlen,
+               char repl, 
                int flags)
 {
   static mu_list_t list;
@@ -352,7 +362,12 @@ file_generator (const char *text, int st
       wcard = xmalloc (strlen (text) + 2);
       strcat (strcpy (wcard, text), "*");
 
-      mu_folder_create (&folder, path);
+      if (mu_folder_create (&folder, path))
+       {
+         free (wcard);
+         return NULL;
+       }
+      
       mu_folder_list (folder, path, wcard, 1, &list);
       free (wcard);
       mu_folder_destroy (&folder);
@@ -381,13 +396,17 @@ file_generator (const char *text, int st
       if (resp->type & flags)
        {
          char *ret;
-         if (repl)
+         if (pathlen)
            {
-             int len = strlen (resp->name + pathlen);
-             ret = xmalloc (len + 2);
-             ret[0] = repl;
-             memcpy (ret + 1, resp->name + pathlen, len);
-             ret[len+1] = 0;
+             size_t len = strlen (resp->name + pathlen);
+             char *ptr;
+             
+             ret = xmalloc (len + (repl ? 1 : 0) + 1);
+             ptr = ret;
+             if (repl)
+               *ptr++ = repl;
+             memcpy (ptr, resp->name + pathlen, len);
+             ptr[len] = 0;
            }
          else
            ret = xstrdup (resp->name);
@@ -483,10 +502,16 @@ dir_generator (const char *text, int sta
            }
          /* else FIXME! */
 
-       default:
+       case '/':
          path = strdup (text);
          pathlen = 0;
          repl = 0;
+         break;
+         
+       default:
+         path = strdup ("./");
+         pathlen = 2;
+         repl = 0;
        }
       
       ret = file_generator (text, state, path, pathlen, repl,
Index: mailbox/mutil.c
===================================================================
RCS file: /cvsroot/mailutils/mailutils/mailbox/mutil.c,v
retrieving revision 1.77
diff -p -u -r1.77 mutil.c
--- mailbox/mutil.c     27 Jun 2006 13:07:56 -0000      1.77
+++ mailbox/mutil.c     22 Jul 2006 08:05:05 -0000
@@ -1228,7 +1228,9 @@ mu_scheme_autodetect_p (const char *sche
       *path += MU_FILE_SCHEME_LEN;
       return 1;
     }
-  if (strncmp (MU_PATH_SCHEME, scheme, MU_PATH_SCHEME_LEN) == 0)
+  if (access (scheme, F_OK) == 0
+      /* FIXME: this can return true even if the folder is unreadable */
+      || strncmp (MU_PATH_SCHEME, scheme, MU_PATH_SCHEME_LEN) == 0)
     return 1;
   return 0;
 }
Index: mailbox/mutil.c
===================================================================
RCS file: /cvsroot/mailutils/mailutils/mailbox/mutil.c,v
retrieving revision 1.77
diff -p -u -r1.77 mutil.c
--- mailbox/mutil.c     27 Jun 2006 13:07:56 -0000      1.77
+++ mailbox/mutil.c     22 Jul 2006 08:05:05 -0000
@@ -1228,7 +1228,9 @@ mu_scheme_autodetect_p (const char *sche
       *path += MU_FILE_SCHEME_LEN;
       return 1;
     }
-  if (strncmp (MU_PATH_SCHEME, scheme, MU_PATH_SCHEME_LEN) == 0)
+  if (access (scheme, F_OK) == 0
+      /* FIXME: this can return true even if the folder is unreadable */
+      || strncmp (MU_PATH_SCHEME, scheme, MU_PATH_SCHEME_LEN) == 0)
     return 1;
   return 0;
 }




reply via email to

[Prev in Thread] Current Thread [Next in Thread]