changeset: 6502:40c47fcc9d17
user:      Kevin McCarthy <[email protected]>
date:      Sun Sep 06 07:40:06 2015 -0700
link:      http://dev.mutt.org/hg/mutt/rev/40c47fcc9d17

Fix use after free of ctx->last_tag.  (closes #3775)

When using imap to access gmail, tagging and saving messages to "all
mail" and pressing <sync-mailbox> can result in the call path:
  mx_check_mailbox()
    imap_check_mailbox()
      imap_cmd_finish()
        imap_expunge_mailbox()
          mx_update_tables()
followed by:
  mx_sync_mailbox()

The HEADER pointed to by ctx->last_tag will be removed and FREE'ed in
mx_update_tables(), but will subsequently be accessed in mx_sync_mailbox().

This patch simply sets ctx->last_tag=NULL if it is freed inside 
mx_update_tables().

Thanks to Peter Lekensteyn for the bug report and ASAN report.

changeset: 6503:c6a6b7d3b83d
user:      Kevin McCarthy <[email protected]>
date:      Sun Sep 06 07:41:36 2015 -0700
link:      http://dev.mutt.org/hg/mutt/rev/c6a6b7d3b83d

merge stable

diffs (truncated from 7075 to 950 lines):

diff -r f675e853af12 -r c6a6b7d3b83d alias.c
--- a/alias.c   Wed Sep 02 18:11:28 2015 -0700
+++ b/alias.c   Sun Sep 06 07:41:36 2015 -0700
@@ -256,7 +256,7 @@
   mutt_check_alias_name (tmp, buf, sizeof (buf));
   
 retry_name:
-  /* add a new alias */
+  /* L10N: prompt to add a new alias */
   if (mutt_get_field (_("Alias as: "), buf, sizeof (buf), 0) != 0 || !buf[0])
     return;
 
diff -r f675e853af12 -r c6a6b7d3b83d crypt-gpgme.c
--- a/crypt-gpgme.c     Wed Sep 02 18:11:28 2015 -0700
+++ b/crypt-gpgme.c     Sun Sep 06 07:41:36 2015 -0700
@@ -4678,6 +4678,10 @@
     if (is_smime)
     {
       prompt = _("S/MIME (s)ign, sign (a)s, (p)gp, (c)lear, or (o)ppenc mode 
off? ");
+      /* L10N: The 'f' is from "forget it", an old undocumented synonym of
+       * 'clear'.  Please use a corresponding letter in your language.
+       * Alternatively, you may duplicate the letter 'c' is translated to.
+       * This comment also applies to the five following letter sequences. */
       letters = _("sapfco");
       choices = "SapFCo";
     }
diff -r f675e853af12 -r c6a6b7d3b83d curs_main.c
--- a/curs_main.c       Wed Sep 02 18:11:28 2015 -0700
+++ b/curs_main.c       Sun Sep 06 07:41:36 2015 -0700
@@ -903,7 +903,7 @@
        else
        {
           char buf[STRING];
-          /* i18n: ask for a limit to apply */
+          /* L10N: ask for a limit to apply */
           snprintf (buf, sizeof(buf), _("Limit: %s"),Context->pattern);
            mutt_message ("%s", buf);
        }
diff -r f675e853af12 -r c6a6b7d3b83d doc/devel-notes.txt
--- a/doc/devel-notes.txt       Wed Sep 02 18:11:28 2015 -0700
+++ b/doc/devel-notes.txt       Sun Sep 06 07:41:36 2015 -0700
@@ -196,6 +196,10 @@
   from the times when this was an iso-8859-1 source code tree,
   please feel free to fix them.
 
+- prefix translator comments with L10N:
+  /* L10N: this is a translator comment */
+  puts(_("String to translate));
+
 Documentation
 -------------
 
diff -r f675e853af12 -r c6a6b7d3b83d imap/browse.c
--- a/imap/browse.c     Wed Sep 02 18:11:28 2015 -0700
+++ b/imap/browse.c     Sun Sep 06 07:41:36 2015 -0700
@@ -75,7 +75,7 @@
     char *ptr;
     imap_fix_path (idata, mx.mbox, mbox, sizeof (mbox));
     ptr = safe_strdup (mbox);
-    imap_utf7_encode (&ptr);
+    imap_utf_encode (idata, &ptr);
     mbox[sizeof (mbox) - 1] = '\0';
     strncpy (mbox, ptr, sizeof (mbox) - 1);
     FREE (&ptr);
@@ -400,11 +400,14 @@
   char tmp[LONG_STRING];
   char relpath[LONG_STRING];
   IMAP_MBOX mx;
+  IMAP_DATA* idata;
 
   if (imap_parse_path (state->folder, &mx))
     return;
+  if (!(idata = imap_conn_find (&(mx.account), 0)))
+    return;
 
-  imap_unmunge_mbox_name (folder);
+  imap_unmunge_mbox_name (idata, folder);
 
   if (state->entrylen + 1 == state->entrymax)
   {
diff -r f675e853af12 -r c6a6b7d3b83d imap/command.c
--- a/imap/command.c    Wed Sep 02 18:11:28 2015 -0700
+++ b/imap/command.c    Sun Sep 06 07:41:36 2015 -0700
@@ -51,6 +51,7 @@
 static void cmd_parse_myrights (IMAP_DATA* idata, const char* s);
 static void cmd_parse_search (IMAP_DATA* idata, const char* s);
 static void cmd_parse_status (IMAP_DATA* idata, char* s);
+static void cmd_parse_enabled (IMAP_DATA* idata, const char* s);
 
 static const char * const Capabilities[] = {
   "IMAP4",
@@ -65,6 +66,7 @@
   "LOGINDISABLED",
   "IDLE",
   "SASL-IR",
+  "ENABLE",
 
   NULL
 };
@@ -522,6 +524,8 @@
     cmd_parse_search (idata, s);
   else if (ascii_strncasecmp ("STATUS", s, 6) == 0)
     cmd_parse_status (idata, s);
+  else if (ascii_strncasecmp ("ENABLED", s, 7) == 0)
+    cmd_parse_enabled (idata, s);
   else if (ascii_strncasecmp ("BYE", s, 3) == 0)
   {
     dprint (2, (debugfile, "Handling BYE\n"));
@@ -728,7 +732,7 @@
   }
   else
   {
-    imap_unmunge_mbox_name (s);
+    imap_unmunge_mbox_name (idata, s);
     list->name = s;
   }
 
@@ -917,7 +921,7 @@
   {
     s = imap_next_word (mailbox);
     *(s - 1) = '\0';
-    imap_unmunge_mbox_name (mailbox);
+    imap_unmunge_mbox_name (idata, mailbox);
   }
 
   status = imap_mboxcache_get (idata, mailbox, 1);
@@ -1022,3 +1026,16 @@
     FREE (&mx.mbox);
   }
 }
+
+/* cmd_parse_enabled: record what the server has enabled */
+static void cmd_parse_enabled (IMAP_DATA* idata, const char* s)
+{
+  dprint (2, (debugfile, "Handling ENABLED\n"));
+
+  while ((s = imap_next_word ((char*)s)) && *s != '\0')
+  {
+    if (ascii_strncasecmp(s, "UTF8=ACCEPT", 11) == 0 ||
+        ascii_strncasecmp(s, "UTF8=ONLY", 9) == 0)
+      idata->unicode = 1;
+  }
+}
diff -r f675e853af12 -r c6a6b7d3b83d imap/imap.c
--- a/imap/imap.c       Wed Sep 02 18:11:28 2015 -0700
+++ b/imap/imap.c       Sun Sep 06 07:41:36 2015 -0700
@@ -92,7 +92,7 @@
     return 0;
   }
 
-  imap_munge_mbox_name (mbox, sizeof (mbox), mailbox);
+  imap_munge_mbox_name (idata, mbox, sizeof (mbox), mailbox);
 
   if (mutt_bit_isset (idata->capabilities, IMAP4REV1))
     snprintf (buf, sizeof (buf), "STATUS %s (UIDVALIDITY)", mbox);
@@ -117,7 +117,7 @@
 {
   char buf[LONG_STRING], mbox[LONG_STRING];
 
-  imap_munge_mbox_name (mbox, sizeof (mbox), mailbox);
+  imap_munge_mbox_name (idata, mbox, sizeof (mbox), mailbox);
   snprintf (buf, sizeof (buf), "CREATE %s", mbox);
 
   if (imap_exec (idata, buf, 0) != 0)
@@ -135,8 +135,8 @@
   char newmbox[LONG_STRING];
   char buf[LONG_STRING];
 
-  imap_munge_mbox_name (oldmbox, sizeof (oldmbox), mx->mbox);
-  imap_munge_mbox_name (newmbox, sizeof (newmbox), newname);
+  imap_munge_mbox_name (idata, oldmbox, sizeof (oldmbox), mx->mbox);
+  imap_munge_mbox_name (idata, newmbox, sizeof (newmbox), newname);
 
   snprintf (buf, sizeof (buf), "RENAME %s %s", oldmbox, newmbox);
 
@@ -162,7 +162,7 @@
     idata = ctx->data;
   }
 
-  imap_munge_mbox_name (mbox, sizeof (mbox), mx.mbox);
+  imap_munge_mbox_name (idata, mbox, sizeof (mbox), mx.mbox);
   snprintf (buf, sizeof (buf), "DELETE %s", mbox);
 
   if (imap_exec ((IMAP_DATA*) idata, buf, 0) != 0)
@@ -386,6 +386,9 @@
   {
     /* capabilities may have changed */
     imap_exec (idata, "CAPABILITY", IMAP_CMD_QUEUE);
+    /* enable RFC6855, if the server supports that */
+    if (mutt_bit_isset (idata->capabilities, ENABLE))
+      imap_exec (idata, "ENABLE UTF8=ACCEPT", IMAP_CMD_QUEUE);
     /* get root delimiter, '/' as default */
     idata->delim = '/';
     imap_exec (idata, "LIST \"\" \"\"", IMAP_CMD_QUEUE);
@@ -596,7 +599,7 @@
   idata->newMailCount = 0;
 
   mutt_message (_("Selecting %s..."), idata->mailbox);
-  imap_munge_mbox_name (buf, sizeof(buf), idata->mailbox);
+  imap_munge_mbox_name (idata, buf, sizeof(buf), idata->mailbox);
 
   /* pipeline ACL test */
   if (mutt_bit_isset (idata->capabilities, ACL))
@@ -1521,7 +1524,7 @@
     if (!lastdata)
       lastdata = idata;
 
-    imap_munge_mbox_name (munged, sizeof (munged), name);
+    imap_munge_mbox_name (idata, munged, sizeof (munged), name);
     snprintf (command, sizeof (command),
              "STATUS %s (UIDNEXT UIDVALIDITY UNSEEN RECENT)", munged);
 
@@ -1569,9 +1572,9 @@
   else if (mutt_bit_isset(idata->capabilities,IMAP4REV1) ||
           mutt_bit_isset(idata->capabilities,STATUS))
   {
-    imap_munge_mbox_name (mbox, sizeof(mbox), buf);
+    imap_munge_mbox_name (idata, mbox, sizeof(mbox), buf);
     snprintf (buf, sizeof (buf), "STATUS %s (%s)", mbox, "MESSAGES");
-    imap_unmunge_mbox_name (mbox);
+    imap_unmunge_mbox_name (idata, mbox);
   }
   else
     /* Server does not support STATUS, and this is not the current mailbox.
@@ -1851,14 +1854,14 @@
     mutt_message (_("Subscribing to %s..."), buf);
   else
     mutt_message (_("Unsubscribing from %s..."), buf);
-  imap_munge_mbox_name (mbox, sizeof(mbox), buf);
+  imap_munge_mbox_name (idata, mbox, sizeof(mbox), buf);
 
   snprintf (buf, sizeof (buf), "%sSUBSCRIBE %s", subscribe ? "" : "UN", mbox);
 
   if (imap_exec (idata, buf, 0) < 0)
     goto fail;
 
-  imap_unmunge_mbox_name(mx.mbox);
+  imap_unmunge_mbox_name(idata, mx.mbox);
   if (subscribe)
     mutt_message (_("Subscribed to %s"), mx.mbox);
   else
diff -r f675e853af12 -r c6a6b7d3b83d imap/imap_private.h
--- a/imap/imap_private.h       Wed Sep 02 18:11:28 2015 -0700
+++ b/imap/imap_private.h       Sun Sep 06 07:41:36 2015 -0700
@@ -115,6 +115,7 @@
   LOGINDISABLED,               /*           LOGINDISABLED */
   IDLE,                         /* RFC 2177: IDLE */
   SASL_IR,                      /* SASL initial response draft */
+  ENABLE,                       /* RFC 5161 */
 
   CAPMAX
 };
@@ -144,7 +145,7 @@
 typedef struct
 {
   char* name;
-  
+
   char delim;
   /* if we end up storing a lot of these we could turn this into a bitfield */
   unsigned char noselect;
@@ -186,6 +187,10 @@
   char* buf;
   unsigned int blen;
   
+  /* If nonzero, we can send UTF-8, and the server will use UTF8 rather
+   * than mUTF7 */
+  int unicode;
+
   /* if set, the response parser will store results for complicated commands
    * here. */
   IMAP_COMMAND_TYPE cmdtype;
@@ -289,13 +294,13 @@
 void imap_qualify_path (char *dest, size_t len, IMAP_MBOX *mx, char* path);
 void imap_quote_string (char* dest, size_t slen, const char* src);
 void imap_unquote_string (char* s);
-void imap_munge_mbox_name (char *dest, size_t dlen, const char *src);
-void imap_unmunge_mbox_name (char *s);
+void imap_munge_mbox_name (IMAP_DATA *idata, char *dest, size_t dlen, const 
char *src);
+void imap_unmunge_mbox_name (IMAP_DATA *idata, char *s);
 int imap_wordcasecmp(const char *a, const char *b);
 
 /* utf7.c */
-void imap_utf7_encode (char **s);
-void imap_utf7_decode (char **s);
+void imap_utf_encode (IMAP_DATA *idata, char **s);
+void imap_utf_decode (IMAP_DATA *idata, char **s);
 
 #if USE_HCACHE
 /* typedef size_t (*hcache_keylen_t)(const char* fn); */
diff -r f675e853af12 -r c6a6b7d3b83d imap/message.c
--- a/imap/message.c    Wed Sep 02 18:11:28 2015 -0700
+++ b/imap/message.c    Sun Sep 06 07:41:36 2015 -0700
@@ -642,7 +642,7 @@
   mutt_progress_init (&progressbar, _("Uploading message..."),
                      M_PROGRESS_SIZE, NetInc, len);
 
-  imap_munge_mbox_name (mbox, sizeof (mbox), mailbox);
+  imap_munge_mbox_name (idata, mbox, sizeof (mbox), mailbox);
   imap_make_date (internaldate, msg->received);
 
   imap_flags[0] = imap_flags[1] = 0;
@@ -773,7 +773,7 @@
   imap_fix_path (idata, mx.mbox, mbox, sizeof (mbox));
   if (!*mbox)
     strfcpy (mbox, "INBOX", sizeof (mbox));
-  imap_munge_mbox_name (mmbox, sizeof (mmbox), mbox);
+  imap_munge_mbox_name (idata, mmbox, sizeof (mmbox), mbox);
 
   /* loop in case of TRYCREATE */
   do
diff -r f675e853af12 -r c6a6b7d3b83d imap/utf7.c
--- a/imap/utf7.c       Wed Sep 02 18:11:28 2015 -0700
+++ b/imap/utf7.c       Sun Sep 06 07:41:36 2015 -0700
@@ -252,30 +252,40 @@
   return 0;
 }
 
-void imap_utf7_encode (char **s)
+void imap_utf_encode (IMAP_DATA *idata, char **s)
 {
   if (Charset)
   {
     char *t = safe_strdup (*s);
-    if (!mutt_convert_string (&t, Charset, "utf-8", 0))
+    if (t && !mutt_convert_string (&t, Charset, "utf-8", 0))
     {
-      char *u7 = utf8_to_utf7 (t, strlen (t), NULL, 0);
       FREE (s);                /* __FREE_CHECKED__ */
-      *s = u7;
+      if (idata->unicode)
+        *s = safe_strdup (t);
+      else
+        *s = utf8_to_utf7 (t, strlen (t), NULL, 0);
     }
     FREE (&t);
   }
 }
 
-void imap_utf7_decode (char **s)
+void imap_utf_decode (IMAP_DATA *idata, char **s)
 {
+  char *t;
+
   if (Charset)
   {
-    char *t = utf7_to_utf8 (*s, strlen (*s), 0, 0);
+    if (idata->unicode)
+      t = safe_strdup (*s);
+    else
+      t = utf7_to_utf8 (*s, strlen (*s), 0, 0);
+
     if (t && !mutt_convert_string (&t, "utf-8", Charset, 0))
     {
       FREE (s);                /* __FREE_CHECKED__ */
       *s = t;
     }
+    else
+      FREE (&t);
   }
 }
diff -r f675e853af12 -r c6a6b7d3b83d imap/util.c
--- a/imap/util.c       Wed Sep 02 18:11:28 2015 -0700
+++ b/imap/util.c       Sun Sep 06 07:41:36 2015 -0700
@@ -673,23 +673,24 @@
   *d = '\0';
 }
 
+
 /*
  * Quoting and UTF-7 conversion
  */
 
-void imap_munge_mbox_name (char *dest, size_t dlen, const char *src)
+void imap_munge_mbox_name (IMAP_DATA *idata, char *dest, size_t dlen, const 
char *src)
 {
   char *buf;
 
   buf = safe_strdup (src);
-  imap_utf7_encode (&buf);
+  imap_utf_encode (idata, &buf);
 
   imap_quote_string (dest, dlen, buf);
 
   FREE (&buf);
 }
 
-void imap_unmunge_mbox_name (char *s)
+void imap_unmunge_mbox_name (IMAP_DATA *idata, char *s)
 {
   char *buf;
 
@@ -698,7 +699,7 @@
   buf = safe_strdup (s);
   if (buf)
   {
-    imap_utf7_decode (&buf);
+    imap_utf_decode (idata, &buf);
     strncpy (s, buf, strlen (s));
   }
 
diff -r f675e853af12 -r c6a6b7d3b83d mx.c
--- a/mx.c      Wed Sep 02 18:11:28 2015 -0700
+++ b/mx.c      Sun Sep 06 07:41:36 2015 -0700
@@ -1058,6 +1058,13 @@
        hash_delete (ctx->subj_hash, ctx->hdrs[i]->env->real_subj, 
ctx->hdrs[i], NULL);
       if (ctx->id_hash && ctx->hdrs[i]->env->message_id)
        hash_delete (ctx->id_hash, ctx->hdrs[i]->env->message_id, ctx->hdrs[i], 
NULL);
+      /* The path mx_check_mailbox() -> imap_check_mailbox() ->
+       *          imap_expunge_mailbox() -> mx_update_tables()
+       * can occur before a call to mx_sync_mailbox(), resulting in
+       * last_tag being stale if it's not reset here.
+       */
+      if (ctx->last_tag == ctx->hdrs[i])
+        ctx->last_tag = NULL;
       mutt_free_header (&ctx->hdrs[i]);
     }
   }
diff -r f675e853af12 -r c6a6b7d3b83d pgp.c
--- a/pgp.c     Wed Sep 02 18:11:28 2015 -0700
+++ b/pgp.c     Sun Sep 06 07:41:36 2015 -0700
@@ -1682,6 +1682,10 @@
           _("PGP (s)ign, sign (a)s, %s format, (c)lear, or (o)ppenc mode off? 
"),
           (msg->security & INLINE) ? _("PGP/M(i)ME") : _("(i)nline"));
       prompt = promptbuf;
+      /* L10N: The 'f' is from "forget it", an old undocumented synonym of
+       * 'clear'.  Please use a corresponding letter in your language.
+       * Alternatively, you may duplicate the letter 'c' is translated to.
+       * This comment also applies to the five following letter sequences. */
       letters = _("safcoi");
       choices = "SaFCoi";
     }
diff -r f675e853af12 -r c6a6b7d3b83d po/Makefile.in.in
--- a/po/Makefile.in.in Wed Sep 02 18:11:28 2015 -0700
+++ b/po/Makefile.in.in Sun Sep 06 07:41:36 2015 -0700
@@ -91,11 +91,11 @@
 $(PACKAGE).pot: $(POTFILES) $(BUILT_POTFILES) $(srcdir)/POTFILES.in
        rm -f $(PACKAGE).pot $(PACKAGE).po
        $(XGETTEXT) --default-domain=$(PACKAGE) --directory=$(top_srcdir) \
-         --add-comments --keyword=_ --keyword=N_ \
+         --add-comments=L10N --keyword=_ --keyword=N_ \
          --files-from=$(srcdir)/POTFILES.in \
        && \
        $(XGETTEXT) --default-domain=$(PACKAGE) \
-         --add-comments --keyword=_ --keyword=N_ \
+         --add-comments=L10N --keyword=_ --keyword=N_ \
          --join $(BUILT_POTFILES) \
        && test ! -f $(PACKAGE).po \
           || ( rm -f $(PACKAGE).pot \
diff -r f675e853af12 -r c6a6b7d3b83d po/da.po
--- a/po/da.po  Wed Sep 02 18:11:28 2015 -0700
+++ b/po/da.po  Sun Sep 06 07:41:36 2015 -0700
@@ -1,23 +1,23 @@
 # Danish messages for the mail user agent Mutt.
 # This file is distributed under the same license as the Mutt package.
-# Byrial Jensen <[email protected]>, Morten Bo Johansen <mojo@mbjnet>, 2000
+# Byrial Jensen <[email protected]>, Morten Bo Johansen <[email protected]>, 2000
 msgid ""
 msgstr ""
-"Project-Id-Version: Mutt 1.5.8i\n"
+"Project-Id-Version: Mutt 1.5.23\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-08-30 10:25-0700\n"
-"PO-Revision-Date: 2005-03-13 17:22+0100\n"
-"Last-Translator: Morten Bo Johansen <[email protected]>\n"
-"Language-Team: Danish <[email protected]>\n"
+"POT-Creation-Date: 2014-03-12 09:18-0700\n"
+"PO-Revision-Date: 2015-08-25 17:48+0200\n"
+"Last-Translator: Morten Bo Johansen <[email protected]>\n"
+"Language-Team: Danish <[email protected]>\n"
 "Language: da\n"
 "MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
 #: account.c:163
 #, c-format
 msgid "Username at %s: "
-msgstr "Brugernavn på %s: "
+msgstr "Brugernavn på %s: "
 
 #: account.c:224
 #, c-format
@@ -29,24 +29,24 @@
 msgid "Exit"
 msgstr "Tilbage"
 
-#: addrbook.c:38 curs_main.c:483 pager.c:1538 postpone.c:42
+#: addrbook.c:38 curs_main.c:406 pager.c:1538 postpone.c:42
 msgid "Del"
 msgstr "Slet"
 
-#: addrbook.c:39 curs_main.c:484 postpone.c:43
+#: addrbook.c:39 curs_main.c:407 postpone.c:43
 msgid "Undel"
 msgstr "Behold"
 
 #: addrbook.c:40
 msgid "Select"
-msgstr "Vælg"
+msgstr "Vælg"
 
 #. __STRCAT_CHECKED__
-#: addrbook.c:41 browser.c:49 compose.c:96 crypt-gpgme.c:3989 curs_main.c:489
-#: mutt_ssl.c:1045 mutt_ssl_gnutls.c:1003 pager.c:1630 pgpkey.c:522
+#: addrbook.c:41 browser.c:49 compose.c:96 crypt-gpgme.c:3866 curs_main.c:412
+#: mutt_ssl.c:1034 mutt_ssl_gnutls.c:904 pager.c:1630 pgpkey.c:522
 #: postpone.c:44 query.c:53 recvattach.c:57 smime.c:425
 msgid "Help"
-msgstr "Hjælp"
+msgstr "Hjælp"
 
 #: addrbook.c:145
 msgid "You have no aliases!"
@@ -59,7 +59,7 @@
 #. add a new alias
 #: alias.c:260
 msgid "Alias as: "
-msgstr "Vælg et alias: "
+msgstr "Vælg et alias: "
 
 #: alias.c:266
 msgid "You already have an alias defined with that name!"
@@ -67,7 +67,7 @@
 
 #: alias.c:272
 msgid "Warning: This alias name may not work.  Fix it?"
-msgstr "Advarsel: Dette navn for alias vil måske ikke virke. Ret det?"
+msgstr "Advarsel: Dette navn for alias vil måske ikke virke. Ret det?"
 
 #: alias.c:297
 msgid "Address: "
@@ -93,46 +93,44 @@
 msgstr "Gem i fil: "
 
 #: alias.c:361
-#, fuzzy
 msgid "Error reading alias file"
-msgstr "Fejl ved visning af fil."
+msgstr "Fejl ved læsning af alias-fil"
 
 #: alias.c:383
 msgid "Alias added."
-msgstr "Adresse tilføjet."
+msgstr "Adresse tilføjet."
 
 #: alias.c:391
-#, fuzzy
 msgid "Error seeking in alias file"
-msgstr "Fejl ved visning af fil."
+msgstr "Fejl ved søgning i alias-fil"
 
 #: attach.c:113 attach.c:245 attach.c:400 attach.c:925
 msgid "Can't match nametemplate, continue?"
-msgstr "Kan ikke matche navneskabelon, fortsæt?"
+msgstr "Kan ikke matche navneskabelon, fortsæt?"
 
 #. For now, editing requires a file, no piping
 #: attach.c:126
 #, c-format
 msgid "Mailcap compose entry requires %%s"
-msgstr "Brug af \"compose\" i mailcap-fil kræver %%s."
-
-#: attach.c:134 attach.c:266 commands.c:223 compose.c:1195 curs_lib.c:182
-#: curs_lib.c:555
+msgstr "Brug af \"compose\" i mailcap-fil kræver %%s"
+
+#: attach.c:134 attach.c:266 commands.c:223 compose.c:1175 curs_lib.c:180
+#: curs_lib.c:551
 #, c-format
 msgid "Error running \"%s\"!"
-msgstr "Fejl ved kørsel af \"%s\"!"
+msgstr "Fejl ved kørsel af \"%s\"!"
 
 #: attach.c:144
 msgid "Failure to open file to parse headers."
-msgstr "Kan ikke åbne fil for at analysere brevhovedet."
+msgstr "Kan ikke åbne fil for at analysere brevhovedet."
 
 #: attach.c:175
 msgid "Failure to open file to strip headers."
-msgstr "Kan ikke åbne fil for at fjerne brevhovedet."
+msgstr "Kan ikke åbne fil for at fjerne brevhovedet."
 
 #: attach.c:184
 msgid "Failure to rename file."
-msgstr "Omdøbning af fil slog fejl."
+msgstr "Omdøbning af fil slog fejl."
 
 #: attach.c:197
 #, c-format
@@ -143,12 +141,12 @@
 #: attach.c:258
 #, c-format
 msgid "Mailcap Edit entry requires %%s"
-msgstr "Brug af \"edit\" i mailcap-fil kræver %%s."
+msgstr "Brug af \"edit\" i mailcap-fil kræver %%s"
 
 #: attach.c:280
 #, c-format
 msgid "No mailcap edit entry for %s"
-msgstr "Ingen \"edit\"-regel for %s i mailcap-fil."
+msgstr "Ingen \"edit\"-regel for %s i mailcap-fil"
 
 #: attach.c:366
 msgid "No matching mailcap entry found.  Viewing as text."
@@ -160,30 +158,30 @@
 
 #: attach.c:469
 msgid "Cannot create filter"
-msgstr "Kan ikke oprette filter."
+msgstr "Kan ikke oprette filter"
 
 #: attach.c:477
 #, c-format
 msgid "---Command: %-20.20s Description: %s"
-msgstr ""
+msgstr "---Kommando: %-20.20s Beskrivelse: %s"
 
 #: attach.c:481
 #, c-format
 msgid "---Command: %-30.30s Attachment: %s"
-msgstr ""
+msgstr "---Kommando: %-30.30s Bilag: %s"
 
 #: attach.c:558
-#, fuzzy, c-format
+#, c-format
 msgid "---Attachment: %s: %s"
-msgstr "-- MIME-dele"
+msgstr "---Bilag: %s: %s"
 
 #: attach.c:561
-#, fuzzy, c-format
+#, c-format
 msgid "---Attachment: %s"
-msgstr "-- MIME-dele"
-
-#: attach.c:631 attach.c:663 attach.c:958 attach.c:1016 handler.c:1362
-#: pgpkey.c:571 pgpkey.c:760
+msgstr "---Bilag: %s"
+
+#: attach.c:631 attach.c:663 attach.c:958 attach.c:1016 handler.c:1360
+#: pgpkey.c:570 pgpkey.c:759
 msgid "Can't create filter"
 msgstr "Kan ikke oprette filter"
 
@@ -225,28 +223,27 @@
 
 #: browser.c:562
 msgid "Can't attach a directory!"
-msgstr "Kan ikke vedlægge et filkatalog!"
+msgstr "Kan ikke vedlægge et filkatalog!"
 
 #: browser.c:701 browser.c:1123 browser.c:1221
 msgid "No files match the file mask"
-msgstr "Ingen filer passer til filmasken."
+msgstr "Ingen filer passer til filmasken"
 
 #: browser.c:905
 msgid "Create is only supported for IMAP mailboxes"
-msgstr "Oprettelse er kun understøttet for IMAP-brevbakker"
+msgstr "Oprettelse er kun understøttet for IMAP-brevbakker"
 
 #: browser.c:929
 msgid "Rename is only supported for IMAP mailboxes"
-msgstr "Omdøbning er kun understøttet for IMAP-brevbakker"
+msgstr "Omdøbning er kun understøttet for IMAP-brevbakker"
 
 #: browser.c:952
 msgid "Delete is only supported for IMAP mailboxes"
-msgstr "Sletning er kun understøttet for IMAP-brevbakker"
+msgstr "Sletning er kun understøttet for IMAP-brevbakker"
 
 #: browser.c:962
-#, fuzzy
 msgid "Cannot delete root folder"
-msgstr "Kan ikke oprette filter."
+msgstr "Kan ikke slette rodkatalog"
 
 #: browser.c:965
 #, c-format
@@ -267,7 +264,7 @@
 
 #: browser.c:1043 browser.c:1116
 msgid "Error scanning directory."
-msgstr "Fejl ved indlæsning af filkatalog."
+msgstr "Fejl ved indlæsning af filkatalog."
 
 #: browser.c:1067
 msgid "File Mask: "
@@ -291,74 +288,74 @@
 
 #: browser.c:1239
 msgid "Can't view a directory"
-msgstr "Filkataloger kan ikke vises."
+msgstr "Filkataloger kan ikke vises"
 
 #: browser.c:1256
 msgid "Error trying to view file"
-msgstr "Fejl ved visning af fil."
-
-#: buffy.c:504
+msgstr "Fejl ved visning af fil"
+
+#: buffy.c:487
 msgid "New mail in "
 msgstr "Ny post i "
 
-#: color.c:327
+#: color.c:326
 #, c-format
 msgid "%s: color not supported by term"
-msgstr "%s: farve er ikke understøttet af terminal."
-
-#: color.c:333
+msgstr "%s: farve er ikke understøttet af terminal"
+
+#: color.c:332
 #, c-format
 msgid "%s: no such color"
-msgstr "%s: ukendt farve."
-
-#: color.c:379 color.c:585 color.c:596
+msgstr "%s: ukendt farve"
+
+#: color.c:378 color.c:584 color.c:595
 #, c-format
 msgid "%s: no such object"
-msgstr "%s: ukendt objekt."
-
-#: color.c:392
-#, fuzzy, c-format
+msgstr "%s: ukendt objekt"
+
+#: color.c:391
+#, c-format
 msgid "%s: command valid only for index, body, header objects"
-msgstr "%s: kommandoen kan kun bruges på et indeks-objekt."
-
-#: color.c:400
+msgstr "%s: kommandoen kan kun bruges på index-, body- og header-objekter"
+
+#: color.c:399
 #, c-format
 msgid "%s: too few arguments"
-msgstr "%s: for få parametre."
-
-#: color.c:573
+msgstr "%s: for få parametre"
+
+#: color.c:572
 msgid "Missing arguments."
 msgstr "Manglende parameter."
 
-#: color.c:612 color.c:623
+#: color.c:611 color.c:622
 msgid "color: too few arguments"
-msgstr "color: for få parametre."
-
-#: color.c:646
+msgstr "color: for få parametre"
+
+#: color.c:645
 msgid "mono: too few arguments"
-msgstr "mono: for få parametre."
-
-#: color.c:666
+msgstr "mono: for få parametre"
+
+#: color.c:665
 #, c-format
 msgid "%s: no such attribute"
 msgstr "%s: ukendt attribut"
 
-#: color.c:706 hook.c:69 hook.c:77 keymap.c:908
+#: color.c:705 hook.c:69 hook.c:77 keymap.c:906
 msgid "too few arguments"
-msgstr "for få parametre."
-
-#: color.c:715 hook.c:83
+msgstr "for få parametre"
+
+#: color.c:714 hook.c:83
 msgid "too many arguments"
-msgstr "for mange parametre."
-
-#: color.c:731
+msgstr "for mange parametre"
+
+#: color.c:730
 msgid "default colors not supported"
-msgstr "standard-farver er ikke understøttet."
+msgstr "standard-farver er ikke understøttet"
 
 #. find out whether or not the verify signature
 #: commands.c:90
 msgid "Verify PGP signature?"
-msgstr "Kontrollér PGP-underskrift?"
+msgstr "Kontrollér PGP-underskrift?"
 
 #: commands.c:115 mbox.c:786
 msgid "Could not create temporary file!"
@@ -366,11 +363,11 @@
 
 #: commands.c:128
 msgid "Cannot create display filter"
-msgstr "Kan ikke oprette fremvisningsfilter."
+msgstr "Kan ikke oprette fremvisningsfilter"
 
 #: commands.c:152
 msgid "Could not copy message"
-msgstr "Kunne ikke kopiere brevet."
+msgstr "Kunne ikke kopiere brevet"
 
 #: commands.c:189
 msgid "S/MIME signature successfully verified."
@@ -378,7 +375,7 @@
 
 #: commands.c:191
 msgid "S/MIME certificate owner does not match sender."
-msgstr "Der er ikke sammenfald mellem ejer af S/MIME-certifikat og afsender"
+msgstr "Der er ikke sammenfald mellem ejer af S/MIME-certifikat og afsender."
 
 #: commands.c:194 commands.c:205
 msgid "Warning: Part of this message has not been signed."
@@ -400,9 +397,9 @@
 msgid "Command: "
 msgstr "Kommando: "
 
-#: commands.c:256 commands.c:266 recvcmd.c:148 recvcmd.c:161
-msgid "Warning: message contains no From: header"
-msgstr ""
+#: commands.c:256
+msgid "Warning: message has no From: header"
+msgstr "Advarsel: brevet har ingen From:-linje i brevhoved"
 
 #: commands.c:274 recvcmd.c:171
 msgid "Bounce message to: "
@@ -453,11 +450,11 @@
 
 #: commands.c:493
 msgid "Pipe to command: "
-msgstr "Overfør til kommando: "
+msgstr "Overfør til kommando: "
 
 #: commands.c:510
 msgid "No printing command has been defined."
-msgstr "Ingen udskrivningskommando er defineret"
+msgstr "Ingen udskrivningskommando er defineret."
 
 #: commands.c:515
 msgid "Print message?"
@@ -488,7 +485,7 @@
 "Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore/"
 "s(p)am?: "
 msgstr ""
-"Omv-sort. (d)ato/(f)ra/(a)nk./(e)mne/t(i)l/(t)råd/(u)sort/(s)tr./s(c)ore/"
+"Omv-sort. (d)ato/(f)ra/(a)nk./(e)mne/t(i)l/(t)råd/(u)sort/(s)tr./s(c)ore/"
 "s(p)am?: "
 
 #: commands.c:537
@@ -496,7 +493,7 @@
 "Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore/"
 "s(p)am?: "
 msgstr ""
-"Sortér (d)ato/(f)ra/(a)nk./(e)mne/t(i)l/(t)råd/(u)sort/(s)tr./s(c)ore/"
+"Sortér (d)ato/(f)ra/(a)nk./(e)mne/t(i)l/(t)råd/(u)sort/(s)tr./s(c)ore/"
 "s(p)am?:"
 
 #: commands.c:538
@@ -515,17 +512,17 @@
 #: commands.c:742
 #, c-format
 msgid "Decode-copy%s to mailbox"
-msgstr "Afkod-kopiér%s til brevbakke"
+msgstr "Afkod-kopiér%s til brevbakke"
 
 #: commands.c:743
 #, c-format
 msgid "Decrypt-save%s to mailbox"
-msgstr "Dekryptér-gem%s i brevbakke"
+msgstr "Dekryptér-gem%s i brevbakke"
 
 #: commands.c:744
 #, c-format
 msgid "Decrypt-copy%s to mailbox"
-msgstr "Dekryptér-kopiér%s til brevbakke"
+msgstr "Dekryptér-kopiér%s til brevbakke"
 
 #: commands.c:745
 #, c-format
@@ -535,7 +532,7 @@
 #: commands.c:745
 #, c-format
 msgid "Copy%s to mailbox"
-msgstr "Kopiér%s til brevbakke"
+msgstr "Kopiér%s til brevbakke"
 
 #: commands.c:746
 msgid " tagged"
@@ -554,12 +551,12 @@
 #: commands.c:945
 #, c-format
 msgid "Content-Type changed to %s."
-msgstr "\"Content-Type\" ændret til %s."
+msgstr "\"Content-Type\" ændret til %s."
 
 #: commands.c:950
 #, c-format
 msgid "Character set changed to %s; %s."
-msgstr "Tegnsæt ændret til %s; %s."
+msgstr "Tegnsæt ændret til %s; %s."
 
 #: commands.c:952
 msgid "not converting"
@@ -581,26 +578,25 @@
 msgid "Abort"
 msgstr "Afbryd"
 
-#: compose.c:94 compose.c:680
+#: compose.c:94 compose.c:660
 msgid "Attach file"
-msgstr "Vedlæg fil"
+msgstr "Vedlæg fil"
 
 #: compose.c:95
 msgid "Descrip"
 msgstr "Beskr."
 
 #: compose.c:117
-#, fuzzy
 msgid "Not supported"
-msgstr "Udvælgelse er ikke understøttet."
+msgstr "Ikke understøttet"
 
 #: compose.c:122
 msgid "Sign, Encrypt"
-msgstr "Underskriv og kryptér"
+msgstr "Underskriv og kryptér"
 
 #: compose.c:124
 msgid "Encrypt"
-msgstr "Kryptér"
+msgstr "Kryptér"
 
 #: compose.c:126
 msgid "Sign"
@@ -608,401 +604,388 @@

Reply via email to