From b202a3811c0b1c21c411b77ccb4317a3551db881 Mon Sep 17 00:00:00 2001 From: "Dr. Werner Fink" Date: Thu, 5 Jul 2018 11:57:50 +0000 Subject: [PATCH 1/5] Update to original mutt 1.10.0 OBS-URL: https://build.opensuse.org/package/show/server:mail/mutt?expand=0&rev=182 --- aw.listreply.diff | 44 +-- bsc907453-CVE-2014-9116-jessie.patch | 10 +- bug-676388-largefile.patch | 46 ++-- mutt-1.10.0.dif | 109 ++++++++ mutt-1.10.0.tar.gz | 3 + mutt-1.5.15-wrapcolumn.diff | 8 +- mutt-1.5.20-sendgroupreplyto.diff | 44 +-- mutt-1.5.21-mailcap.diff | 19 +- mutt-1.5.23-carriage-return.path | 226 +++++++-------- mutt-1.5.9i-pgpewrap.diff | 29 +- mutt-1.6.1-opennfs.dif | 127 ++++----- mutt-1.9.0-1.9.1.patch | 294 -------------------- mutt-1.9.1.dif | 116 -------- mutt.changes | 23 ++ mutt.spec | 95 +++---- neomutt-20170912.tar.gz | 3 - neomutt-c030a8b.patch | 103 ------- patch-1.5.24.vk.pgp_verbose_mime | 37 +-- truncate.patch | 393 +++++++++++++++++++++++++++ widechar.sidebar.dif | 71 ++--- 20 files changed, 887 insertions(+), 913 deletions(-) create mode 100644 mutt-1.10.0.dif create mode 100644 mutt-1.10.0.tar.gz delete mode 100644 mutt-1.9.0-1.9.1.patch delete mode 100644 mutt-1.9.1.dif delete mode 100644 neomutt-20170912.tar.gz delete mode 100644 neomutt-c030a8b.patch create mode 100644 truncate.patch diff --git a/aw.listreply.diff b/aw.listreply.diff index c99a2e1..0c5d866 100644 --- a/aw.listreply.diff +++ b/aw.listreply.diff @@ -7,42 +7,42 @@ ask when sending list message replies to author only - Armin Wolfermann (aw) 3 files changed, 26 insertions(+) --- init.h -+++ init.h 2017-09-11 11:57:46.199273705 +0000 -@@ -1662,6 +1662,13 @@ struct Option MuttVars[] = { - ** ``$$keywords_standard'' are \fCfalse\fP, mutt will save keywords - ** to legacy headers to ensure that it does not lose your labels. ++++ init.h 2018-07-04 13:25:19.570925951 +0000 +@@ -1518,6 +1518,13 @@ struct option_t MuttVars[] = { + ** from your spool mailbox to your $$mbox mailbox, or as a result of + ** a ``$mbox-hook'' command. */ -+ { "list_reply", DT_QUAD, R_NONE, OPT_LIST_REPLY, MUTT_NO }, ++ { "list_reply", DT_QUAD, R_NONE, OPT_LISTREPLY, MUTT_NO }, + /* + ** .pp + ** When set, address replies to the mailing list the original message came + ** from (instead to the author only). Setting this option to ``ask-yes'' or + ** ``ask-no'' will ask if you really intended to reply to the author only. + */ - { "mail_check", DT_NUMBER, R_NONE, UL &MailCheck, 5 }, + { "mail_check", DT_NUM, R_NONE, UL &BuffyTimeout, 5 }, /* ** .pp --- mutt.h -+++ mutt.h 2017-09-11 11:59:08.957770801 +0000 -@@ -266,6 +266,7 @@ enum QuadOptionVars ++++ mutt.h 2018-07-04 13:24:58.147315807 +0000 +@@ -311,6 +311,7 @@ enum #endif - OPT_ABORT_NOSUBJECT, - OPT_CRYPT_VERIFY_SIG, /* verify PGP signatures */ -+ OPT_LIST_REPLY, - #ifdef USE_NNTP - OPT_POST_MODERATED, - OPT_CATCHUP_NEWSGROUP, + OPT_SUBJECT, + OPT_VERIFYSIG, /* verify PGP signatures */ ++ OPT_LISTREPLY, + + /* THIS MUST BE THE LAST VALUE. */ + OPT_MAX --- send.c -+++ send.c 2017-09-11 12:00:28.680322715 +0000 -@@ -532,6 +532,7 @@ static int include_reply(struct Context - static int default_to(struct Address **to, struct Envelope *env, int flags, int hmfupto) ++++ send.c 2018-07-04 13:28:46.211165353 +0000 +@@ -448,6 +448,7 @@ static int include_reply (CONTEXT *ctx, + static int default_to (ADDRESS **to, ENVELOPE *env, int flags, int hmfupto) { char prompt[STRING]; + struct Address *tmp; - if (flags && env->mail_followup_to && hmfupto == MUTT_YES) + if (flags && env->mail_followup_to && hmfupto == MUTT_YES) { -@@ -545,6 +546,23 @@ static int default_to(struct Address **t +@@ -461,6 +462,23 @@ static int default_to (ADDRESS **to, ENV if (flags & SENDLISTREPLY) return 0; @@ -50,8 +50,8 @@ ask when sending list message replies to author only - Armin Wolfermann (aw) + * intended to reply to the author only. + */ + if (!(flags & SENDGROUPREPLY) && mutt_is_list_cc (0, env->to, env->cc)) { -+ switch (query_quadoption (OPT_LIST_REPLY, -+ _("Message came from a mailing list. Reply to author only?"))) ++ switch (query_quadoption (OPT_LISTREPLY, ++ _("Message came from a mailing list. Reply to author only?"))) + { + case MUTT_NO: + tmp = find_mailing_lists (env->to, env->cc); @@ -63,6 +63,6 @@ ask when sending list message replies to author only - Armin Wolfermann (aw) + } + } + - if (!option(OPT_REPLY_SELF) && mutt_addr_is_user(env->from)) + if (!option(OPTREPLYSELF) && mutt_addr_is_user (env->from)) { /* mail is from the user, assume replying to recipients */ diff --git a/bsc907453-CVE-2014-9116-jessie.patch b/bsc907453-CVE-2014-9116-jessie.patch index 000ce76..a429006 100644 --- a/bsc907453-CVE-2014-9116-jessie.patch +++ b/bsc907453-CVE-2014-9116-jessie.patch @@ -13,14 +13,14 @@ has -jessie prefixed in its name. Index: mutt/lib.c =================================================================== --- - lib/string.c | 3 +++ + lib.c | 3 +++ 1 file changed, 3 insertions(+) ---- lib/string.c -+++ lib/string.c 2017-09-11 12:20:02.770906853 +0000 -@@ -338,6 +338,9 @@ char *mutt_substrdup(const char *begin, +--- lib.c ++++ lib.c 2018-07-05 08:26:51.564728125 +0000 +@@ -819,6 +819,9 @@ char *mutt_substrdup (const char *begin, size_t len; - char *p = NULL; + char *p; + if (end != NULL && end < begin) + return NULL; diff --git a/bug-676388-largefile.patch b/bug-676388-largefile.patch index a0cd9ab..ac5be5d 100644 --- a/bug-676388-largefile.patch +++ b/bug-676388-largefile.patch @@ -1,23 +1,11 @@ --- - body.h | 2 +- - mh.c | 6 +++--- - ncrypt/crypt_gpgme.c | 2 +- - 3 files changed, 5 insertions(+), 5 deletions(-) + mh.c | 6 +++--- + mutt.h | 2 +- + 2 files changed, 4 insertions(+), 4 deletions(-) ---- body.h -+++ body.h 2017-09-11 11:52:02.449585688 +0000 -@@ -37,7 +37,7 @@ struct Body - struct Parameter *parameter; /**< parameters of the content-type */ - char *description; /**< content-description */ - char *form_name; /**< Content-Disposition form-data name param */ -- long hdr_offset; /**< offset in stream where the headers begin. -+ LOFF_T hdr_offset; /**< offset in stream where the headers begin. - * this info is used when invoking metamail, - * where we need to send the headers of the - * attachment */ --- mh.c -+++ mh.c 2017-09-11 11:50:58.466761763 +0000 -@@ -1757,9 +1757,9 @@ static int mh_rewrite_message(struct Con ++++ mh.c 2018-07-04 12:55:15.079790270 +0000 +@@ -1735,9 +1735,9 @@ static int mh_rewrite_message (CONTEXT * char newpath[_POSIX_PATH_MAX]; char partpath[_POSIX_PATH_MAX]; @@ -28,16 +16,16 @@ + LOFF_T old_body_length = h->content->length; + LOFF_T old_hdr_lines = h->lines; - if ((dest = mx_open_new_message(ctx, h, 0)) == NULL) + if ((dest = mx_open_new_message (ctx, h, 0)) == NULL) return -1; ---- ncrypt/crypt_gpgme.c -+++ ncrypt/crypt_gpgme.c 2017-09-11 11:52:34.888989382 +0000 -@@ -570,7 +570,7 @@ static gpgme_data_t body_to_data_object( - * Create a GPGME data object from the stream FP but limit the object - * to LENGTH bytes starting at OFFSET bytes from the beginning of the file. - */ --static gpgme_data_t file_to_data_object(FILE *fp, long offset, long length) -+static gpgme_data_t file_to_data_object(FILE *fp, LOFF_T offset, long length) - { - int err = 0; - gpgme_data_t data; +--- mutt.h ++++ mutt.h 2018-07-04 12:54:40.604418656 +0000 +@@ -689,7 +689,7 @@ typedef struct body + PARAMETER *parameter; /* parameters of the content-type */ + char *description; /* content-description */ + char *form_name; /* Content-Disposition form-data name param */ +- long hdr_offset; /* offset in stream where the headers begin. ++ LOFF_T hdr_offset; /* offset in stream where the headers begin. + * this info is used when invoking metamail, + * where we need to send the headers of the + * attachment diff --git a/mutt-1.10.0.dif b/mutt-1.10.0.dif new file mode 100644 index 0000000..0c38d27 --- /dev/null +++ b/mutt-1.10.0.dif @@ -0,0 +1,109 @@ +--- + configure.ac | 18 +++++++++++++----- + doc/Muttrc.head | 2 +- + imap/auth.c | 22 ++++++++++++++++++++++ + mx.c | 3 +++ + 4 files changed, 39 insertions(+), 6 deletions(-) + +--- configure.ac ++++ configure.ac 2018-07-04 11:58:54.469266378 +0000 +@@ -257,7 +257,7 @@ main () + mutt_cv_slang=$withval + if test -d $withval/include/slang; then + CPPFLAGS="$CPPFLAGS -I${withval}/include/slang" +- elif test -d $withval/include; then ++ elif test -d $withval/include && $withval != /usr ; then + CPPFLAGS="$CPPFLAGS -I${withval}/include" + fi + LDFLAGS="$LDFLAGS -L${withval}/lib" +@@ -700,8 +700,12 @@ AC_ARG_WITH(ssl, AS_HELP_STRING([--with- + else + if test "$with_ssl" != "yes" + then +- LDFLAGS="$LDFLAGS -L$withval/lib" +- CPPFLAGS="$CPPFLAGS -I$withval/include" ++ case $withval in /usr|/usr/local) ;; ++ *) ++ LDFLAGS="$LDFLAGS -L$withval/lib" ++ CPPFLAGS="$CPPFLAGS -I$withval/include" ++ ;; ++ esac + fi + saved_LIBS="$LIBS" + +@@ -788,8 +792,12 @@ AC_ARG_WITH(sasl, AS_HELP_STRING([--with + + if test "$with_sasl" != "yes" + then +- CPPFLAGS="$CPPFLAGS -I$with_sasl/include" +- LDFLAGS="$LDFLAGS -L$with_sasl/lib" ++ case $with_sasl in /usr|/usr/local) ;; ++ *) ++ CPPFLAGS="$CPPFLAGS -I$with_sasl/include" ++ LDFLAGS="$LDFLAGS -L$with_sasl/lib" ++ ;; ++ esac + fi + + saved_LIBS="$LIBS" +--- doc/Muttrc.head ++++ doc/Muttrc.head 2018-07-04 11:53:27.427203358 +0000 +@@ -23,7 +23,7 @@ macro index,pager,attach,compose \cb "\ + "call urlview to extract URLs out of a message" + + # Show documentation when pressing F1 +-macro generic,pager " less @docdir@/manual.txt" "show Mutt documentation" ++macro generic,index,pager " less @docdir@/manual.txt.gz" "show Mutt documentation" + + # show the incoming mailboxes list (just like "mutt -y") and back when pressing "y" + macro index y "?" "show incoming mailboxes list" +--- imap/auth.c ++++ imap/auth.c 2018-07-04 11:52:06.288675786 +0000 +@@ -72,6 +72,25 @@ int imap_authenticate (IMAP_DATA* idata) + dprint (2, (debugfile, "imap_authenticate: Trying method %s\n", method)); + authenticator = imap_authenticators; + ++#ifdef USE_SASL ++ /* "login" not supported by SASL */ ++ if (!ascii_strcasecmp ("login", method)) ++ { ++ while (authenticator->authenticate) ++ { ++ const char *identify = authenticator->method; ++ if (identify && !ascii_strcasecmp(identify, method)) ++ if ((r = authenticator->authenticate(idata, method)) != ++ IMAP_AUTH_UNAVAIL) ++ { ++ FREE(&methods); ++ return r; ++ } ++ ++ authenticator++; ++ } ++ } else { ++#endif + while (authenticator->authenticate) + { + if (!authenticator->method || +@@ -85,6 +104,9 @@ int imap_authenticate (IMAP_DATA* idata) + + authenticator++; + } ++#ifdef USE_SASL ++ } ++#endif + } + + FREE (&methods); +--- mx.c ++++ mx.c 2018-07-04 11:24:07.179272240 +0000 +@@ -1400,6 +1400,9 @@ void mx_update_context (CONTEXT *ctx, in + { + h = ctx->hdrs[msgno]; + ++ if (!h) ++ continue; ++ + if (WithCrypto) + { + /* NOTE: this _must_ be done before the check for mailcap! */ diff --git a/mutt-1.10.0.tar.gz b/mutt-1.10.0.tar.gz new file mode 100644 index 0000000..7fc6fd9 --- /dev/null +++ b/mutt-1.10.0.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0215b5f90ef9cc33441a6ca842379b64412ed7f8da83ed68bfaa319179f5535b +size 4249980 diff --git a/mutt-1.5.15-wrapcolumn.diff b/mutt-1.5.15-wrapcolumn.diff index 64d0c62..a3048b6 100644 --- a/mutt-1.5.15-wrapcolumn.diff +++ b/mutt-1.5.15-wrapcolumn.diff @@ -5,12 +5,12 @@ Index: init.h 1 file changed, 1 insertion(+) --- init.h -+++ init.h 2017-09-11 11:39:38.727250536 +0000 -@@ -4354,6 +4354,7 @@ struct Option MuttVars[] = { ++++ init.h 2018-07-04 12:19:10.323191976 +0000 +@@ -3954,6 +3954,7 @@ struct option_t MuttVars[] = { ** printing, or replying to messages. */ - { "wrap", DT_NUMBER, R_PAGER, UL &Wrap, 0 }, -+ { "wrapcolumn", DT_SYNONYM, R_NONE, UL "wrap", 0 }, + { "wrap", DT_NUM, R_PAGER, UL &Wrap, 0 }, ++ { "wrapcolumn", DT_SYN, R_NONE, UL "wrap", 0 }, /* ** .pp ** When set to a positive value, mutt will wrap text at $$wrap characters. diff --git a/mutt-1.5.20-sendgroupreplyto.diff b/mutt-1.5.20-sendgroupreplyto.diff index fc1aa49..f691526 100644 --- a/mutt-1.5.20-sendgroupreplyto.diff +++ b/mutt-1.5.20-sendgroupreplyto.diff @@ -1,48 +1,48 @@ --- - init.h | 7 +++++++ - options.h | 1 + - send.c | 12 ++++++++++-- + init.h | 7 +++++++ + mutt.h | 1 + + send.c | 12 ++++++++++-- 3 files changed, 18 insertions(+), 2 deletions(-) --- init.h -+++ init.h 2017-09-11 11:36:34.666630359 +0000 -@@ -3135,6 +3135,13 @@ struct Option MuttVars[] = { ++++ init.h 2018-07-04 12:14:37.508148148 +0000 +@@ -2792,6 +2792,13 @@ struct option_t MuttVars[] = { ** .pp ** Also see the $$force_name variable. */ -+ { "send_group_reply_to", DT_BOOL, R_NONE, OPT_SENDGROUP_REPLYTO, 0 }, ++ { "send_group_reply_to", DT_BOOL, R_NONE, OPTSENDGROUPREPLYTO, 0 }, + /* + ** .pp + ** This variable controls how group replies are done. + ** When set, all recepients listet in "To:" are set in the + ** "To:" header again, else in the "CC", which is the default. + */ - { "score", DT_BOOL, R_NONE, OPT_SCORE, 1 }, + { "score", DT_BOOL, R_NONE, OPTSCORE, 1 }, /* ** .pp ---- options.h -+++ options.h 2017-09-11 11:37:05.418065746 +0000 -@@ -160,6 +160,7 @@ enum GlobalBool - OPT_SAVE_ADDRESS, - OPT_SAVE_EMPTY, - OPT_SAVE_NAME, -+ OPT_SENDGROUP_REPLYTO, - OPT_SCORE, +--- mutt.h ++++ mutt.h 2018-07-04 12:14:07.560692103 +0000 +@@ -468,6 +468,7 @@ enum + OPTSAVEADDRESS, + OPTSAVEEMPTY, + OPTSAVENAME, ++ OPTSENDGROUPREPLYTO, + OPTSCORE, #ifdef USE_SIDEBAR - OPT_SIDEBAR_VISIBLE, + OPTSIDEBAR, --- send.c -+++ send.c 2017-09-11 11:37:26.009687657 +0000 -@@ -637,8 +637,16 @@ int mutt_fetch_recips(struct Envelope *o ++++ send.c 2018-07-04 12:15:43.734945139 +0000 +@@ -557,8 +557,16 @@ int mutt_fetch_recips (ENVELOPE *out, EN if ((flags & SENDGROUPREPLY) && (!in->mail_followup_to || hmfupto != MUTT_YES)) { /* if(!mutt_addr_is_user(in->to)) */ -- rfc822_append(&out->cc, in->to, 1); -- rfc822_append(&out->cc, in->cc, 1); -+ if (option (OPT_SENDGROUP_REPLYTO)) +- rfc822_append (&out->cc, in->to, 1); +- rfc822_append (&out->cc, in->cc, 1); ++ if (option (OPTSENDGROUPREPLYTO)) + { + rfc822_append(&out->to, in->to, 0); + rfc822_append(&out->cc, in->cc, 1); -+ } ++ } + else + { + rfc822_append(&out->cc, in->to, 1); diff --git a/mutt-1.5.21-mailcap.diff b/mutt-1.5.21-mailcap.diff index 82ddc4e..bf81841 100644 --- a/mutt-1.5.21-mailcap.diff +++ b/mutt-1.5.21-mailcap.diff @@ -4,18 +4,17 @@ text/html Index: mutt-1.5.21/init.c =================================================================== --- - init.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) + init.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) --- init.c -+++ init.c 2017-09-11 12:17:15.337988648 +0000 -@@ -4248,7 +4248,8 @@ void mutt_init(int skip_sys_rc, struct L ++++ init.c 2018-07-05 08:23:55.663914846 +0000 +@@ -3464,7 +3464,7 @@ void mutt_init (int skip_sys_rc, LIST *c + else + { /* Default search path from RFC1524 */ - MailcapPath = safe_strdup( - "~/.mailcap:" PKGDATADIR "/mailcap:" SYSCONFDIR -- "/mailcap:/etc/mailcap:/usr/etc/mailcap:/usr/local/etc/mailcap"); -+ "/mailcap:/etc/mailcap:/usr/etc/mailcap:/usr/local/etc/mailcap" -+ SYSCONFDIR "/mutt/mailcap"); +- MailcapPath = safe_strdup ("~/.mailcap:" PKGDATADIR "/mailcap:" SYSCONFDIR "/mailcap:/etc/mailcap:/usr/etc/mailcap:/usr/local/etc/mailcap"); ++ MailcapPath = safe_strdup ("~/.mailcap:" PKGDATADIR "/mailcap:" SYSCONFDIR "/mailcap:/usr/etc/mailcap:/usr/local/etc/mailcap:" SYSCONFDIR "/mutt/mailcap"); } - Tmpdir = safe_strdup((p = getenv("TMPDIR")) ? p : "/tmp"); + Tempdir = safe_strdup ((p = getenv ("TMPDIR")) ? p : "/tmp"); diff --git a/mutt-1.5.23-carriage-return.path b/mutt-1.5.23-carriage-return.path index 12aa27e..1a5d551 100644 --- a/mutt-1.5.23-carriage-return.path +++ b/mutt-1.5.23-carriage-return.path @@ -1,130 +1,130 @@ --- - lib/string.c | 12 ++++++++++++ - lib/string2.h | 1 + - ncrypt/crypt_gpgme.c | 2 +- - ncrypt/pgp.c | 24 ++++++++++++------------ - pager.c | 2 +- - 5 files changed, 27 insertions(+), 14 deletions(-) + crypt-gpgme.c | 2 +- + lib.c | 11 +++++++++++ + lib.h | 1 + + pager.c | 2 +- + pgp.c | 24 ++++++++++++------------ + 5 files changed, 26 insertions(+), 14 deletions(-) ---- lib/string.c -+++ lib/string.c 2017-09-11 12:12:00.503744275 +0000 -@@ -362,6 +362,18 @@ int mutt_strcmp(const char *a, const cha +--- crypt-gpgme.c ++++ crypt-gpgme.c 2018-07-05 08:04:39.576930067 +0000 +@@ -2331,7 +2331,7 @@ static void copy_clearsigned (gpgme_data + + if (armor_header) + { +- if (buf[0] == '\n') ++ if (buf[0] == '\n' || (buf[0] == '\r' && buf[1] == '\n')) + armor_header = 0; + continue; + } +--- lib.c ++++ lib.c 2018-07-05 08:14:39.346030258 +0000 +@@ -875,6 +875,17 @@ int mutt_strcmp(const char *a, const cha return strcmp(NONULL(a), NONULL(b)); } +int mutt_strxcmp(const char *a, const char *b) +{ -+ size_t xa, xb; -+ xa = strcspn(NONULL(a), "\r\n"); -+ xb = strcspn(NONULL(b), "\r\n"); ++ const size_t xa = strcspn(NONULL(a), "\r\n"); ++ const size_t xb = strcspn(NONULL(b), "\r\n"); + if (xb != xa) + return -1; + if (!xa) + return 0; -+ return strncmp(NONULL(a), NONULL(b), xa); ++ return strncmp(NONULL(a), NONULL(b), (size_t)xa); +} + - /** - * mutt_strcasecmp - Compare two strings ignoring case, safely - * @param a First string to compare ---- lib/string2.h -+++ lib/string2.h 2017-09-11 12:14:01.681538993 +0000 -@@ -67,6 +67,7 @@ void mutt_str_adjust(char **p); - int mutt_strcasecmp(const char *a, const char *b); - const char *mutt_strchrnul(const char *s, char c); - int mutt_strcmp(const char *a, const char *b); -+int mutt_strxcmp(const char *a, const char *b); - int mutt_strcoll(const char *a, const char *b); - const char *mutt_stristr(const char *haystack, const char *needle); - size_t mutt_strlen(const char *a); ---- ncrypt/crypt_gpgme.c -+++ ncrypt/crypt_gpgme.c 2017-09-11 12:09:17.086717319 +0000 -@@ -2442,7 +2442,7 @@ static void copy_clearsigned(gpgme_data_ - - if (armor_header) - { -- if (buf[0] == '\n') -+ if (buf[0] == '\n' || (buf[0] == '\r' && buf[1] == '\n')) - armor_header = false; - continue; - } ---- ncrypt/pgp.c -+++ ncrypt/pgp.c 2017-09-11 12:08:10.179934232 +0000 -@@ -301,7 +301,7 @@ static void pgp_copy_clearsigned(FILE *f - continue; - } - -- if (mutt_strcmp(buf, "-----BEGIN PGP SIGNATURE-----\n") == 0) -+ if (mutt_strxcmp(buf, "-----BEGIN PGP SIGNATURE-----\n") == 0) - break; - - if (armor_header) -@@ -369,14 +369,14 @@ int pgp_application_pgp_handler(struct B - { - clearsign = false; - -- if (mutt_strcmp("MESSAGE-----\n", buf + 15) == 0) -+ if (mutt_strxcmp("MESSAGE-----\n", buf + 15) == 0) - needpass = 1; -- else if (mutt_strcmp("SIGNED MESSAGE-----\n", buf + 15) == 0) -+ else if (mutt_strxcmp("SIGNED MESSAGE-----\n", buf + 15) == 0) - { - clearsign = true; - needpass = 0; - } -- else if (mutt_strcmp("PUBLIC KEY BLOCK-----\n", buf + 15) == 0) -+ else if (mutt_strxcmp("PUBLIC KEY BLOCK-----\n", buf + 15) == 0) - { - needpass = 0; - pgp_keyblock = true; -@@ -410,9 +410,9 @@ int pgp_application_pgp_handler(struct B - - fputs(buf, tmpfp); - -- if ((needpass && (mutt_strcmp("-----END PGP MESSAGE-----\n", buf) == 0)) || -- (!needpass && ((mutt_strcmp("-----END PGP SIGNATURE-----\n", buf) == 0) || -- (mutt_strcmp("-----END PGP PUBLIC KEY BLOCK-----\n", buf) == 0)))) -+ if ((needpass && (mutt_strxcmp("-----END PGP MESSAGE-----\n", buf) == 0)) || -+ (!needpass && ((mutt_strxcmp("-----END PGP SIGNATURE-----\n", buf) == 0) || -+ (mutt_strxcmp("-----END PGP PUBLIC KEY BLOCK-----\n", buf) == 0)))) - break; - /* remember optional Charset: armor header as defined by RfC4880 */ - if (mutt_strncmp("Charset: ", buf, 9) == 0) -@@ -650,11 +650,11 @@ static int pgp_check_traditional_one_bod - { - if (mutt_strncmp("-----BEGIN PGP ", buf, 15) == 0) - { -- if (mutt_strcmp("MESSAGE-----\n", buf + 15) == 0) -+ if (mutt_strxcmp("MESSAGE-----\n", buf + 15) == 0) - enc = 1; -- else if (mutt_strcmp("SIGNED MESSAGE-----\n", buf + 15) == 0) -+ else if (mutt_strxcmp("SIGNED MESSAGE-----\n", buf + 15) == 0) - sgn = 1; -- else if (mutt_strcmp("PUBLIC KEY BLOCK-----\n", buf + 15) == 0) -+ else if (mutt_strxcmp("PUBLIC KEY BLOCK-----\n", buf + 15) == 0) - key = 1; - } - } -@@ -1144,9 +1144,9 @@ struct Body *pgp_sign_message(struct Bod - */ - while (fgets(buffer, sizeof(buffer) - 1, pgpout) != NULL) - { -- if (mutt_strcmp("-----BEGIN PGP MESSAGE-----\n", buffer) == 0) -+ if (mutt_strxcmp("-----BEGIN PGP MESSAGE-----\n", buffer) == 0) - fputs("-----BEGIN PGP SIGNATURE-----\n", fp); -- else if (mutt_strcmp("-----END PGP MESSAGE-----\n", buffer) == 0) -+ else if (mutt_strxcmp("-----END PGP MESSAGE-----\n", buffer) == 0) - fputs("-----END PGP SIGNATURE-----\n", fp); - else - fputs(buffer, fp); + int mutt_strcasecmp(const char *a, const char *b) + { + return strcasecmp(NONULL(a), NONULL(b)); +--- lib.h ++++ lib.h 2018-07-05 07:54:51.679598142 +0000 +@@ -203,6 +203,7 @@ int mutt_copy_bytes (FILE *, FILE *, siz + int mutt_rx_sanitize_string (char *, size_t, const char *); + int mutt_strcasecmp (const char *, const char *); + int mutt_strcmp (const char *, const char *); ++int mutt_strxcmp(const char *a, const char *b); + int mutt_strncasecmp (const char *, const char *, size_t); + int mutt_strncmp (const char *, const char *, size_t); + int mutt_strcoll (const char *, const char *); --- pager.c -+++ pager.c 2017-09-11 12:10:06.737814133 +0000 -@@ -827,7 +827,7 @@ static void resolve_types(char *buf, cha - line_info[n].type = MT_COLOR_NORMAL; - else if (check_attachment_marker((char *) raw) == 0) - line_info[n].type = MT_COLOR_ATTACHMENT; -- else if ((mutt_strcmp("-- \n", buf) == 0) || (mutt_strcmp("-- \r\n", buf) == 0)) -+ else if (mutt_strxcmp("-- \n", buf) == 0) ++++ pager.c 2018-07-05 08:08:31.328720187 +0000 +@@ -785,7 +785,7 @@ resolve_types (char *buf, char *raw, str + else if (check_attachment_marker ((char *) raw) == 0) + lineInfo[n].type = MT_COLOR_ATTACHMENT; + #endif +- else if (mutt_strcmp ("-- \n", buf) == 0 || mutt_strcmp ("-- \r\n", buf) == 0) ++ else if (mutt_strxcmp ("-- \n", buf) == 0) { i = n + 1; +--- pgp.c ++++ pgp.c 2018-07-05 08:07:03.658313041 +0000 +@@ -305,7 +305,7 @@ static void pgp_copy_clearsigned (FILE * + continue; + } + +- if (mutt_strcmp (buf, "-----BEGIN PGP SIGNATURE-----\n") == 0) ++ if (mutt_strxcmp (buf, "-----BEGIN PGP SIGNATURE-----\n") == 0) + break; + + if (armor_header) +@@ -371,14 +371,14 @@ int pgp_application_pgp_handler (BODY *m + { + clearsign = 0; + +- if (mutt_strcmp ("MESSAGE-----\n", buf + 15) == 0) ++ if (mutt_strxcmp ("MESSAGE-----\n", buf + 15) == 0) + needpass = 1; +- else if (mutt_strcmp ("SIGNED MESSAGE-----\n", buf + 15) == 0) ++ else if (mutt_strxcmp ("SIGNED MESSAGE-----\n", buf + 15) == 0) + { + clearsign = 1; + needpass = 0; + } +- else if (!mutt_strcmp ("PUBLIC KEY BLOCK-----\n", buf + 15)) ++ else if (!mutt_strxcmp ("PUBLIC KEY BLOCK-----\n", buf + 15)) + { + needpass = 0; + pgp_keyblock = 1; +@@ -411,10 +411,10 @@ int pgp_application_pgp_handler (BODY *m + + fputs (buf, tmpfp); + +- if ((needpass && mutt_strcmp ("-----END PGP MESSAGE-----\n", buf) == 0) || ++ if ((needpass && mutt_strxcmp ("-----END PGP MESSAGE-----\n", buf) == 0) || + (!needpass +- && (mutt_strcmp ("-----END PGP SIGNATURE-----\n", buf) == 0 +- || mutt_strcmp ("-----END PGP PUBLIC KEY BLOCK-----\n",buf) == 0))) ++ && (mutt_strxcmp ("-----END PGP SIGNATURE-----\n", buf) == 0 ++ || mutt_strxcmp ("-----END PGP PUBLIC KEY BLOCK-----\n",buf) == 0))) + break; + /* remember optional Charset: armor header as defined by RfC4880 */ + if (mutt_strncmp ("Charset: ", buf, 9) == 0) +@@ -645,11 +645,11 @@ static int pgp_check_traditional_one_bod + { + if (mutt_strncmp ("-----BEGIN PGP ", buf, 15) == 0) + { +- if (mutt_strcmp ("MESSAGE-----\n", buf + 15) == 0) ++ if (mutt_strxcmp ("MESSAGE-----\n", buf + 15) == 0) + enc = 1; +- else if (mutt_strcmp ("SIGNED MESSAGE-----\n", buf + 15) == 0) ++ else if (mutt_strxcmp ("SIGNED MESSAGE-----\n", buf + 15) == 0) + sgn = 1; +- else if (mutt_strcmp ("PUBLIC KEY BLOCK-----\n", buf + 15) == 0) ++ else if (mutt_strxcmp ("PUBLIC KEY BLOCK-----\n", buf + 15) == 0) + key = 1; + } + } +@@ -1137,9 +1137,9 @@ BODY *pgp_sign_message (BODY *a) + */ + while (fgets (buffer, sizeof (buffer) - 1, pgpout) != NULL) + { +- if (mutt_strcmp ("-----BEGIN PGP MESSAGE-----\n", buffer) == 0) ++ if (mutt_strxcmp ("-----BEGIN PGP MESSAGE-----\n", buffer) == 0) + fputs ("-----BEGIN PGP SIGNATURE-----\n", fp); +- else if (mutt_strcmp("-----END PGP MESSAGE-----\n", buffer) == 0) ++ else if (mutt_strxcmp("-----END PGP MESSAGE-----\n", buffer) == 0) + fputs ("-----END PGP SIGNATURE-----\n", fp); + else + fputs (buffer, fp); diff --git a/mutt-1.5.9i-pgpewrap.diff b/mutt-1.5.9i-pgpewrap.diff index 011e6ec..c503a87 100644 --- a/mutt-1.5.9i-pgpewrap.diff +++ b/mutt-1.5.9i-pgpewrap.diff @@ -1,19 +1,18 @@ --- - pgpewrap.c | 6 ++++++ - 1 file changed, 6 insertions(+) + pgpewrap.c | 5 +++++ + 1 file changed, 5 insertions(+) --- pgpewrap.c -+++ pgpewrap.c 2017-09-11 11:34:11.241263407 +0000 -@@ -63,6 +63,12 @@ int main(int argc, char **argv) - } - *opt = NULL; ++++ pgpewrap.c 2018-07-04 12:04:58.958652059 +0000 +@@ -58,6 +58,11 @@ int main(int argc, char **argv) { + } + *opt = NULL; -+ if (opts[0] == NULL) -+ { -+ fprintf(stderr, "Command line usage: %s [flags] -- prefix [recipients]\n", argv[0]); -+ return 1; -+ } -+ - execvp(opts[0], opts); - perror(argv[0]); - return 2; ++ if (opts[0] == NULL) ++ { ++ fprintf(stderr, "Command line usage: %s [flags] -- prefix [recipients]\n", argv[0]); ++ return 1; ++ } + execvp(opts[0], opts); + perror(argv[0]); + return 2; diff --git a/mutt-1.6.1-opennfs.dif b/mutt-1.6.1-opennfs.dif index 49f25eb..48b5c53 100644 --- a/mutt-1.6.1-opennfs.dif +++ b/mutt-1.6.1-opennfs.dif @@ -1,44 +1,47 @@ --- Makefile.am | 4 - - lib/file.c | 7 ++- + lib.c | 8 ++- mbox.c | 5 ++ mh.c | 8 +++ mutt.h | 3 + opennfs.c | 122 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ sendlib.c | 4 + - 7 files changed, 150 insertions(+), 3 deletions(-) + 7 files changed, 150 insertions(+), 4 deletions(-) --- Makefile.am -+++ Makefile.am 2017-09-11 11:47:43.214350183 +0000 -@@ -52,7 +52,7 @@ mutt_SOURCES = account.c addrbook.c addr - handler.c hdrline.c header.h headers.c help.c history.c hook.c \ - init.c keymap.c list.h main.c mbox.c mbyte.c mbtable.h \ - menu.c mh.c muttlib.c mutt_idna.c mutt_sasl_plain.c mutt_socket.c \ -- mutt_tunnel.c mx.c newsrc.c nntp.c options.h pager.c parameter.c parameter.h \ -+ mutt_tunnel.c mx.c newsrc.c nntp.c opennfs.c options.h pager.c parameter.c parameter.h \ - parse.c pattern.c pattern.h pop.c pop_auth.c pop_lib.c postpone.c \ - query.c recvattach.c recvcmd.c rfc1524.c rfc2047.c rfc2231.c rfc3676.c \ - rfc822.c safe_asprintf.c score.c send.c sendlib.c sidebar.c signal.c \ -@@ -96,7 +96,7 @@ EXTRA_DIST = account.h attach.h bcache.h ++++ Makefile.am 2018-07-04 12:36:51.255902140 +0000 +@@ -32,7 +32,7 @@ mutt_SOURCES = \ + edit.c enter.c flags.c init.c filter.c from.c \ + getdomain.c group.c \ + handler.c hash.c hdrline.c headers.c help.c hook.c keymap.c \ +- main.c mbox.c menu.c mh.c mx.c pager.c parse.c pattern.c \ ++ main.c mbox.c menu.c mh.c mx.c opennfs.c pager.c parse.c pattern.c \ + postpone.c query.c recvattach.c recvcmd.c \ + rfc822.c rfc1524.c rfc2047.c rfc2231.c rfc3676.c \ + score.c send.c sendlib.c signal.c sort.c \ +@@ -85,7 +85,7 @@ mutt_dotlock_SOURCES = mutt_dotlock.c + mutt_dotlock_LDADD = $(LIBOBJS) + mutt_dotlock_DEPENDENCIES = $(LIBOBJS) - EXTRA_SCRIPTS = +-pgpring_SOURCES = pgppubring.c pgplib.c lib.c extlib.c sha1.c md5.c pgppacket.c ascii.c ++pgpring_SOURCES = opennfs.c pgppubring.c pgplib.c lib.c extlib.c sha1.c md5.c pgppacket.c ascii.c + pgpring_LDADD = $(LIBOBJS) $(INTLLIBS) + pgpring_DEPENDENCIES = $(LIBOBJS) $(INTLDEPS) --pgpring_SOURCES = pgppubring.c -+pgpring_SOURCES = opennfs.c pgppubring.c - pgpring_LDADD = $(LIBOBJS) $(NCRYPT_LIBS) $(INTLLIBS) $(LIBMUTT) - pgpring_DEPENDENCIES = $(LIBOBJS) $(NCRYPT_DEPS) $(INTLDEPS) $(LIBMUTTDEPS) +--- lib.c ++++ lib.c 2018-07-04 12:52:11.255140696 +0000 +@@ -50,9 +50,9 @@ + #define EX_OK 0 + #endif ---- lib/file.c -+++ lib/file.c 2017-09-11 11:45:32.960743565 +0000 -@@ -71,6 +71,7 @@ - #include "debug.h" - #include "memory.h" - #include "message.h" +#include "mutt.h" - #include "string2.h" + #include "lib.h" - /* these characters must be escaped in regular expressions */ -@@ -502,6 +503,10 @@ int safe_open(const char *path, int flag +- + static const struct sysexits + { + int v; +@@ -633,6 +633,10 @@ int safe_open (const char *path, int fla struct stat osb, nsb; int fd; @@ -46,72 +49,72 @@ + if ((fd = opennfs (path, flags, 0600)) < 0) + return fd; +#else - if (flags & O_EXCL) + if (flags & O_EXCL) { char safe_file[_POSIX_PATH_MAX]; -@@ -526,7 +531,7 @@ int safe_open(const char *path, int flag - fd = open(path, flags & ~O_EXCL, 0600); - if (fd < 0) +@@ -656,7 +660,7 @@ int safe_open (const char *path, int fla + + if ((fd = open (path, flags & ~O_EXCL, 0600)) < 0) return fd; -- +- +#endif /* make sure the file is not symlink */ - if ((lstat(path, &osb) < 0 || fstat(fd, &nsb) < 0) || !compare_stat(&osb, &nsb)) - { + if (lstat (path, &osb) < 0 || fstat (fd, &nsb) < 0 || + compare_stat(&osb, &nsb) == -1) --- mbox.c -+++ mbox.c 2017-09-11 11:40:15.902567799 +0000 -@@ -1075,8 +1075,13 @@ static int mbox_sync_mailbox(struct Cont ++++ mbox.c 2018-07-04 12:42:52.949313860 +0000 +@@ -867,8 +867,13 @@ static int mbox_sync_mailbox (CONTEXT *c /* Create a temporary file to write the new version of the mailbox in. */ - mutt_mktemp(tempfile, sizeof(tempfile)); + mutt_mktemp (tempfile, sizeof (tempfile)); +#if defined(__linux__) + if ((i = opennfs(tempfile, O_WRONLY | O_EXCL | O_CREAT, 0600)) == -1 || + (fp = fdopen(i, "w")) == NULL) +#else - if ((i = open(tempfile, O_WRONLY | O_EXCL | O_CREAT, 0600)) == -1 || - (fp = fdopen(i, "w")) == NULL) + if ((i = open (tempfile, O_WRONLY | O_EXCL | O_CREAT, 0600)) == -1 || + (fp = fdopen (i, "w")) == NULL) +#endif { if (-1 != i) { --- mh.c -+++ mh.c 2017-09-11 11:49:25.892463230 +0000 -@@ -383,7 +383,11 @@ static int mh_mkstemp(struct Context *de ++++ mh.c 2018-07-04 12:46:06.973778914 +0000 +@@ -357,7 +357,11 @@ static int mh_mkstemp (CONTEXT * dest, F { - snprintf(path, _POSIX_PATH_MAX, "%s/.mutt-%s-%d-%" PRIu64, dest->path, - NONULL(ShortHostname), (int) getpid(), mutt_rand64()); + snprintf (path, _POSIX_PATH_MAX, "%s/.mutt-%s-%d-%d", + dest->path, NONULL (Hostname), (int) getpid (), Counter++); +#if defined(__linux__) + if ((fd = opennfs(path, O_WRONLY | O_EXCL | O_CREAT, 0666)) == -1) +#else - if ((fd = open(path, O_WRONLY | O_EXCL | O_CREAT, 0666)) == -1) + if ((fd = open (path, O_WRONLY | O_EXCL | O_CREAT, 0666)) == -1) +#endif { if (errno != EEXIST) { -@@ -1518,7 +1522,11 @@ static int maildir_open_new_message(stru - - mutt_debug(2, "maildir_open_new_message (): Trying %s.\n", path); +@@ -1496,7 +1500,11 @@ static int maildir_open_new_message (MES + dprint (2, (debugfile, "maildir_open_new_message (): Trying %s.\n", + path)); +#if defined(__linux__) + if ((fd = opennfs(path, O_WRONLY | O_EXCL | O_CREAT, 0666)) == -1) +#else - if ((fd = open(path, O_WRONLY | O_EXCL | O_CREAT, 0666)) == -1) + if ((fd = open (path, O_WRONLY | O_EXCL | O_CREAT, 0666)) == -1) +#endif { if (errno != EEXIST) { --- mutt.h -+++ mutt.h 2017-09-11 11:50:18.979487541 +0000 -@@ -367,4 +367,7 @@ extern char *debugfile_cmdline; - extern int debuglevel_cmdline; - #endif ++++ mutt.h 2018-07-04 12:50:36.504867472 +0000 +@@ -1086,4 +1086,7 @@ typedef struct + #include "lib.h" + #include "globals.h" +#if defined(__linux__) +extern int opennfs(const char *, int, int); +#endif - #endif /* _MUTT_H */ + #endif /*MUTT_H*/ --- opennfs.c -+++ opennfs.c 2017-09-11 11:40:15.906567726 +0000 ++++ opennfs.c 2018-07-04 12:19:44.426572384 +0000 @@ -0,0 +1,122 @@ +#include +#include @@ -236,16 +239,16 @@ + return open(path, flags, mode); +} --- sendlib.c -+++ sendlib.c 2017-09-11 11:40:15.906567726 +0000 -@@ -2354,7 +2354,11 @@ static int send_msg(const char *path, ch ++++ sendlib.c 2018-07-04 12:47:53.063845836 +0000 +@@ -2256,7 +2256,11 @@ send_msg (const char *path, char **args, if (SendmailWait >= 0 && tempfile && *tempfile) { - /* *tempfile will be opened as stdout */ + /* *tempfile will be opened as stdout */ +#if defined(__linux__) -+ if (opennfs(*tempfile, O_WRONLY | O_APPEND | O_CREAT | O_EXCL, 0600) < 0) ++ if (opennfs(*tempfile, O_WRONLY | O_APPEND | O_CREAT | O_EXCL, 0600) < 0) +#else - if (open(*tempfile, O_WRONLY | O_APPEND | O_CREAT | O_EXCL, 0600) < 0) + if (open (*tempfile, O_WRONLY | O_APPEND | O_CREAT | O_EXCL, 0600) < 0) +#endif - _exit(S_ERR); - /* redirect stderr to *tempfile too */ - if (dup(1) < 0) + _exit (S_ERR); + /* redirect stderr to *tempfile too */ + if (dup (1) < 0) diff --git a/mutt-1.9.0-1.9.1.patch b/mutt-1.9.0-1.9.1.patch deleted file mode 100644 index f40ebc3..0000000 --- a/mutt-1.9.0-1.9.1.patch +++ /dev/null @@ -1,294 +0,0 @@ ---- - imap/command.c | 47 +++++++++++++++++++++++------- - imap/imap.c | 79 +++++++++++++++++++++++++++++++++++++++------------- - imap/imap_private.h | 2 - - imap/message.c | 6 +-- - 4 files changed, 99 insertions(+), 35 deletions(-) - ---- imap/command.c -+++ imap/command.c 2017-10-24 14:15:49.011057645 +0000 -@@ -146,6 +146,7 @@ static void cmd_handle_fatal(struct Imap - if ((idata->state >= IMAP_SELECTED) && (idata->reopen & IMAP_REOPEN_ALLOW)) - { - mx_fastclose_mailbox(idata->ctx); -+ mutt_socket_close(idata->conn); - mutt_error(_("Mailbox closed")); - mutt_sleep(1); - idata->state = IMAP_DISCONNECTED; -@@ -257,7 +258,7 @@ static void cmd_parse_expunge(struct Ima - */ - static void cmd_parse_fetch(struct ImapData *idata, char *s) - { -- unsigned int msn; -+ unsigned int msn, uid; - struct Header *h = NULL; - - mutt_debug(3, "Handling FETCH\n"); -@@ -288,19 +289,41 @@ static void cmd_parse_fetch(struct ImapD - } - s++; - -- if (mutt_strncasecmp("FLAGS", s, 5) != 0) -+ while (*s) - { -- mutt_debug(2, "Only handle FLAGS updates\n"); -- return; -- } -+ SKIPWS (s); - -- /* If server flags could conflict with mutt's flags, reopen the mailbox. */ -- if (h->changed) -- idata->reopen |= IMAP_EXPUNGE_PENDING; -- else -- { -- imap_set_flags(idata, h, s); -- idata->check_status = IMAP_FLAGS_PENDING; -+ if (mutt_strncasecmp ("FLAGS", s, 5) == 0) -+ { -+ /* If server flags could conflict with mutt's flags, reopen the mailbox. */ -+ if (h->changed) -+ idata->reopen |= IMAP_EXPUNGE_PENDING; -+ else -+ { -+ imap_set_flags (idata, h, s); -+ idata->check_status = IMAP_FLAGS_PENDING; -+ } -+ return; -+ } -+ else if (mutt_strncasecmp ("UID", s, 3) == 0) -+ { -+ s += 3; -+ SKIPWS (s); -+ uid = (unsigned int) atoi (s); -+ if (uid != HEADER_DATA(h)->uid) -+ { -+ mutt_debug(2, "FETCH UID vs MSN mismatch. Skipping update.\n"); -+ return; -+ } -+ s = imap_next_word (s); -+ } -+ else if (*s == ')') -+ s++; /* end of request */ -+ else if (*s) -+ { -+ mutt_debug(2, "Only handle FLAGS updates\n"); -+ return; -+ } - } - } - ---- imap/imap.c -+++ imap/imap.c 2017-10-24 14:27:08.002351735 +0000 -@@ -318,7 +318,26 @@ void imap_expunge_mailbox(struct ImapDat - imap_free_header_data((struct ImapHeaderData **) &h->data); - } - else -+ { - h->index = i; -+ /* Mutt has several places where it turns off h->active as a -+ * hack. For example to avoid FLAG updates, or to exclude from -+ * imap_exec_msgset. -+ * -+ * Unfortunately, when a reopen is allowed and the IMAP_EXPUNGE_PENDING -+ * flag becomes set (e.g. a flag update to a modified header), -+ * this function will be called by imap_cmd_finish(). -+ * -+ * The mx_update_tables() will free and remove these "inactive" headers, -+ * despite that an EXPUNGE was not received for them. -+ * This would result in memory leaks and segfaults due to dangling -+ * pointers in the msn_index and uid_hash. -+ * -+ * So this is another hack to work around the hacks. We don't want to -+ * remove the messages, so make sure active is on. -+ */ -+ h->active = 1; -+ } - } - - #ifdef USE_HCACHE -@@ -1094,7 +1113,7 @@ out: - * compare_flags - Compare local flags against the server - * @retval 0 if mutt's flags match cached server flags - */ --static bool compare_flags(struct Header *h) -+static bool compare_flags_for_copy(struct Header *h) - { - struct ImapHeaderData *hd = (struct ImapHeaderData *) h->data; - -@@ -1106,16 +1125,17 @@ static bool compare_flags(struct Header - return true; - if (h->replied != hd->replied) - return true; -- if (h->deleted != hd->deleted) -- return true; - - return false; - } - - /** -- * imap_sync_message - Update server to reflect the flags of a single message -+ * imap_sync_message - Update the IMAP server to reflect the flags for a single message before -+ * performing a "UID COPY". -+ * NOTE: This does not sync the "deleted" flag state, because it is not -+ * desirable to propagate that flag into the copy. - */ --int imap_sync_message(struct ImapData *idata, struct Header *hdr, -+int imap_sync_message_for_copy(struct ImapData *idata, struct Header *hdr, - struct Buffer *cmd, int *err_continue) - { - char flags[LONG_STRING]; -@@ -1123,9 +1143,13 @@ int imap_sync_message(struct ImapData *i - - hdr->changed = false; - -- if (!compare_flags(hdr)) -+ if (!compare_flags_for_copy(hdr)) - { -- idata->ctx->changed = false; -+ if (hdr->deleted == HEADER_DATA(hdr)->deleted) -+ { -+ hdr->changed = 0; -+ idata->ctx->changed = false; -+ } - return 0; - } - -@@ -1140,7 +1164,7 @@ int imap_sync_message(struct ImapData *i - imap_set_flag(idata, MUTT_ACL_WRITE, hdr->old, "Old ", flags, sizeof(flags)); - imap_set_flag(idata, MUTT_ACL_WRITE, hdr->flagged, "\\Flagged ", flags, sizeof(flags)); - imap_set_flag(idata, MUTT_ACL_WRITE, hdr->replied, "\\Answered ", flags, sizeof(flags)); -- imap_set_flag(idata, MUTT_ACL_DELETE, hdr->deleted, "\\Deleted ", flags, sizeof(flags)); -+ imap_set_flag(idata, MUTT_ACL_DELETE, HEADER_DATA(hdr)->deleted, "\\Deleted ", flags, sizeof(flags)); - - /* now make sure we don't lose custom tags */ - if (mutt_bit_isset(idata->ctx->rights, MUTT_ACL_WRITE)) -@@ -1156,7 +1180,7 @@ int imap_sync_message(struct ImapData *i - imap_set_flag(idata, MUTT_ACL_WRITE, 1, "Old ", flags, sizeof(flags)); - imap_set_flag(idata, MUTT_ACL_WRITE, 1, "\\Flagged ", flags, sizeof(flags)); - imap_set_flag(idata, MUTT_ACL_WRITE, 1, "\\Answered ", flags, sizeof(flags)); -- imap_set_flag(idata, MUTT_ACL_DELETE, 1, "\\Deleted ", flags, sizeof(flags)); -+ imap_set_flag (idata, MUTT_ACL_DELETE, !HEADER_DATA(hdr)->deleted, "\\Deleted ", flags, sizeof (flags)); - - mutt_remove_trailing_ws(flags); - -@@ -1178,11 +1202,17 @@ int imap_sync_message(struct ImapData *i - { - *err_continue = imap_continue("imap_sync_message: STORE failed", idata->buf); - if (*err_continue != MUTT_YES) -+ { -+ hdr->active = 1; - return -1; -+ } - } - -- hdr->active = true; -- idata->ctx->changed = false; -+ if (hdr->deleted == HEADER_DATA(hdr)->deleted) -+ { -+ hdr->active = true; -+ idata->ctx->changed = false; -+ } - - return 0; - } -@@ -1637,7 +1667,7 @@ int imap_buffy_check(int force, int chec - { - /* Send commands to previous server. Sorting the buffy list - * may prevent some infelicitous interleavings */ -- if (imap_exec(lastdata, NULL, IMAP_CMD_FAIL_OK) == -1) -+ if (imap_exec(lastdata, NULL, IMAP_CMD_FAIL_OK | IMAP_CMD_POLL) == -1) - mutt_debug(1, "Error polling mailboxes\n"); - - lastdata = NULL; -@@ -2214,9 +2244,11 @@ int imap_fast_trash(struct Context *ctx, - char mbox[LONG_STRING]; - char mmbox[LONG_STRING]; - char prompt[LONG_STRING]; -- int rc; -+ int n, rc; - struct ImapMbox mx; - bool triedcreate = false; -+ struct Buffer *sync_cmd = NULL; -+ int err_continue = MUTT_NO; - - idata = ctx->data; - -@@ -2238,16 +2270,24 @@ int imap_fast_trash(struct Context *ctx, - strfcpy(mbox, "INBOX", sizeof(mbox)); - imap_munge_mbox_name(idata, mmbox, sizeof(mmbox), mbox); - -- /* loop in case of TRYCREATE */ -- do -+ sync_cmd = mutt_buffer_new (); -+ for (n = 0; n < ctx->msgcount; n++) - { -- rc = imap_exec_msgset(idata, "UID STORE", "+FLAGS.SILENT (\\Seen)", MUTT_TRASH, 0, 0); -- if (rc < 0) -+ if (ctx->hdrs[n]->active && ctx->hdrs[n]->changed && -+ ctx->hdrs[n]->deleted && !ctx->hdrs[n]->purge) - { -- mutt_debug(1, "imap_fast_trash: Unable to mark messages as seen\n"); -- goto out; -+ rc = imap_sync_message_for_copy (idata, ctx->hdrs[n], sync_cmd, &err_continue); -+ if (rc < 0) -+ { -+ mutt_debug(1, "imap_fast_trash: could not sync\n"); -+ goto out; -+ } - } -+ } - -+ /* loop in case of TRYCREATE */ -+ do -+ { - rc = imap_exec_msgset(idata, "UID COPY", mmbox, MUTT_TRASH, 0, 0); - if (!rc) - { -@@ -2297,6 +2337,7 @@ int imap_fast_trash(struct Context *ctx, - rc = 0; - - out: -+ mutt_buffer_free (&sync_cmd); - FREE(&mx.mbox); - - return rc < 0 ? -1 : rc; ---- imap/imap_private.h -+++ imap/imap_private.h 2017-10-24 14:15:49.015057570 +0000 -@@ -279,7 +279,7 @@ struct ImapData *imap_conn_find(const st - int imap_read_literal(FILE *fp, struct ImapData *idata, long bytes, struct Progress *pbar); - void imap_expunge_mailbox(struct ImapData *idata); - void imap_logout(struct ImapData **idata); --int imap_sync_message(struct ImapData *idata, struct Header *hdr, struct Buffer *cmd, int *err_continue); -+int imap_sync_message_for_copy(struct ImapData *idata, struct Header *hdr, struct Buffer *cmd, int *err_continue); - bool imap_has_flag(struct ListHead *flag_list, const char *flag); - - /* auth.c */ ---- imap/message.c -+++ imap/message.c 2017-10-24 14:15:49.015057570 +0000 -@@ -1261,7 +1261,7 @@ int imap_copy_messages(struct Context *c - - if (ctx->hdrs[n]->tagged && ctx->hdrs[n]->active && ctx->hdrs[n]->changed) - { -- rc = imap_sync_message(idata, ctx->hdrs[n], &sync_cmd, &err_continue); -+ rc = imap_sync_message_for_copy(idata, ctx->hdrs[n], &sync_cmd, &err_continue); - if (rc < 0) - { - mutt_debug(1, "imap_copy_messages: could not sync\n"); -@@ -1292,7 +1292,7 @@ int imap_copy_messages(struct Context *c - - if (h->active && h->changed) - { -- rc = imap_sync_message(idata, h, &sync_cmd, &err_continue); -+ rc = imap_sync_message_for_copy(idata, h, &sync_cmd, &err_continue); - if (rc < 0) - { - mutt_debug(1, "imap_copy_messages: could not sync\n"); -@@ -1444,7 +1444,7 @@ char *imap_set_flags(struct ImapData *id - hd = h->data; - newh.data = hd; - -- mutt_debug(2, "imap_fetch_message: parsing FLAGS\n"); -+ mutt_debug(2, "imap_set_flags: parsing FLAGS\n"); - if ((s = msg_parse_flags(&newh, s)) == NULL) - return NULL; - diff --git a/mutt-1.9.1.dif b/mutt-1.9.1.dif deleted file mode 100644 index c11395e..0000000 --- a/mutt-1.9.1.dif +++ /dev/null @@ -1,116 +0,0 @@ ---- - configure.ac | 10 +++++++++- - doc/Muttrc.head | 2 +- - imap/auth.c | 20 ++++++++++++++++++++ - init.h | 3 +++ - mx.c | 3 +++ - 5 files changed, 36 insertions(+), 2 deletions(-) - ---- configure.ac -+++ configure.ac 2017-09-11 11:24:08.296326161 +0000 -@@ -337,7 +337,7 @@ main () - mutt_cv_slang=$withval - if test -d $withval/include/slang; then - CPPFLAGS="$CPPFLAGS -I${withval}/include/slang" -- elif test -d $withval/include; then -+ elif test -d $withval/include && test $withval != /usr ; then - CPPFLAGS="$CPPFLAGS -I${withval}/include" - fi - LDFLAGS="$LDFLAGS -L${withval}/lib" -@@ -510,8 +510,12 @@ dnl -- end imap dependencies -- - AC_ARG_WITH(ssl, AS_HELP_STRING([--with-ssl@<:@=PFX@:>@],[Enable TLS support using OpenSSL]), - [ if test "$with_ssl" != "no"; then - if test "$with_ssl" != "yes"; then -+ case $withval in /usr|/usr/local) ;; -+ *) - LDFLAGS="$LDFLAGS -L$withval/lib" - CPPFLAGS="$CPPFLAGS -I$withval/include" -+ ;; -+ esac - fi - saved_LIBS="$LIBS" - -@@ -574,8 +578,12 @@ AC_ARG_WITH(sasl, AS_HELP_STRING([--with - [ - if test "$with_sasl" != "no"; then - if test "$with_sasl" != "yes"; then -+ case $with_sasl in /usr|/usr/local) ;; -+ *) - CPPFLAGS="$CPPFLAGS -I$with_sasl/include" - LDFLAGS="$LDFLAGS -L$with_sasl/lib" -+ ;; -+ esac - fi - - # OpenSolaris provides a SASL2 interface in libsasl ---- doc/Muttrc.head -+++ doc/Muttrc.head 2017-09-11 11:24:59.871380290 +0000 -@@ -23,7 +23,7 @@ macro index,pager,attach,compose \cb "\ - "call urlview to extract URLs out of a message" - - # Show documentation when pressing F1 --macro generic,pager " less @docdir@/manual.txt" "show Mutt documentation" -+macro generic,index,pager " less @docdir@/manual.txt.gz" "show Mutt documentation" - - # show the incoming mailboxes list (just like "mutt -y") and back when pressing "y" - macro index,pager y "?" "show incoming mailboxes list" ---- imap/auth.c -+++ imap/auth.c 2017-09-11 11:26:50.141357697 +0000 -@@ -80,6 +80,23 @@ int imap_authenticate(struct ImapData *i - mutt_debug(2, "imap_authenticate: Trying method %s\n", method); - authenticator = imap_authenticators; - -+#ifdef USE_SASL -+ /* "login" not supported by SASL */ -+ if (!mutt_strcasecmp ("login", method)) -+ { -+ while (authenticator->authenticate) -+ { -+ const char *identify = authenticator->method; -+ if (identify && !mutt_strcasecmp(identify, method)) -+ if ((r = authenticator->authenticate(idata, method)) != IMAP_AUTH_UNAVAIL) -+ { -+ FREE(&methods); -+ return r; -+ } -+ authenticator++; -+ } -+ } else { -+#endif - while (authenticator->authenticate) - { - if (!authenticator->method || (mutt_strcasecmp(authenticator->method, method) == 0)) -@@ -91,6 +108,9 @@ int imap_authenticate(struct ImapData *i - - authenticator++; - } -+#ifdef USE_SASL -+ } -+#endif - } - - FREE(&methods); ---- init.h -+++ init.h 2017-09-11 11:27:51.208237439 +0000 -@@ -3864,6 +3864,9 @@ struct Option MuttVars[] = { - ** the default from the GNUTLS library. - */ - #endif /* USE_SSL_GNUTLS */ -+#if defined(USE_IMAP) && defined(SUSE_IMAP_FORCE_SSL) -+ { "imap_force_ssl", DT_SYN, R_NONE, UL "ssl_force_tls", 0 }, -+#endif - { "ssl_starttls", DT_QUAD, R_NONE, OPT_SSL_STARTTLS, MUTT_YES }, - /* - ** .pp ---- mx.c -+++ mx.c 2017-09-11 11:14:29.263001870 +0000 -@@ -1287,6 +1287,9 @@ void mx_update_context(struct Context *c - { - h = ctx->hdrs[msgno]; - -+ if (!h) -+ continue; -+ - if (WithCrypto) - { - /* NOTE: this _must_ be done before the check for mailcap! */ diff --git a/mutt.changes b/mutt.changes index c88d5c4..987848c 100644 --- a/mutt.changes +++ b/mutt.changes @@ -1,3 +1,26 @@ +------------------------------------------------------------------- +Thu Jul 5 11:41:44 UTC 2018 - werner@suse.de + +- Skip neomutt now + * There exists a package neomutt + * mutt-1.10.0 uses a lot of extensions now like compessed folders + and header caching, but still misses things like notmuch +- Modified patches + * aw.listreply.diff + * bsc907453-CVE-2014-9116-jessie.patch + * bug-676388-largefile.patch + * mutt-1.5.15-wrapcolumn.diff + * mutt-1.5.20-sendgroupreplyto.diff + * mutt-1.5.21-mailcap.diff + * mutt-1.5.23-carriage-return.path + * mutt-1.5.9i-pgpewrap.diff + * mutt-1.6.1-opennfs.dif + * patch-1.5.24.vk.pgp_verbose_mime + * widechar.sidebar.dif +- Renamed patch: mutt-1.9.1.dif becomes mutt-1.10.0.dif +- Deleted patches mutt-1.9.0-1.9.1.patch neomutt-c030a8b.patch +- Add patch truncate.patch to avoid truncated buffers due snprintf + ------------------------------------------------------------------- Tue Oct 24 14:33:00 UTC 2017 - werner@suse.de diff --git a/mutt.spec b/mutt.spec index 658a7cc..7d68e85 100644 --- a/mutt.spec +++ b/mutt.spec @@ -1,7 +1,7 @@ # # spec file for package mutt # -# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -16,8 +16,8 @@ # -%bcond_without mutt_openssl -%bcond_with mutt_gnutls +%bcond_with mutt_openssl +%bcond_without mutt_gnutls Name: mutt %if %{with mutt_openssl} @@ -28,30 +28,27 @@ BuildRequires: pkgconfig(gnutls) %endif BuildRequires: autoconf BuildRequires: automake -BuildRequires: cyrus-sasl-devel BuildRequires: cyrus-sasl-gssapi BuildRequires: docbook-xsl-stylesheets -BuildRequires: gdbm-devel BuildRequires: hunspell -BuildRequires: krb5-devel +BuildRequires: iso_ent BuildRequires: libgpgme-devel -BuildRequires: libidn-devel -BuildRequires: libkyotocabinet-devel BuildRequires: libxslt-tools -BuildRequires: lua-devel -BuildRequires: ncurses-devel -%if 0%{?is_opensuse} -BuildRequires: notmuch-devel -%endif BuildRequires: opensp +BuildRequires: pkgconfig(gssrpc) +BuildRequires: pkgconfig(krb5) +BuildRequires: pkgconfig(kyotocabinet) +BuildRequires: pkgconfig(libidn2) +BuildRequires: pkgconfig(libsasl2) +BuildRequires: pkgconfig(ncurses) %if 0%{?suse_version} > 1130 -BuildRequires: shared-mime-info +BuildRequires: pkgconfig(shared-mime-info) %endif %if 0%{?suse_version} BuildRequires: update-desktop-files %endif BuildRequires: w3m -Url: http://www.neomutt.org +Url: http://www.mutt.org Recommends: hunspell Provides: muttssl Obsoletes: muttssl @@ -64,17 +61,14 @@ Recommends: w3m Requires(post): shared-mime-info Requires(postun): shared-mime-info %endif -%global neo 20170912 -Version: 1.9.1 +Version: 1.10.0 Release: 0 Summary: Mail Program # ftp://ftp.mutt.org/mutt/devel/ -# https://bitbucket.org/mutt/mutt/downloads/%%name-%%version.tar.gz -# Switch over to neomutt tar ball which is based on original mutt -# http://www.neomutt.org/ -License: GPL-2.0+ +# https/bitbucket.org/mutt/mutt/downloads/%%name-%%version.tar.gz +License: GPL-2.0-or-later Group: Productivity/Networking/Email/Clients -Source0: https://github.com/neomutt/neomutt/archive/neomutt-%{neo}.tar.gz +Source0: https/bitbucket.org/mutt/mutt/downloads/mutt-%version.tar.gz Source1: Signature_conversion Source2: README.alternates Source3: mutt.png @@ -99,10 +93,8 @@ Patch16: mutt-1.5.23-carriage-return.path Patch18: mutt-1.5.21-mailcap.diff # PATCH-FIX-SUSE: bsc#907453 - CVE-2014-9116: mutt: heap-based buffer overflow in mutt_substrdup() Patch19: bsc907453-CVE-2014-9116-jessie.patch -# PATCH-FIX-UPSTREAM: bsc#1061343 - (neo)mutt displaying times in Zulu time -Patch20: neomutt-c030a8b.patch -# PATCH-UPSTREAM-MUTT: Port diff-1.9.0-1.9.1 to neomutt tree -Patch42: mutt-1.9.0-1.9.1.patch +# PATCH-FIX-SUSE: Silent gcc about truncated buffer with snprintf() +Patch20: truncate.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build %global _sysconfdir %{_sysconfdir} @@ -135,7 +127,6 @@ BuildArch: noarch Provides translations to the package mutt. %prep -ln -sf neomutt-neomutt-%neo mutt-%version %setup -q -D -n mutt-%version %patch -p0 -b .p0 %patch2 -p0 -b .pgpewrap @@ -149,10 +140,7 @@ ln -sf neomutt-neomutt-%neo mutt-%version %patch16 -p0 -b .crlf %patch18 -p0 -b .mailcap %patch19 -p0 -b .cvw2014.9116 -%patch20 -p1 -b .zulu -%patch42 -p0 -b .191 -rm -vf README*.orig -rm -vf PATCHES*.orig +%patch20 -p0 -b .trc cp %{S:2} . @@ -186,7 +174,6 @@ autoreconf -fi } CC=gcc CFLAGS="-Wall $RPM_OPT_FLAGS -I. -D_GNU_SOURCE" -#cflags -DSUSE_IMAP_FORCE_SSL CFLAGS cflags -fno-strict-aliasing CFLAGS cflags -fstack-protector CFLAGS cflags -fPIE CFLAGS @@ -194,7 +181,6 @@ cflags -g3 CFLAGS cflags -pipe CFLAGS cflags -Wl,--as-needed LDFLAGS cflags -Wl,-O2 LDFLAGS -cflags -Wl,--hash-size=8599 LDFLAGS cflags -pie LDFLAGS export CC CFLAGS LDFLAGS export SENDMAIL=/usr/sbin/sendmail @@ -206,12 +192,12 @@ $KRB5CFGPATH --libs gssapi $KRB5CFGPATH --version %configure \ --with-docdir=%{_docdir}/%name \ - --without-ssl \ - --without-gnutls \ %if %{with mutt_openssl} + --without-gnutls \ --with-ssl=%{_prefix} \ %endif %if %{with mutt_gnutls} + --without-ssl \ --with-gnutls=%{_prefix} \ %endif --enable-imap \ @@ -222,19 +208,15 @@ $KRB5CFGPATH --version --enable-mailtool \ --enable-compressed \ --enable-sidebar \ -%if 0%{?is_opensuse} - --enable-notmuch \ -%endif --disable-external-dotlock \ - --with-gdbm \ --with-kyotocabinet \ --with-sasl=%{_prefix} \ --with-gss=%{_prefix} \ --with-curses=%{_prefix} \ --enable-smtp \ - --enable-lua \ - --enable-nntp \ - --with-idn + --enable-hcache \ + --with-regex \ + --with-idn2 make -C doc clean make make -C doc @@ -269,7 +251,6 @@ install -D -m 644 %{SOURCE5} %{buildroot}%{_sysconfdir}/skel/.muttrc install -D -m 644 %{SOURCE9} %{buildroot}%{_datadir}/%name/mailcap rm -vf %{buildroot}%{_docdir}/%name/manual.txt install -D -m 644 doc/manual.txt.gz %{buildroot}%{_docdir}/%name/ -chmod a-x %{buildroot}%{_docdir}/%name/keybase/*.sh %if 0%{?suse_version} %suse_update_desktop_file mutt %endif @@ -307,34 +288,22 @@ chmod a-x %{buildroot}%{_docdir}/%name/keybase/*.sh %files doc %defattr(-,root,root) %doc %{_docdir}/%name/COPYRIGHT +%doc %{_docdir}/%name/ChangeLog +%doc %{_docdir}/%name/GPL +%doc %{_docdir}/%name/NEWS %doc %{_docdir}/%name/README* -%doc %{_docdir}/%name/ChangeLog.md -%doc %{_docdir}/%name/CODE_OF_CONDUCT.md -%doc %{_docdir}/%name/LICENSE.md +%doc %{_docdir}/%name/TODO %doc %{_docdir}/%name/*.html %doc %{_docdir}/%name/*.txt -%dir %doc %{_docdir}/%name/colorschemes/ -%doc %{_docdir}/%name/colorschemes/*.muttrc -%doc %{_docdir}/%name/colorschemes/vombatidae.mutt -%dir %doc %{_docdir}/%name/keybase/ -%doc %{_docdir}/%name/keybase/* -%dir %doc %{_docdir}/%name/logo/ -%doc %{_docdir}/%name/logo/mutt* -%doc %{_docdir}/%name/neomutt-syntax.vim %dir %doc %{_docdir}/%name/samples/ %doc %{_docdir}/%name/samples/*.rc +%doc %{_docdir}/%name/samples/ca-bundle.crt %doc %{_docdir}/%name/samples/colors.* +%doc %{_docdir}/%name/samples/mutt_xtitle %doc %{_docdir}/%name/samples/sample.* %doc %{_docdir}/%name/samples/smime_keys_test.pl -%dir %doc %{_docdir}/%name/vim-keys/ -%doc %{_docdir}/%name/vim-keys/* -%dir %doc %{_docdir}/%name/hcache-bench/ -%doc %{_docdir}/%name/hcache-bench/README.md -%doc %{_docdir}/%name/hcache-bench/muttrc -%doc %{_docdir}/%name/hcache-bench/neomutt-hcache-bench.sh -%dir %doc %{_docdir}/%name/lua/ -%doc %{_docdir}/%name/lua/test_lua-api_runner.muttrc -%doc %{_docdir}/%name/lua/test_lua-api_spec.lua +%dir %doc %{_docdir}/%name/samples/iconv/ +%doc %{_docdir}/%name/samples/iconv/*.rc %files lang -f %name.lang %defattr(-,root,root) diff --git a/neomutt-20170912.tar.gz b/neomutt-20170912.tar.gz deleted file mode 100644 index 0e329c5..0000000 --- a/neomutt-20170912.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9f0d128fe8dbbbddb67e2b629f8b5e52a9d892f82c735845c1708c14e3046657 -size 2533245 diff --git a/neomutt-c030a8b.patch b/neomutt-c030a8b.patch deleted file mode 100644 index 11fa987..0000000 --- a/neomutt-c030a8b.patch +++ /dev/null @@ -1,103 +0,0 @@ -From c030a8b8ef43f2bc549e4f00651c25681d54f26e Mon Sep 17 00:00:00 2001 -From: Richard Russon -Date: Thu, 14 Sep 2017 17:36:19 +0100 -Subject: [PATCH] fix: %{fmt} date format - -A mistake was introduced when moving the date code to the library. -The dates being displayed were those of the base timezone, not the email. - -Remove the `%<...>` documentation from `$index_format` - -Fixes #757 ---- - init.h | 2 -- - lib/date.c | 12 ++++++++---- - lib/date.h | 2 +- - parse.c | 10 +++++----- - 4 files changed, 14 insertions(+), 12 deletions(-) - -diff --git a/init.h b/init.h -index 247b0f211..4f029f39c 100644 ---- a/init.h -+++ b/init.h -@@ -1584,8 +1584,6 @@ struct Option MuttVars[] = { - ** .dt %(fmt) .dd the local date and time when the message was received. - ** ``fmt'' is expanded by the library function \fCstrftime(3)\fP; - ** a leading bang disables locales -- ** .dt % .dd the current local time. ``fmt'' is expanded by the library -- ** function \fCstrftime(3)\fP; a leading bang disables locales. - ** .dt %>X .dd right justify the rest of the string and pad with character ``X'' - ** .dt %|X .dd pad to the end of the line with character ``X'' - ** .dt %*X .dd soft-fill with character ``X'' as pad -diff --git a/lib/date.c b/lib/date.c -index b1a450a24..5cce4b3f9 100644 ---- a/lib/date.c -+++ b/lib/date.c -@@ -432,7 +432,7 @@ bool is_day_name(const char *s) - * - * The 'timezone' field is optional; it defaults to +0000 if missing. - */ --time_t mutt_parse_date(const char *s, const struct Tz **tz_out) -+time_t mutt_parse_date(const char *s, struct Tz *tz_out) - { - int count = 0; - char *t = NULL; -@@ -537,9 +537,6 @@ time_t mutt_parse_date(const char *s, const struct Tz **tz_out) - zhours = tz->zhours; - zminutes = tz->zminutes; - zoccident = tz->zoccident; -- -- if (tz_out) -- *tz_out = tz; - } - - /* ad hoc support for the European MET (now officially CET) TZ */ -@@ -568,5 +565,12 @@ time_t mutt_parse_date(const char *s, const struct Tz **tz_out) - return -1; - } - -+ if (tz_out) -+ { -+ tz_out->zhours = zhours; -+ tz_out->zminutes = zminutes; -+ tz_out->zoccident = zoccident; -+ } -+ - return (mutt_mktime(&tm, 0) + tz_offset); - } -diff --git a/lib/date.h b/lib/date.h -index ad0eb9c38..fab7a1b8f 100644 ---- a/lib/date.h -+++ b/lib/date.h -@@ -45,7 +45,7 @@ time_t mutt_local_tz(time_t t); - time_t mutt_mktime(struct tm *t, int local); - void mutt_normalize_time(struct tm *tm); - char *mutt_make_date(char *buf, size_t buflen); --time_t mutt_parse_date(const char *s, const struct Tz **tz_out); -+time_t mutt_parse_date(const char *s, struct Tz *tz_out); - bool is_day_name(const char *s); - int mutt_check_month(const char *s); - -diff --git a/parse.c b/parse.c -index 38f46129d..3b8966e1a 100644 ---- a/parse.c -+++ b/parse.c -@@ -835,13 +835,13 @@ int mutt_parse_rfc822_line(struct Envelope *e, struct Header *hdr, char *line, - mutt_str_replace(&e->date, p); - if (hdr) - { -- const struct Tz *tz = NULL; -+ struct Tz tz; - hdr->date_sent = mutt_parse_date(p, &tz); -- if (tz) -+ if (hdr->date_sent > 0) - { -- hdr->zhours = tz->zhours; -- hdr->zminutes = tz->zminutes; -- hdr->zoccident = tz->zoccident; -+ hdr->zhours = tz.zhours; -+ hdr->zminutes = tz.zminutes; -+ hdr->zoccident = tz.zoccident; - } - } - matched = 1; diff --git a/patch-1.5.24.vk.pgp_verbose_mime b/patch-1.5.24.vk.pgp_verbose_mime index 02ef09c..495f382 100644 --- a/patch-1.5.24.vk.pgp_verbose_mime +++ b/patch-1.5.24.vk.pgp_verbose_mime @@ -1,12 +1,12 @@ --- - globals.h | 2 ++ - init.h | 12 ++++++++++++ - ncrypt/pgp.c | 3 ++- - 3 files changed, 16 insertions(+), 1 deletion(-) + globals.h | 2 ++ + init.h | 15 ++++++++++++--- + pgp.c | 3 ++- + 3 files changed, 16 insertions(+), 4 deletions(-) --- globals.h -+++ globals.h 2017-09-11 12:01:55.090752808 +0000 -@@ -292,6 +292,8 @@ WHERE struct Regex PgpDecryptionOkay; ++++ globals.h 2018-07-04 13:31:23.664299582 +0000 +@@ -256,6 +256,8 @@ WHERE char *PgpDefaultKey; WHERE char *PgpSignAs; WHERE short PgpTimeout; WHERE char *PgpEntryFormat; @@ -16,35 +16,38 @@ WHERE char *PgpDecodeCommand; WHERE char *PgpVerifyCommand; --- init.h -+++ init.h 2017-09-11 12:03:41.660816163 +0000 -@@ -3466,6 +3466,18 @@ struct Option MuttVars[] = { ++++ init.h 2018-07-04 13:34:46.696603852 +0000 +@@ -3090,9 +3090,18 @@ struct option_t MuttVars[] = { ** a line quoted text if it also matches $$smileys. This mostly ** happens at the beginning of a line. */ -+ { "pgp_mime_signature_filename", DT_STRING, R_NONE, UL &PgpMimeSignatureFilename, UL "signature.asc"}, +- +- +- ++ { "pgp_mime_signature_filename", DT_STR, R_NONE, UL &PgpMimeSignatureFilename, UL "signature.asc"}, + /* + ** .pp + ** This option sets the filename used for signature parts in PGP/MIME + ** signed messages. + */ -+ { "pgp_mime_signature_description", DT_STRING, R_NONE, UL &PgpMimeSignatureDescription, UL "Digital signature"}, ++ { "pgp_mime_signature_description", DT_STR, R_NONE, UL &PgpMimeSignatureDescription, UL "Digital signature"}, + /* + ** .pp + ** This option sets the Content-Description used for signature parts in + ** PGP/MIME signed messages. + */ - { "smime_ask_cert_label", DT_BOOL, R_NONE, OPT_SMIME_ASK_CERT_LABEL, 1 }, + { "smime_ask_cert_label", DT_BOOL, R_NONE, OPTASKCERTLABEL, 1 }, /* ** .pp ---- ncrypt/pgp.c -+++ ncrypt/pgp.c 2017-09-11 12:01:55.090752808 +0000 -@@ -1208,7 +1208,8 @@ struct Body *pgp_sign_message(struct Bod +--- pgp.c ++++ pgp.c 2018-07-04 13:37:32.013594333 +0000 +@@ -1201,7 +1201,8 @@ BODY *pgp_sign_message (BODY *a) t->disposition = DISPNONE; t->encoding = ENC7BIT; - t->unlink = true; /* ok to remove this file after sending. */ -- mutt_set_parameter("name", "signature.asc", &t->parameter); + t->unlink = 1; /* ok to remove this file after sending. */ +- mutt_set_parameter ("name", "signature.asc", &t->parameter); + mutt_set_parameter ("name", PgpMimeSignatureFilename, &t->parameter); + t->description = safe_strdup (PgpMimeSignatureDescription); - return a; + return (a); } diff --git a/truncate.patch b/truncate.patch new file mode 100644 index 0000000..adb6e93 --- /dev/null +++ b/truncate.patch @@ -0,0 +1,393 @@ +--- + bcache.c | 2 +- + browser.c | 6 +++--- + buffy.c | 4 ++-- + commands.c | 2 +- + imap/browse.c | 2 +- + imap/imap.c | 18 +++++++++--------- + imap/imap_private.h | 2 +- + imap/message.c | 2 +- + lib.c | 2 +- + lib.h | 2 +- + mh.c | 23 +++++++++++++---------- + mutt_sasl.c | 2 +- + mutt_ssl_gnutls.c | 18 +++++++++--------- + pager.c | 2 +- + pgppubring.c | 2 +- + smime.c | 2 +- + sort.c | 2 +- + 17 files changed, 48 insertions(+), 45 deletions(-) + +--- bcache.c ++++ bcache.c 2018-07-05 09:40:49.868105180 +0000 +@@ -128,7 +128,7 @@ FILE* mutt_bcache_get(body_cache_t *bcac + + FILE* mutt_bcache_put(body_cache_t *bcache, const char *id, int tmp) + { +- char path[_POSIX_PATH_MAX]; ++ char path[_POSIX_PATH_MAX+64]; + FILE* fp; + char* s; + struct stat sb; +--- browser.c ++++ browser.c 2018-07-05 09:56:19.671284149 +0000 +@@ -502,7 +502,7 @@ static int examine_directory (MUTTMENU * + static int examine_mailboxes (MUTTMENU *menu, struct browser_state *state) + { + struct stat s; +- char buffer[LONG_STRING]; ++ char buffer[LONG_STRING+16]; + BUFFY *tmp = Incoming; + + if (!Incoming) +@@ -548,7 +548,7 @@ static int examine_mailboxes (MUTTMENU * + if (mx_is_maildir (tmp->path)) + { + struct stat st2; +- char md[_POSIX_PATH_MAX]; ++ char md[_POSIX_PATH_MAX+16]; + + snprintf (md, sizeof (md), "%s/new", tmp->path); + if (stat (md, &s) < 0) +@@ -635,7 +635,7 @@ static int file_tag (MUTTMENU *menu, int + + void _mutt_select_file (char *f, size_t flen, int flags, char ***files, int *numfiles) + { +- char buf[_POSIX_PATH_MAX]; ++ char buf[_POSIX_PATH_MAX+16]; + char prefix[_POSIX_PATH_MAX] = ""; + char helpstr[LONG_STRING]; + char title[STRING]; +--- buffy.c ++++ buffy.c 2018-07-05 09:57:26.138080458 +0000 +@@ -313,8 +313,8 @@ int mutt_parse_mailboxes (BUFFER *path, + static int buffy_maildir_check_dir (BUFFY* mailbox, const char *dir_name, int check_new, + int check_stats) + { +- char path[_POSIX_PATH_MAX]; +- char msgpath[_POSIX_PATH_MAX]; ++ char path[2*_POSIX_PATH_MAX+8]; ++ char msgpath[2*_POSIX_PATH_MAX+8]; + DIR *dirp; + struct dirent *de; + char *p; +--- commands.c ++++ commands.c 2018-07-05 09:58:25.501005161 +0000 +@@ -241,7 +241,7 @@ int mutt_display_message (HEADER *cur) + + void ci_bounce_message (HEADER *h) + { +- char prompt[SHORT_STRING]; ++ char prompt[SHORT_STRING+16]; + char scratch[SHORT_STRING]; + char buf[HUGE_STRING] = { 0 }; + ADDRESS *adr = NULL; +--- lib.c ++++ lib.c 2018-07-05 09:39:44.941278448 +0000 +@@ -583,7 +583,7 @@ int mutt_rmtree (const char* path) + { + DIR* dirp; + struct dirent* de; +- char cur[_POSIX_PATH_MAX]; ++ char cur[2*_POSIX_PATH_MAX+16]; + struct stat statbuf; + int rc = 0; + +--- lib.h ++++ lib.h 2018-07-05 09:45:16.751280528 +0000 +@@ -59,7 +59,7 @@ + + # define HUGE_STRING 8192 + # define LONG_STRING 1024 +-# define STRING 256 ++# define STRING 512 + # define SHORT_STRING 128 + + /* +--- mh.c ++++ mh.c 2018-07-05 09:59:27.119888461 +0000 +@@ -852,7 +852,7 @@ static int maildir_parse_dir (CONTEXT * + + if (subdir) + { +- char tmp[_POSIX_PATH_MAX]; ++ char tmp[2*_POSIX_PATH_MAX+16]; + snprintf (tmp, sizeof (tmp), "%s/%s", subdir, de->d_name); + h->path = safe_strdup (tmp); + } +@@ -1406,7 +1406,7 @@ static void maildir_flags (char *dest, s + + if (hdr && (hdr->flagged || hdr->replied || hdr->read || hdr->deleted || hdr->old || hdr->maildir_flags)) + { +- char tmp[LONG_STRING]; ++ char tmp[LONG_STRING], *ptr; + snprintf (tmp, sizeof (tmp), + "%s%s%s%s%s", + hdr->flagged ? "F" : "", +@@ -1415,7 +1415,10 @@ static void maildir_flags (char *dest, s + NONULL(hdr->maildir_flags)); + if (hdr->maildir_flags) + qsort (tmp, strlen (tmp), 1, ch_compar); +- snprintf (dest, destlen, ":2,%s", tmp); ++ /* snprintf (dest, destlen, ":2,%s", tmp); */ ++ strcpy(dest, ":2,"); ++ ptr = stpncpy(dest+3, tmp, destlen-3); ++ *ptr = '\0'; + } + } + +@@ -1561,7 +1564,7 @@ static int _maildir_commit_message (CONT + char subdir[4]; + char suffix[16]; + char path[_POSIX_PATH_MAX]; +- char full[_POSIX_PATH_MAX]; ++ char full[2*_POSIX_PATH_MAX+16]; + char *s; + + if (safe_fsync_close (&msg->fp)) +@@ -1586,7 +1589,7 @@ static int _maildir_commit_message (CONT + snprintf (path, _POSIX_PATH_MAX, "%s/%lld.%u_%d.%s%s", subdir, + (long long)time (NULL), (unsigned int)getpid (), Counter++, + NONULL (Hostname), suffix); +- snprintf (full, _POSIX_PATH_MAX, "%s/%s", ctx->path, path); ++ snprintf (full, sizeof(full), "%s/%s", ctx->path, path); + + dprint (2, (debugfile, "_maildir_commit_message (): renaming %s to %s.\n", + msg->path, full)); +@@ -1825,9 +1828,9 @@ static int maildir_sync_message (CONTEXT + /* we just have to rename the file. */ + + char newpath[_POSIX_PATH_MAX]; +- char partpath[_POSIX_PATH_MAX]; +- char fullpath[_POSIX_PATH_MAX]; +- char oldpath[_POSIX_PATH_MAX]; ++ char partpath[_POSIX_PATH_MAX+64]; ++ char fullpath[2*_POSIX_PATH_MAX+16]; ++ char oldpath[2*_POSIX_PATH_MAX+16]; + char suffix[16]; + char *p; + +@@ -2371,9 +2374,9 @@ static int mh_check_mailbox (CONTEXT * c + static FILE *_maildir_open_find_message (const char *folder, const char *unique, + const char *subfolder) + { +- char dir[_POSIX_PATH_MAX]; ++ char dir[2*_POSIX_PATH_MAX+16]; + char tunique[_POSIX_PATH_MAX]; +- char fname[_POSIX_PATH_MAX]; ++ char fname[3*_POSIX_PATH_MAX]; + + DIR *dp; + struct dirent *de; +--- mutt_sasl.c ++++ mutt_sasl.c 2018-07-05 10:12:19.509881363 +0000 +@@ -80,7 +80,7 @@ static int getnameinfo_err(int ret) + * a protection buffer. */ + #define MUTT_SASL_MAXBUF 65536 + +-#define IP_PORT_BUFLEN 1024 ++#define IP_PORT_BUFLEN (NI_MAXHOST+NI_MAXSERV+8) + + static sasl_callback_t mutt_sasl_callbacks[5]; + +--- mutt_ssl_gnutls.c ++++ mutt_ssl_gnutls.c 2018-07-05 09:46:09.406328292 +0000 +@@ -862,7 +862,7 @@ static int tls_check_one_certificate (co + menu->max = 25; + menu->dialog = (char **) safe_calloc (1, menu->max * sizeof (char *)); + for (i = 0; i < menu->max; i++) +- menu->dialog[i] = (char *) safe_calloc (1, SHORT_STRING * sizeof (char)); ++ menu->dialog[i] = (char *) safe_calloc (1, STRING * sizeof (char)); + mutt_push_current_menu (menu); + + row = 0; +@@ -898,10 +898,10 @@ static int tls_check_one_certificate (co + dn_country, &buflen) != 0) + dn_country[0] = '\0'; + +- snprintf (menu->dialog[row++], SHORT_STRING, " %s %s", dn_common_name, dn_email); +- snprintf (menu->dialog[row++], SHORT_STRING, " %s", dn_organization); +- snprintf (menu->dialog[row++], SHORT_STRING, " %s", dn_organizational_unit); +- snprintf (menu->dialog[row++], SHORT_STRING, " %s %s %s", ++ snprintf (menu->dialog[row++], STRING, " %s %s", dn_common_name, dn_email); ++ snprintf (menu->dialog[row++], STRING, " %s", dn_organization); ++ snprintf (menu->dialog[row++], STRING, " %s", dn_organizational_unit); ++ snprintf (menu->dialog[row++], STRING, " %s %s %s", + dn_locality, dn_province, dn_country); + row++; + +@@ -937,10 +937,10 @@ static int tls_check_one_certificate (co + dn_country, &buflen) != 0) + dn_country[0] = '\0'; + +- snprintf (menu->dialog[row++], SHORT_STRING, " %s %s", dn_common_name, dn_email); +- snprintf (menu->dialog[row++], SHORT_STRING, " %s", dn_organization); +- snprintf (menu->dialog[row++], SHORT_STRING, " %s", dn_organizational_unit); +- snprintf (menu->dialog[row++], SHORT_STRING, " %s %s %s", ++ snprintf (menu->dialog[row++], STRING, " %s %s", dn_common_name, dn_email); ++ snprintf (menu->dialog[row++], STRING, " %s", dn_organization); ++ snprintf (menu->dialog[row++], STRING, " %s", dn_organizational_unit); ++ snprintf (menu->dialog[row++], STRING, " %s %s %s", + dn_locality, dn_province, dn_country); + row++; + +--- pager.c ++++ pager.c 2018-07-05 09:39:09.533918201 +0000 +@@ -1911,7 +1911,7 @@ mutt_pager (const char *banner, const ch + { + static char searchbuf[STRING] = ""; + char buffer[LONG_STRING]; +- char helpstr[SHORT_STRING*2]; ++ char helpstr[LONG_STRING+SHORT_STRING*2+16]; + char tmphelp[SHORT_STRING*2]; + int i, ch = 0, rc = -1; + int err, first = 1; +--- pgppubring.c ++++ pgppubring.c 2018-07-05 09:46:56.341479401 +0000 +@@ -86,7 +86,7 @@ int main (int argc, char * const argv[]) + char *env_pgppath, *env_home; + + char pgppath[_POSIX_PATH_MAX]; +- char kring[_POSIX_PATH_MAX]; ++ char kring[_POSIX_PATH_MAX+64]; + + while ((c = getopt (argc, argv, "f25sk:S")) != EOF) + { +--- smime.c ++++ smime.c 2018-07-05 10:05:15.813567054 +0000 +@@ -179,7 +179,7 @@ static const char *_mutt_fmt_smime_comma + if (!optional) + { + char path[_POSIX_PATH_MAX]; +- char buf1[LONG_STRING], buf2[LONG_STRING]; ++ char buf1[LONG_STRING], buf2[LONG_STRING+16]; + struct stat sb; + + strfcpy (path, NONULL (SmimeCALocation), sizeof (path)); +--- sort.c ++++ sort.c 2018-07-05 10:17:55.819779642 +0000 +@@ -40,7 +40,7 @@ static sort_t *AuxSort = NULL; + unset_option(OPTAUXSORT); \ + } \ + if (!code) \ +- code = (*((HEADER **)a))->index - (*((HEADER **)b))->index; ++ code = (*((HEADER **)a))->index - (*((HEADER **)b))->index + + static int compare_score (const void *a, const void *b) + { +--- imap/browse.c ++++ imap/browse.c 2018-07-05 09:01:55.262536511 +0000 +@@ -43,7 +43,7 @@ int imap_browse (char* path, struct brow + { + IMAP_DATA* idata; + IMAP_LIST list; +- char buf[LONG_STRING]; ++ char buf[LONG_STRING+64]; + char mbox[LONG_STRING]; + char munged_mbox[LONG_STRING]; + char list_cmd[5]; +--- imap/imap.c ++++ imap/imap.c 2018-07-05 09:55:39.184017284 +0000 +@@ -59,7 +59,7 @@ int imap_access (const char* path) + { + IMAP_DATA* idata; + IMAP_MBOX mx; +- char buf[LONG_STRING]; ++ char buf[LONG_STRING+64]; + char mailbox[LONG_STRING]; + char mbox[LONG_STRING]; + int rc; +@@ -115,7 +115,7 @@ int imap_access (const char* path) + + int imap_create_mailbox (IMAP_DATA* idata, char* mailbox) + { +- char buf[LONG_STRING], mbox[LONG_STRING]; ++ char buf[LONG_STRING+16], mbox[LONG_STRING]; + + imap_munge_mbox_name (idata, mbox, sizeof (mbox), mailbox); + snprintf (buf, sizeof (buf), "CREATE %s", mbox); +@@ -133,7 +133,7 @@ int imap_rename_mailbox (IMAP_DATA* idat + { + char oldmbox[LONG_STRING]; + char newmbox[LONG_STRING]; +- char buf[LONG_STRING]; ++ char buf[2*LONG_STRING+64]; + + imap_munge_mbox_name (idata, oldmbox, sizeof (oldmbox), mx->mbox); + imap_munge_mbox_name (idata, newmbox, sizeof (newmbox), newname); +@@ -148,7 +148,7 @@ int imap_rename_mailbox (IMAP_DATA* idat + + int imap_delete_mailbox (CONTEXT* ctx, IMAP_MBOX mx) + { +- char buf[LONG_STRING], mbox[LONG_STRING]; ++ char buf[LONG_STRING+16], mbox[LONG_STRING]; + IMAP_DATA *idata; + + if (!ctx || !ctx->data) { +@@ -588,7 +588,7 @@ static int imap_open_mailbox (CONTEXT* c + IMAP_DATA *idata; + IMAP_STATUS* status; + char buf[LONG_STRING]; +- char bufout[LONG_STRING]; ++ char bufout[LONG_STRING+64]; + int count = 0; + IMAP_MBOX mx, pmx; + int rc; +@@ -1572,7 +1572,7 @@ int imap_buffy_check (int force, int che + IMAP_DATA* lastdata = NULL; + BUFFY* mailbox; + char name[LONG_STRING]; +- char command[LONG_STRING]; ++ char command[LONG_STRING+64]; + char munged[LONG_STRING]; + int buffies = 0; + +@@ -1663,7 +1663,7 @@ int imap_status (char* path, int queue) + static int queued = 0; + + IMAP_DATA *idata; +- char buf[LONG_STRING]; ++ char buf[LONG_STRING+64]; + char mbox[LONG_STRING]; + IMAP_STATUS* status; + +@@ -1927,7 +1927,7 @@ int imap_search (CONTEXT* ctx, const pat + int imap_subscribe (char *path, int subscribe) + { + IMAP_DATA *idata; +- char buf[LONG_STRING]; ++ char buf[LONG_STRING+64]; + char mbox[LONG_STRING]; + char errstr[STRING]; + BUFFER err, token; +@@ -2054,7 +2054,7 @@ imap_complete_hosts (char *dest, size_t + int imap_complete(char* dest, size_t dlen, char* path) { + IMAP_DATA* idata; + char list[LONG_STRING]; +- char buf[LONG_STRING]; ++ char buf[LONG_STRING+64]; + IMAP_LIST listresp; + char completion[LONG_STRING]; + int clen; +--- imap/imap_private.h ++++ imap/imap_private.h 2018-07-05 09:15:32.671687730 +0000 +@@ -73,7 +73,7 @@ + #define IMAP_CMD_POLL (1<<3) + + /* length of "DD-MMM-YYYY HH:MM:SS +ZZzz" (null-terminated) */ +-#define IMAP_DATELEN 27 ++#define IMAP_DATELEN 37 + + enum + { +--- imap/message.c ++++ imap/message.c 2018-07-05 09:11:45.191822795 +0000 +@@ -753,7 +753,7 @@ int imap_append_message (CONTEXT *ctx, M + { + IMAP_DATA* idata; + FILE *fp; +- char buf[LONG_STRING]; ++ char buf[LONG_STRING+IMAP_DATELEN+SHORT_STRING+64]; + char mbox[LONG_STRING]; + char mailbox[LONG_STRING]; + char internaldate[IMAP_DATELEN]; diff --git a/widechar.sidebar.dif b/widechar.sidebar.dif index 9686df8..dcdd441 100644 --- a/widechar.sidebar.dif +++ b/widechar.sidebar.dif @@ -1,52 +1,53 @@ --- - handler.c | 10 ++++++---- - 1 file changed, 6 insertions(+), 4 deletions(-) + handler.c | 11 ++++++----- + 1 file changed, 6 insertions(+), 5 deletions(-) --- handler.c -+++ handler.c 2017-09-11 12:06:12.982065389 +0000 -@@ -821,6 +821,7 @@ static int text_enriched_handler(struct - enum - { - TEXT, -+ TEXT_GOTWC, - LANGLE, - TAG, - BOGUS_TAG, -@@ -858,7 +859,7 @@ static int text_enriched_handler(struct ++++ handler.c 2018-07-04 13:48:57.285110213 +0000 +@@ -780,7 +780,7 @@ static void enriched_set_flags (const wc + static int text_enriched_handler (BODY *a, STATE *s) + { + enum { +- TEXT, LANGLE, TAG, BOGUS_TAG, NEWLINE, ST_EOF, DONE ++ TEXT, TEXT_GOTWC, LANGLE, TAG, BOGUS_TAG, NEWLINE, ST_EOF, DONE + } state = TEXT; + + long bytes = a->length; +@@ -810,7 +810,7 @@ static int text_enriched_handler (BODY * { if (state != ST_EOF) { -- if (!bytes || (wc = fgetwc(s->fpin)) == WEOF) -+ if (state != TEXT_GOTWC && (!bytes || (fscanf (s->fpin, "%lc", &wc)) == EOF)) - state = ST_EOF; +- if (!bytes || (wc = fgetwc (s->fpin)) == WEOF) ++ if (state != TEXT_GOTWC && (!bytes || (wc = fgetwc (s->fpin)) == WEOF)) + state = ST_EOF; else - bytes--; -@@ -866,6 +867,8 @@ static int text_enriched_handler(struct + bytes--; +@@ -818,6 +818,8 @@ static int text_enriched_handler (BODY * switch (state) { + case TEXT_GOTWC: + state = TEXT; - case TEXT: - switch (wc) - { -@@ -926,9 +929,8 @@ static int text_enriched_handler(struct - enriched_flush(&stte, 1); - else - { -- ungetwc(wc, s->fpin); - bytes++; -- state = TEXT; -+ state = TEXT_GOTWC; - } - break; + case TEXT : + switch (wc) + { +@@ -878,9 +880,8 @@ static int text_enriched_handler (BODY * + enriched_flush (&stte, 1); + else + { +- ungetwc (wc, s->fpin); + bytes++; +- state = TEXT; ++ state = TEXT_GOTWC; + } + break; -@@ -1657,7 +1659,7 @@ void mutt_decode_attachment(struct Body - * all trailing spaces to improve interoperability; if $text_flowed is unset, - * simply verbatim copy input +@@ -1568,7 +1569,7 @@ void mutt_decode_attachment (BODY *b, ST + * strip all trailing spaces to improve interoperability; + * if $text_flowed is unset, simply verbatim copy input */ --static int text_plain_handler(struct Body *b, struct State *s) -+static int text_plain_handler(struct Body *b __attribute__((unused)), struct State *s) +-static int text_plain_handler (BODY *b, STATE *s) ++static int text_plain_handler (BODY *b __attribute__((unused)), STATE *s) { char *buf = NULL; size_t l = 0, sz = 0; From 06ffc2758f53fd40a2175a6797c00157f9ef4843 Mon Sep 17 00:00:00 2001 From: "Dr. Werner Fink" Date: Thu, 5 Jul 2018 11:59:16 +0000 Subject: [PATCH 2/5] Mention bug boo#1094717 OBS-URL: https://build.opensuse.org/package/show/server:mail/mutt?expand=0&rev=183 --- mutt.changes | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mutt.changes b/mutt.changes index 987848c..ea52f31 100644 --- a/mutt.changes +++ b/mutt.changes @@ -1,7 +1,7 @@ ------------------------------------------------------------------- Thu Jul 5 11:41:44 UTC 2018 - werner@suse.de -- Skip neomutt now +- Skip neomutt now (boo#1094717) * There exists a package neomutt * mutt-1.10.0 uses a lot of extensions now like compessed folders and header caching, but still misses things like notmuch From 7112fc4dac66094366cc803a2ee53c06a708f5c1 Mon Sep 17 00:00:00 2001 From: "Dr. Werner Fink" Date: Thu, 5 Jul 2018 12:10:45 +0000 Subject: [PATCH 3/5] . OBS-URL: https://build.opensuse.org/package/show/server:mail/mutt?expand=0&rev=184 --- mutt.spec | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/mutt.spec b/mutt.spec index 7d68e85..8311c39 100644 --- a/mutt.spec +++ b/mutt.spec @@ -38,9 +38,17 @@ BuildRequires: opensp BuildRequires: pkgconfig(gssrpc) BuildRequires: pkgconfig(krb5) BuildRequires: pkgconfig(kyotocabinet) +%if 0%{?suse_version} > 1315 BuildRequires: pkgconfig(libidn2) +%else +BuildRequires: pkgconfig(libidn) +%endif BuildRequires: pkgconfig(libsasl2) +%if 0%{?suse_version} > 1315 BuildRequires: pkgconfig(ncurses) +%else +BuildRequires: ncurses-devel +%endif %if 0%{?suse_version} > 1130 BuildRequires: pkgconfig(shared-mime-info) %endif From 3ac4eddbb32606a389b6d1fc0bc32ea77719913f Mon Sep 17 00:00:00 2001 From: "Dr. Werner Fink" Date: Thu, 5 Jul 2018 12:15:28 +0000 Subject: [PATCH 4/5] . OBS-URL: https://build.opensuse.org/package/show/server:mail/mutt?expand=0&rev=185 --- mutt.spec | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/mutt.spec b/mutt.spec index 8311c39..a047267 100644 --- a/mutt.spec +++ b/mutt.spec @@ -37,7 +37,11 @@ BuildRequires: libxslt-tools BuildRequires: opensp BuildRequires: pkgconfig(gssrpc) BuildRequires: pkgconfig(krb5) +%if 0%{?suse_version} > 1315 BuildRequires: pkgconfig(kyotocabinet) +%else +BuildRequires: libkyotocabinet-devel +%endif %if 0%{?suse_version} > 1315 BuildRequires: pkgconfig(libidn2) %else From d677f0c4daf30262907d5527534f14fa0ae88004 Mon Sep 17 00:00:00 2001 From: "Dr. Werner Fink" Date: Thu, 5 Jul 2018 12:16:14 +0000 Subject: [PATCH 5/5] . OBS-URL: https://build.opensuse.org/package/show/server:mail/mutt?expand=0&rev=186 --- mutt.spec | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/mutt.spec b/mutt.spec index a047267..25fe48f 100644 --- a/mutt.spec +++ b/mutt.spec @@ -228,7 +228,11 @@ $KRB5CFGPATH --version --enable-smtp \ --enable-hcache \ --with-regex \ +%if 0%{?suse_version} > 1315 --with-idn2 +%else + --with-idn +%endif make -C doc clean make make -C doc