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 @@