changeset: 6777:ba5d900a90db
user:      Kevin McCarthy <ke...@8t8.us>
date:      Fri Sep 02 19:32:39 2016 -0700
link:      http://dev.mutt.org/hg/mutt/rev/ba5d900a90db

Disable ~X when message scoring.  (closes #3861)

mutt_score_message() purposely passes a NULL context to
mutt_pattern_exec().  The idea was to block slow patterns, and the
scoring documentation notes this by saying:

  "For efficiency reasons, patterns which scan information not
  available in the index, such as ~b, ~B or ~h, may not be used"

~X needs the context to parse the messages (during message scoring at
least), and thus isn't suitable for message scoring either.

Block ~X from being used when the context is NULL.  Add ~X to the list
of patterns noted as unusable in the message scoring documentation.

changeset: 6778:7a53de8c9251
user:      Kevin McCarthy <ke...@8t8.us>
date:      Fri Sep 02 19:33:35 2016 -0700
link:      http://dev.mutt.org/hg/mutt/rev/7a53de8c9251

merge stable

diffs (431 lines):

diff -r eef1e8abc46f -r 7a53de8c9251 browser.c
--- a/browser.c Fri Sep 02 16:20:37 2016 -0700
+++ b/browser.c Fri Sep 02 19:33:35 2016 -0700
@@ -176,11 +176,12 @@
          tnow = time (NULL);
          t_fmt = tnow - folder->ff->mtime < 31536000 ? "%b %d %H:%M" : "%b %d  
%Y";
        }
-       if (do_locales)
-         setlocale(LC_TIME, NONULL (Locale)); /* use environment if $locale is 
not set */
-       else
-         setlocale(LC_TIME, "C");
-       strftime (date, sizeof (date), t_fmt, localtime (&folder->ff->mtime));
+
+        if (!do_locales)
+          setlocale (LC_TIME, "C");
+        strftime (date, sizeof (date), t_fmt, localtime (&folder->ff->mtime));
+        if (!do_locales)
+          setlocale (LC_TIME, "");
 
        mutt_format_s (dest, destlen, fmt, date);
       }
diff -r eef1e8abc46f -r 7a53de8c9251 crypt-gpgme.c
--- a/crypt-gpgme.c     Fri Sep 02 16:20:37 2016 -0700
+++ b/crypt-gpgme.c     Fri Sep 02 19:33:35 2016 -0700
@@ -869,13 +869,11 @@
 {
   char p[STRING];
 
-  setlocale (LC_TIME, "");
 #ifdef HAVE_LANGINFO_D_T_FMT
   strftime (p, sizeof (p), nl_langinfo (D_T_FMT), localtime (&t));
 #else
   strftime (p, sizeof (p), "%c", localtime (&t));
 #endif
-  setlocale (LC_TIME, "C");
   state_attach_puts (p, s);
 }
 
@@ -2815,9 +2813,6 @@
        }
        *p = 0;
 
-       if (do_locales && Locale)
-         setlocale (LC_TIME, Locale);
-        
         {
          time_t tt = 0;
 
@@ -2826,11 +2821,13 @@
 
           tm = localtime (&tt);
         }
-       strftime (buf2, sizeof (buf2), dest, tm);
-
-       if (do_locales)
-         setlocale (LC_TIME, "C");
-        
+
+        if (!do_locales)
+          setlocale (LC_TIME, "C");
+        strftime (buf2, sizeof (buf2), dest, tm);
+        if (!do_locales)
+          setlocale (LC_TIME, "");
+
        snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
        snprintf (dest, destlen, fmt, buf2);
        if (len > 0)
@@ -3371,9 +3368,6 @@
   int i;
   gpgme_user_id_t uid = NULL;
 
-  if (Locale)
-    setlocale (LC_TIME, Locale);
-
   is_pgp = key->protocol == GPGME_PROTOCOL_OpenPGP;
 
   for (idx = 0, uid = key->uids; uid; idx++, uid = uid->next)
@@ -3613,9 +3607,6 @@
           putc ('\n', fp);
         }
     }
-
-  if (Locale)
-    setlocale (LC_TIME, "C");
 }
 
 
diff -r eef1e8abc46f -r 7a53de8c9251 crypt.c
--- a/crypt.c   Fri Sep 02 16:20:37 2016 -0700
+++ b/crypt.c   Fri Sep 02 19:33:35 2016 -0700
@@ -64,9 +64,7 @@
   if (option (OPTCRYPTTIMESTAMP))
   {
     t = time(NULL);
-    setlocale (LC_TIME, "");
     strftime (p, sizeof (p), _(" (current time: %c)"), localtime (&t));
-    setlocale (LC_TIME, "C");
   }
   else
     *p = '\0';
diff -r eef1e8abc46f -r 7a53de8c9251 doc/manual.xml.head
--- a/doc/manual.xml.head       Fri Sep 02 16:20:37 2016 -0700
+++ b/doc/manual.xml.head       Fri Sep 02 19:33:35 2016 -0700
@@ -3624,8 +3624,8 @@
 <para>
 Another typical use for this command is to change the values of the
 <link linkend="attribution">$attribution</link>, <link
-linkend="signature">$signature</link> and <link
-linkend="locale">$locale</link> variables in order to change the
+linkend="attribution-locale">$attribution_locale</link>, and <link
+linkend="signature">$signature</link> variables in order to change the
 language of the attributions and signatures based upon the recipients.
 </para>
 
@@ -3837,8 +3837,8 @@
 <emphasis>pattern</emphasis> is a string in the format described in the
 <link linkend="patterns">patterns</link> section (note: For efficiency
 reasons, patterns which scan information not available in the index,
-such as <literal>~b</literal>, <literal>~B</literal> or
-<literal>~h</literal>, may not be used).  <emphasis>value</emphasis> is
+such as <literal>~b</literal>, <literal>~B</literal>, <literal>~h</literal>,
+or <literal>~X</literal> may not be used).  <emphasis>value</emphasis> is
 a positive or negative integer.  A message's final score is the sum
 total of all matching <command>score</command> entries.  However, you
 may optionally prefix <emphasis>value</emphasis> with an equal sign
diff -r eef1e8abc46f -r 7a53de8c9251 edit.c
--- a/edit.c    Fri Sep 02 16:20:37 2016 -0700
+++ b/edit.c    Fri Sep 02 19:33:35 2016 -0700
@@ -29,6 +29,7 @@
 #include <stdio.h>
 #include <string.h>
 #include <stdlib.h>
+#include <locale.h>
 #include <ctype.h>
 #include <sys/stat.h>
 #include <fcntl.h>
@@ -160,7 +161,9 @@
       /* add the attribution */
       if (Attribution)
       {
+        setlocale (LC_TIME, NONULL (AttributionLocale));
        mutt_make_string (tmp, sizeof (tmp) - 1, Attribution, Context, 
Context->hdrs[n]);
+        setlocale (LC_TIME, "");
        strcat (tmp, "\n");     /* __STRCAT_CHECKED__ */
       }
 
diff -r eef1e8abc46f -r 7a53de8c9251 globals.h
--- a/globals.h Fri Sep 02 16:20:37 2016 -0700
+++ b/globals.h Fri Sep 02 19:33:35 2016 -0700
@@ -36,6 +36,7 @@
 WHERE char *AssumedCharset;
 WHERE char *AttachSep;
 WHERE char *Attribution;
+WHERE char *AttributionLocale;
 WHERE char *AttachCharset;
 WHERE char *AttachFormat;
 WHERE char *Charset;
@@ -66,7 +67,6 @@
 #endif
 WHERE char *Inbox;
 WHERE char *Ispell;
-WHERE char *Locale;
 WHERE char *MailcapPath;
 WHERE char *Maildir;
 #if defined(USE_IMAP) || defined(USE_POP)
diff -r eef1e8abc46f -r 7a53de8c9251 hdrline.c
--- a/hdrline.c Fri Sep 02 16:20:37 2016 -0700
+++ b/hdrline.c Fri Sep 02 19:33:35 2016 -0700
@@ -383,9 +383,6 @@
        }
        *p = 0;
 
-       if (do_locales && Locale)
-         setlocale (LC_TIME, Locale);
-
        if (op == '[' || op == 'D')
          tm = localtime (&hdr->date_sent);
        else if (op == '(')
@@ -406,10 +403,11 @@
          tm = gmtime (&T);
        }
 
-       strftime (buf2, sizeof (buf2), dest, tm);
-
-       if (do_locales)
-         setlocale (LC_TIME, "C");
+        if (!do_locales)
+          setlocale (LC_TIME, "C");
+        strftime (buf2, sizeof (buf2), dest, tm);
+        if (!do_locales)
+          setlocale (LC_TIME, "");
 
        mutt_format_s (dest, destlen, prefix, buf2);
        if (len > 0 && op != 'd' && op != 'D') /* Skip ending op */
diff -r eef1e8abc46f -r 7a53de8c9251 init.h
--- a/init.h    Fri Sep 02 16:20:37 2016 -0700
+++ b/init.h    Fri Sep 02 19:33:35 2016 -0700
@@ -266,6 +266,18 @@
   ** in a reply.  For a full listing of defined \fCprintf(3)\fP-like sequences 
see
   ** the section on $$index_format.
   */
+  { "attribution_locale", DT_STR, R_NONE, UL &AttributionLocale, UL "" },
+  /*
+  ** .pp
+  ** The locale used by \fCstrftime(3)\fP to format dates in the
+  ** $attribution string.  Legal values are the strings your system
+  ** accepts for the locale environment variable \fC$$$LC_TIME\fP.
+  ** .pp
+  ** This variable is to allow the attribution date format to be
+  ** customized by recipient or folder using hooks.  By default, Mutt
+  ** will use your locale environment, so there is no need to set
+  ** this except to override that default.
+  */
   { "auto_tag",                DT_BOOL, R_NONE, OPTAUTOTAG, 0 },
   /*
   ** .pp
@@ -599,8 +611,8 @@
   ** function to process the date, see the man page for the proper syntax.
   ** .pp
   ** Unless the first character in the string is a bang (``!''), the month
-  ** and week day names are expanded according to the locale specified in
-  ** the variable $$locale. If the first character in the string is a
+  ** and week day names are expanded according to the locale.
+  ** If the first character in the string is a
   ** bang, the bang is discarded, and the month and week day names in the
   ** rest of the string are expanded in the \fIC\fP locale (that is in US
   ** English).
@@ -1395,12 +1407,6 @@
   ** from your spool mailbox to your $$mbox mailbox, or as a result of
   ** a ``$mbox-hook'' command.
   */
-  { "locale",          DT_STR,  R_BOTH, UL &Locale, UL "C" },
-  /*
-  ** .pp
-  ** The locale used by \fCstrftime(3)\fP to format dates. Legal values are
-  ** the strings your system accepts for the locale environment variable 
\fC$$$LC_TIME\fP.
-  */
   { "mail_check",      DT_NUM,  R_NONE, UL &BuffyTimeout, 5 },
   /*
   ** .pp
diff -r eef1e8abc46f -r 7a53de8c9251 main.c
--- a/main.c    Fri Sep 02 16:20:37 2016 -0700
+++ b/main.c    Fri Sep 02 19:33:35 2016 -0700
@@ -597,15 +597,14 @@
     exit(1);
   }
 
+  setlocale (LC_ALL, "");
+
 #ifdef ENABLE_NLS
   /* FIXME what about init.c:1439 ? */
-  setlocale (LC_ALL, "");
   bindtextdomain (PACKAGE, MUTTLOCALEDIR);
   textdomain (PACKAGE);
 #endif
 
-  setlocale (LC_CTYPE, "");
-
   mutt_error = mutt_nocurses_error;
   mutt_message = mutt_nocurses_error;
   SRAND (time (NULL));
diff -r eef1e8abc46f -r 7a53de8c9251 mbyte.c
--- a/mbyte.c   Fri Sep 02 16:20:37 2016 -0700
+++ b/mbyte.c   Fri Sep 02 19:33:35 2016 -0700
@@ -530,6 +530,7 @@
   if (wc == (wchar_t)0x200f ||   /* bidi markers: #3827 */
       wc == (wchar_t)0x200e ||
       wc == (wchar_t)0x00ad ||   /* soft hyphen: #3848 */
+      wc == (wchar_t)0xfeff ||   /* zero width no-break space */
       (wc >= (wchar_t)0x202a &&  /* misc directional markers: #3854 */
        wc <= (wchar_t)0x202e))
     return 1;
diff -r eef1e8abc46f -r 7a53de8c9251 mutt_ssl.c
--- a/mutt_ssl.c        Fri Sep 02 16:20:37 2016 -0700
+++ b/mutt_ssl.c        Fri Sep 02 19:33:35 2016 -0700
@@ -1123,6 +1123,7 @@
   }
   unset_option(OPTIGNOREMACROEVENTS);
   mutt_menuDestroy (&menu);
+  set_option (OPTNEEDREDRAW);
   dprint (2, (debugfile, "ssl interactive_check_cert: done=%d\n", done));
   return (done == 2);
 }
diff -r eef1e8abc46f -r 7a53de8c9251 muttlib.c
--- a/muttlib.c Fri Sep 02 16:20:37 2016 -0700
+++ b/muttlib.c Fri Sep 02 19:33:35 2016 -0700
@@ -311,6 +311,26 @@
   }
 }
 
+LIST *mutt_copy_list (LIST *p)
+{
+  LIST *t, *r=NULL, *l=NULL;
+
+  for (; p; p = p->next)
+  {
+    t = (LIST *) safe_malloc (sizeof (LIST));
+    t->data = safe_strdup (p->data);
+    t->next = NULL;
+    if (l)
+    { 
+      r->next = t;
+      r = r->next;
+    }
+    else
+      l = r = t;
+  }
+  return (l);
+}
+
 HEADER *mutt_dup_header(HEADER *h)
 {
   HEADER *hnew;
diff -r eef1e8abc46f -r 7a53de8c9251 pattern.c
--- a/pattern.c Fri Sep 02 16:20:37 2016 -0700
+++ b/pattern.c Fri Sep 02 19:33:35 2016 -0700
@@ -1142,6 +1142,7 @@
       /*
        * ctx can be NULL in certain cases, such as when replying to a message 
from the attachment menu and
        * the user has a reply-hook using "~h" (bug #2190).
+       * This is also the case when message scoring.
        */
       if (!ctx)
              return 0;
@@ -1215,6 +1216,8 @@
     case MUTT_DUPLICATED:
       return (pat->not ^ (h->thread && h->thread->duplicate_thread));
     case MUTT_MIMEATTACH:
+      if (!ctx)
+        return 0;
       {
       int count = mutt_count_body_parts (ctx, h);
       return (pat->not ^ (count >= pat->min && (pat->max == MUTT_MAXRANGE ||
diff -r eef1e8abc46f -r 7a53de8c9251 pgpkey.c
--- a/pgpkey.c  Fri Sep 02 16:20:37 2016 -0700
+++ b/pgpkey.c  Fri Sep 02 19:33:35 2016 -0700
@@ -195,15 +195,14 @@
        }
        *p = 0;
 
-       if (do_locales && Locale)
-         setlocale (LC_TIME, Locale);
 
        tm = localtime (&key->gen_time);
 
-       strftime (buf2, sizeof (buf2), dest, tm);
-
-       if (do_locales)
-         setlocale (LC_TIME, "C");
+        if (!do_locales)
+          setlocale (LC_TIME, "C");
+        strftime (buf2, sizeof (buf2), dest, tm);
+        if (!do_locales)
+          setlocale (LC_TIME, "");
 
        snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
        snprintf (dest, destlen, fmt, buf2);
diff -r eef1e8abc46f -r 7a53de8c9251 send.c
--- a/send.c    Fri Sep 02 16:20:37 2016 -0700
+++ b/send.c    Fri Sep 02 19:33:35 2016 -0700
@@ -34,6 +34,7 @@
 
 #include <ctype.h>
 #include <stdlib.h>
+#include <locale.h>
 #include <unistd.h>
 #include <string.h>
 #include <errno.h>
@@ -323,26 +324,6 @@
   }
 }
 
-LIST *mutt_copy_list (LIST *p)
-{
-  LIST *t, *r=NULL, *l=NULL;
-
-  for (; p; p = p->next)
-  {
-    t = (LIST *) safe_malloc (sizeof (LIST));
-    t->data = safe_strdup (p->data);
-    t->next = NULL;
-    if (l)
-    {
-      r->next = t;
-      r = r->next;
-    }
-    else
-      l = r = t;
-  }
-  return (l);
-}
-
 void mutt_forward_intro (FILE *fp, HEADER *cur)
 {
   char buffer[STRING];
@@ -401,7 +382,9 @@
   char buffer[LONG_STRING];
   if (Attribution)
   {
+    setlocale (LC_TIME, NONULL (AttributionLocale));
     mutt_make_string (buffer, sizeof (buffer), Attribution, ctx, cur);
+    setlocale (LC_TIME, "");
     fputs (buffer, out);
     fputc ('\n', out);
   }
diff -r eef1e8abc46f -r 7a53de8c9251 sort.h
--- a/sort.h    Fri Sep 02 16:20:37 2016 -0700
+++ b/sort.h    Fri Sep 02 19:33:35 2016 -0700
@@ -36,9 +36,19 @@
 #define SORT_FLAGGED   17
 #define SORT_PATH      18
 
-/* dgc: Sort & SortAux are shorts, so I'm bumping these bitflags up from
- * bits 4 & 5 to bits 8 & 9 to make room for more sort keys in the future. */
-#define SORT_MASK      0xff
+/* Sort and sort_aux are shorts, and are a composite of a
+ * constant sort operation number and a set of compounded
+ * bitflags.
+ *
+ * Everything below SORT_MASK is a constant. There's room for
+ * SORT_MASK constant SORT_ values.
+ *
+ * Everything above is a bitflag. It's OK to move SORT_MASK
+ * down by powers of 2 if we need more, so long as we don't
+ * collide with the constants above. (Or we can just expand
+ * sort and sort_aux to uint32_t.)
+ */
+#define SORT_MASK      ((1<<8) - 1)
 #define SORT_REVERSE   (1<<8)
 #define SORT_LAST      (1<<9)
 

Reply via email to