]> granicus.if.org Git - mutt/log
mutt
7 years agoImprove the label completion hash table usage.
Kevin McCarthy [Sun, 29 Jan 2017 02:48:08 +0000 (18:48 -0800)]
Improve the label completion hash table usage.

Move the hash table inside the Context.  Hook message arrival/deletion
to update the label hash.

Change the label hash to strdup keys.

Use hash_find_elem when updating the counter, to reduce unnecessary
add/delete operations.

7 years agoAdds label completion.
David Champion [Sun, 29 Jan 2017 02:47:57 +0000 (18:47 -0800)]
Adds label completion.

A global label hash is added, to which labels are added as they're parsed
from a mailbox file or edited manually by the user.  Reference counts are
kept in the hash table so that unused labels are removed from available
completions.  Completion is available in the label editor only, but it
may be feasible to add for search expressions if the preceding text ends
with '~y'.

7 years agoAdd hash_find_elem to get the hash element.
Kevin McCarthy [Sun, 29 Jan 2017 02:47:48 +0000 (18:47 -0800)]
Add hash_find_elem to get the hash element.

This will be used in the following patch for directly manipulating the
label counter.

7 years agoAdd reentrant hash_walk() function for iterating down a hash table.
David Champion [Sun, 29 Jan 2017 02:47:41 +0000 (18:47 -0800)]
Add reentrant hash_walk() function for iterating down a hash table.

7 years agoMinor fixes to the x-label patch from David.
Kevin McCarthy [Sun, 29 Jan 2017 02:47:26 +0000 (18:47 -0800)]
Minor fixes to the x-label patch from David.

Add L10N comment to sort menu.  Mark a couple strings for localization.

Use ascii_strncasecmp() for the X-Label header comparison.

Simplify label_message() using mutt library routines.

Bind label editing to "Y" instead of "y".  "y" is already used in the
default sample muttrc to display mailboxes.

7 years agoAdds capability to edit x-labels inside mutt, and to sort by label.
David Champion [Sun, 29 Jan 2017 02:47:15 +0000 (18:47 -0800)]
Adds capability to edit x-labels inside mutt, and to sort by label.

7 years agoAllow "unsubjectrc *" to remove all patterns.
Kevin McCarthy [Tue, 24 Jan 2017 23:33:23 +0000 (15:33 -0800)]
Allow "unsubjectrc *" to remove all patterns.

Thanks to Aaron Schrab for the original patch.

7 years agoAdd subjectrx command to replace matching subjects with something else.
David Champion [Tue, 24 Jan 2017 03:01:50 +0000 (19:01 -0800)]
Add subjectrx command to replace matching subjects with something else.

This lets you define regular expressions-replacement pairs for subject
display.  When a Subject: matches the regular expression, the replacement
value will be displayed instead in the message index.  Backreferences
are supported.

This is especially nice for simplifying subjects that are overly wordy,
such as mailing list posts (with [Listname] tags, etc), mail from
ticketing systems or bug trackers, etc.  It lets you reduce clutter in
your mutt display without altering the messages themselves.

7 years agoAbstract the SPAM_LIST as a generic REPLACE_LIST
David Champion [Tue, 24 Jan 2017 03:01:36 +0000 (19:01 -0800)]
Abstract the SPAM_LIST as a generic REPLACE_LIST

REPLACE_LIST can be used more generally as a list of pattern
match-replace settings.  SPAM_LIST was a special case of this, so
spam handling has been been changed to use REPLACE_LIST instead, and
SPAM_LIST was removed.

A generic function for performing a REPLACE_LIST replacement has
been added in mutt_apply_replace().

Commited by Kevin McCarthy with some buffer overflow fixes in
mutt_apply_replace().

7 years agoImprove Reply-to vs From comparison when replying. (closes #3909)
Kevin McCarthy [Tue, 24 Jan 2017 02:46:16 +0000 (18:46 -0800)]
Improve Reply-to vs From comparison when replying. (closes #3909)

Prior to this patch, if the Reply-to mailbox matched the From mailbox,
mutt would always use the From address.  This was probably done to
preserve the display name, as the Reply-to address is often missing one.

Unfortunately, there are circumstances where the Reply-to display-name
has significance, such as in ticket 3909.

Change mutt so that it only uses the From address if the Reply-To has
no display-name.

7 years agoFix sidebar references to the "new count" to be "unread". (closes #3908)
Kevin McCarthy [Thu, 19 Jan 2017 22:58:13 +0000 (14:58 -0800)]
Fix sidebar references to the "new count" to be "unread". (closes #3908)

%N in $sidebar_format and "new"in $sidebar_sort_method actually use
the unread message count.  Update the documentation to mention that.

Add an "unread" method to $sidebar_sort_method, but preserve "new" for
compatibility.

Change the SORT_COUNT_NEW constant to SORT_UNREAD, so the code is also
consistent with the meaning.

Thanks to cri for reporting the problem and suggesting where to fix it
in the code.

7 years agoFix several alias hashtable issues.
Kevin McCarthy [Wed, 18 Jan 2017 00:09:16 +0000 (16:09 -0800)]
Fix several alias hashtable issues.

Convert to use the strdup keys hash.  Addresses can be converted back
and forth from intl to local forms.  This frees and recreates a new
addr->mailbox string, resulting in the hash table key being a dangling
pointer.

Change alias hash table insert/remove to ensure the address is in intl
form.  The alias menu (previously) converted address entries to local
form when performing a completion.  Even with the pointer issue fixed,
the entries may not be removed from the hash if the intl and local
forms are different.

Lastly, there is no reason for the alias menu to manually convert to
local form before writing the address to the output buffer.
rfc822_write_address() has a display parameter that will call
mutt_addr_for_display() instead when set.  Change to set the display
parameter and remove the conversion calls.

This last change obviates the first two changes, but they are a good idea
in any case.

7 years agoAdd casecmp and strdup_key flags to hash_create()
Kevin McCarthy [Wed, 18 Jan 2017 00:09:11 +0000 (16:09 -0800)]
Add casecmp and strdup_key flags to hash_create()

Aliases and (in the future), X-Label hashes will require a hash that
strdups the key.  Convert the casecmp parameter of hash_create() to a
flags parameter, and add a flag to strdup the keys.

7 years agoImprove error handling in mbox magic detection.
Kevin McCarthy [Sun, 15 Jan 2017 18:00:55 +0000 (10:00 -0800)]
Improve error handling in mbox magic detection.

Thanks to Simon Ruderich for pointing out several small issues with
the previous commit.

7 years agoAllow initial blank lines in local mailboxes.
David Champion [Sun, 15 Jan 2017 03:18:45 +0000 (19:18 -0800)]
Allow initial blank lines in local mailboxes.

Some mailbox-creation tools erroneously append a blank line to a file
before appending a UNIXv7-format mail message, resulting in mailboxes
that are intended to be valid "mbox" folders but are not.  Notably old
versions of Mailman do this, making archive files that cannot be read by
mutt.

This patch causes mutt to skip leading NLs and CRs when detecting magic.

7 years agoFix minor documentation issues.
Simon Ruderich [Tue, 10 Jan 2017 22:48:08 +0000 (14:48 -0800)]
Fix minor documentation issues.

manual.xml:
Wrap line for clarity.

muttrc.man:
Remove superfluous spaces in brackets.
Add missing error object in color command.
Sort the prompt object.
Add sidebar color objects.

7 years agoConvert cmd_parse_search to use the uid hash. (closes #3905)
Kevin McCarthy [Fri, 6 Jan 2017 22:37:48 +0000 (14:37 -0800)]
Convert cmd_parse_search to use the uid hash. (closes #3905)

Replace the linear scan for each result with a hash lookup.  This
should greatly improve performance for large mailboxes.

7 years agoCreate a uid hash for imap. (see #3905)
Kevin McCarthy [Fri, 6 Jan 2017 22:23:28 +0000 (14:23 -0800)]
Create a uid hash for imap. (see #3905)

This hash will allow for more efficient UID SEARCH processing,
replacing a linear scan with a hash lookup.

7 years agoConvert HASH to be indexable by unsigned int. (see #3905)
Kevin McCarthy [Fri, 6 Jan 2017 22:17:10 +0000 (14:17 -0800)]
Convert HASH to be indexable by unsigned int. (see #3905)

Convert the HASH to be usable for either string or unsigned int keys,
so that a uid hash can be added for imap.

To keep hash-usage code disruption to a minimum, this introduces new
create/insert/find/delete functions for the int hash, but keeps the
old function names for string keys.

This implementation makes the key a union.  It may have been a better
idea to introduce a whole new structure, but this way allows minimum
changes to and maximum reuse of the existing hash code.

7 years agoFix imap server-side search to call uid2msgno() only once. (see #3905)
Kevin McCarthy [Thu, 5 Jan 2017 03:45:59 +0000 (19:45 -0800)]
Fix imap server-side search to call uid2msgno() only once. (see #3905)

After performing a UID SEARCH, the results are parsed in
cmd_parse_search().  This was accidentally calling uid2msgno() twice.
Since that function does a linear search, this has a noticable impact
on large search results.

7 years agoAdd a pattern_cache_t to speed up a few repeated matches.
Kevin McCarthy [Tue, 3 Jan 2017 02:08:17 +0000 (18:08 -0800)]
Add a pattern_cache_t to speed up a few repeated matches.

Vincent Lefèvre reported experiencing an index display performance
issue.  This occurred with messages containing many recipients.  He
had many index color lines containing ~l.  The ~l ended up being run
over and over on these messages, resulting in a noticable slowdown
displaying the index.

This patch adds caching for just a few of the pattern operations (~l,
~u, ~p, ~P) that are potentially expensive and also don't have
arguments.  The caching is only enabled for operations repeatedly
matching against the same message: color, hooks, scoring.

The caching is fairly targeted, but isn't that invasive or
complicated.

7 years agoCanonicalize line endings for GPGME S/MIME encryption. (closes #3904)
Kevin McCarthy [Sun, 1 Jan 2017 03:57:07 +0000 (19:57 -0800)]
Canonicalize line endings for GPGME S/MIME encryption. (closes #3904)

This matches the behavior for S/MIME classic mode: OpenSSL converts
the line endings to cr/lf before encrypting.  Although Mutt always
canonicalizes the line endings before verifying the signature, some
clients do not do this for encrypted messages.

Thanks to cooler for the patch!

7 years agoMake to_chars and status_chars accept mulitibyte characters. (closes #3024)
Kevin McCarthy [Tue, 27 Dec 2016 23:23:37 +0000 (15:23 -0800)]
Make to_chars and status_chars accept mulitibyte characters. (closes #3024)

Change Tochars and StChars to use the mbchars_table type introduced in
the last commit.

7 years agoCreate mbchar_table type for multibyte character arrays. (see #3024)
Kevin McCarthy [Tue, 27 Dec 2016 23:23:19 +0000 (15:23 -0800)]
Create mbchar_table type for multibyte character arrays. (see #3024)

This type is to allow multibyte characters in to_chars and
status_chars while preserving efficient indexing to each character.

The arrays are tokenized during initialization, and are re-tokenized
as the values are unset, reset, and set.

8 years agoIn the manual, replaced 2 para by example (similar to the first example).
Vincent Lefevre [Sun, 25 Dec 2016 22:31:01 +0000 (23:31 +0100)]
In the manual, replaced 2 para by example (similar to the first example).

8 years agoAdd option to control whether threads uncollapse when new mail arrives.
David Champion [Tue, 13 Dec 2016 20:19:05 +0000 (12:19 -0800)]
Add option to control whether threads uncollapse when new mail arrives.

Adds $uncollapse_new: when set, the default, a collapsed thread into
which a new message arrives will be uncollapsed to reveal the new
message.

8 years agoRemove unused OPS
Richard Russon [Tue, 13 Dec 2016 20:02:08 +0000 (12:02 -0800)]
Remove unused OPS

OP_MAIN_FIRST_MESSAGE and OP_MAIN_LAST_MESSAGE were added to the
code 19 years ago.  They weren't used then; they haven't been used since.

8 years agoRework OpenSSL certificate verification to support alternative chains. (closes #3903)
Michał Kępień [Tue, 13 Dec 2016 19:16:10 +0000 (11:16 -0800)]
Rework OpenSSL certificate verification to support alternative chains. (closes #3903)

The way Mutt currently verifies SSL certificates using OpenSSL does
not support alternative chains, which may cause confusion when some
popular mail providers (e.g. Gmail) are used with specific sets of
trusted CA certificates.

Replace the "manual" verification done by mutt in
check_certificate_by_signer() with SSL_set_verify() using a callback.
OpenSSL then does the certificate verification, including properly
looking at alternative chains.  The callback still provides the
opportunity to override using ~/.mutt_certificates or an interactive
prompt.

8 years agoAdd setenv/unsetenv commands.
David Champion [Mon, 12 Dec 2016 02:56:59 +0000 (18:56 -0800)]
Add setenv/unsetenv commands.

These can be used to add and remove environment variables passed to
children via mutt_system().

Commited by Kevin McCarthy with some cleanup.

8 years agoMove '@' pattern modifier documentation to the right section.
Kevin McCarthy [Wed, 7 Dec 2016 03:07:32 +0000 (19:07 -0800)]
Move '@' pattern modifier documentation to the right section.

Somehow, the patch got out of date and the documentation shifted to
another section.  Relocate back to the "Pattern Modifier" section.

8 years agomerge stable
Kevin McCarthy [Mon, 5 Dec 2016 00:04:29 +0000 (16:04 -0800)]
merge stable

8 years agomutt-1.7.2 signed
Kevin McCarthy [Mon, 5 Dec 2016 00:03:00 +0000 (16:03 -0800)]
mutt-1.7.2 signed

8 years agoAdded tag mutt-1-7-2-rel for changeset 99f5624d1f52
Kevin McCarthy [Mon, 5 Dec 2016 00:01:49 +0000 (16:01 -0800)]
Added tag mutt-1-7-2-rel for changeset 99f5624d1f52

8 years agoautomatic post-release commit for mutt-1.7.2 mutt-1-7-2-rel
Kevin McCarthy [Mon, 5 Dec 2016 00:01:32 +0000 (16:01 -0800)]
automatic post-release commit for mutt-1.7.2

8 years agomerge stable
Kevin McCarthy [Sun, 4 Dec 2016 23:41:33 +0000 (15:41 -0800)]
merge stable

8 years agoChange sidebar_spoolfile coloring to be lower precedence.
Kevin McCarthy [Sat, 3 Dec 2016 23:24:32 +0000 (15:24 -0800)]
Change sidebar_spoolfile coloring to be lower precedence.

Give sidebar_new and sidebar_flagged higher precedence than
sidebar_spoolfile, so that new and flagged message colors will show up
for the spoolfile in the sidebar.

Thanks to Till Smejkal for the original patch.

8 years agoReturn to pager upon aborting a jump operation. (closes #3901)
Kevin McCarthy [Wed, 30 Nov 2016 01:48:33 +0000 (17:48 -0800)]
Return to pager upon aborting a jump operation. (closes #3901)

8 years agoAdd mutt_array_size macro, change interactive_check_cert() to use it. (see #3899)
Kevin McCarthy [Wed, 30 Nov 2016 01:44:37 +0000 (17:44 -0800)]
Add mutt_array_size macro, change interactive_check_cert() to use it.  (see #3899)

While I have reservations about the construct, it does make the
interactive_check_cert() menu->max and part loop less fragile.

8 years agoImprove openssl interactive_check_cert. (closes #3899)
Kevin McCarthy [Wed, 30 Nov 2016 01:44:31 +0000 (17:44 -0800)]
Improve openssl interactive_check_cert. (closes #3899)

Don't use X509_NAME_oneline() with a fixed size buffer, which could
truncate the string, perhaps leaving off the CN field entirely.
Instead, work directly off the X509_NAME.

Rather than use strstr to tokenize it, call
X509_NAME_get_text_by_NID() with the nid types.  Although
X509_NAME_get_text_by_NID() is "legacy", it is the most directly
useful for mutt in this simple interactive prompt.

The function was set up to include the ST and C fields in the prompt,
but the loop limit was too low.  I believe this was an oversight, so
increase the loop to include those two fields.

8 years agoFix build failure with GPGME 1.8: do not steal the gpgme_ prefix.
Vincent Lefevre [Fri, 25 Nov 2016 23:57:42 +0000 (00:57 +0100)]
Fix build failure with GPGME 1.8: do not steal the gpgme_ prefix.

8 years agoFix build failure with GPGME 1.8: do not steal the gpgme_ prefix.
Vincent Lefevre [Fri, 25 Nov 2016 23:57:42 +0000 (00:57 +0100)]
Fix build failure with GPGME 1.8: do not steal the gpgme_ prefix.

8 years agoCorrected comment.
Vincent Lefevre [Tue, 22 Nov 2016 02:48:10 +0000 (03:48 +0100)]
Corrected comment.

8 years agoRevert db13010a2e8d but add a comment. (see #3870)
Kevin McCarthy [Tue, 22 Nov 2016 02:03:20 +0000 (18:03 -0800)]
Revert db13010a2e8d but add a comment. (see #3870)

X509_NAME_oneline() always NULL-terminates the string, even when it
has to truncate the data to fit in buf.

8 years agoMake sure that the output of X509_NAME_oneline is null-terminated.
Vincent Lefevre [Mon, 21 Nov 2016 22:10:47 +0000 (23:10 +0100)]
Make sure that the output of X509_NAME_oneline is null-terminated.

8 years agoMinor resource and error logic cleanup in tunnel_socket_open()
Kevin McCarthy [Mon, 21 Nov 2016 00:19:18 +0000 (16:19 -0800)]
Minor resource and error logic cleanup in tunnel_socket_open()

Free the conn->sockdata on failure.  conn->fd is not set until the
bottom, and before it is set, conn->conn_close() will not be called.

Close the pin pipe if the pout pipe fails.

Call mutt_perror first on a fork failure.  Calling after the close()
may cause errno to be changed on a close failure.

8 years agoDon't close stderr when opening a tunnel. (closes #3726)
Kevin McCarthy [Mon, 21 Nov 2016 00:19:17 +0000 (16:19 -0800)]
Don't close stderr when opening a tunnel. (closes #3726)

Instead of closing stderr, redirect it to /dev/null in
tunnel_socket_open().  Otherwise a program can accidentally open a
file into handle 2 and then unknowingly use that when trying to print
to stderr.

Thanks to lotheac for the original patch, which I just modified
slightly.

8 years agoMore openssl1.1 fixes: remove uses of X509->name in debugging. (closes #3870)
Kevin McCarthy [Sun, 20 Nov 2016 03:35:07 +0000 (19:35 -0800)]
More openssl1.1 fixes: remove uses of X509->name in debugging. (closes #3870)

X509->name was a shortcut for the longer
  name = X509_NAME_oneline (X509_get_subject_name (cert),
    buf, sizeof (buf));
invocation.  Change the debugging to print the cert name and chain
names in the ssl_check_certificate() loop instead.

8 years agoMore openssl1.1 fixes: remove uses of X509->name in debugging. (closes #3870)
Kevin McCarthy [Sun, 20 Nov 2016 03:35:07 +0000 (19:35 -0800)]
More openssl1.1 fixes: remove uses of X509->name in debugging. (closes #3870)

X509->name was a shortcut for the longer
  name = X509_NAME_oneline (X509_get_subject_name (cert),
    buf, sizeof (buf));
invocation.  Change the debugging to print the cert name and chain
names in the ssl_check_certificate() loop instead.

8 years agoUpdated French translation.
Vincent Lefevre [Sun, 20 Nov 2016 00:41:49 +0000 (01:41 +0100)]
Updated French translation.

8 years agoFix mark-message translation and keybind menu.
Kevin McCarthy [Fri, 18 Nov 2016 23:54:27 +0000 (15:54 -0800)]
Fix mark-message translation and keybind menu.

Move the OP_MARK_MESSAGE and hotkey macro from MENU_GENERIC to the
MENU_MAIN keymap.  Putting the macro under generic prevents it from
overriding a keybinding in the index (even if the function is bound to
noop).  Additionally, the macro can only be executed from the index,
so it doesn't make sense as a generic keybinding.

Use the term "hotkey" in both the OPS and km_bind description.

Mark the km_bind description translatable.

Add L10N messages for the new translation strings.

8 years agoImprove two compress translation messages.
Kevin McCarthy [Fri, 18 Nov 2016 22:20:54 +0000 (14:20 -0800)]
Improve two compress translation messages.

Change the "Error executing" to "Error running", which is used in
multiple places elsewhere in mutt.  This also removes the
unnecessary newline.

Remove the leading space in the "Error compressing" message, and
change it to match the error message in editmsg.c.

8 years agoUpdated French translation.
Vincent Lefevre [Fri, 18 Nov 2016 17:17:02 +0000 (18:17 +0100)]
Updated French translation.

8 years agoMake a string translatable.
Vincent Lefevre [Fri, 18 Nov 2016 16:00:23 +0000 (17:00 +0100)]
Make a string translatable.

8 years agoMake a string translatable. Add a missing space at the end.
Vincent Lefevre [Fri, 18 Nov 2016 15:59:22 +0000 (16:59 +0100)]
Make a string translatable. Add a missing space at the end.

8 years agoUpdated French translation (except for 1 string).
Vincent Lefevre [Fri, 18 Nov 2016 12:07:59 +0000 (13:07 +0100)]
Updated French translation (except for 1 string).

8 years agoUpdated requirement on the C compiler.
Vincent Lefevre [Fri, 18 Nov 2016 11:32:46 +0000 (12:32 +0100)]
Updated requirement on the C compiler.

8 years agoRevert changes made to mutt_find_cfg() in 3c6d322912e3
Kevin McCarthy [Fri, 18 Nov 2016 01:54:35 +0000 (17:54 -0800)]
Revert changes made to mutt_find_cfg() in 3c6d322912e3

The usage of MUTT_VERSION in mutt_find_cfg() was fine before the
commit: it wasn't using MUTT_VERSION inlined into a string with format
string substitution.

Revert to the version of mutt_find_cfg() before that changeset.

8 years agoAdds <mark-message> binding to create "hotkeys" for messages.
David Champion [Thu, 17 Nov 2016 23:57:42 +0000 (15:57 -0800)]
Adds <mark-message> binding to create "hotkeys" for messages.

<mark-message>foo<enter> will create a new macro "'foo" which will
return to the current message by searching for that message's
message id.  The initial character of the macro is defined by
$mark_macro_prefix, and defaults to "'" for verisimilitude vs. vi.

Pushed by Kevin McCarthy with a minor fix.

8 years agoBackout inlining of MUTT_VERSION in 42fee7585fae.
Kevin McCarthy [Thu, 17 Nov 2016 23:07:14 +0000 (15:07 -0800)]
Backout inlining of MUTT_VERSION in 42fee7585fae.

If MUTT_VERSION contains a %, this will result in problems.

8 years agoAdds the '@' pattern modifier to limit matches to known aliases.
David Champion [Thu, 17 Nov 2016 00:05:02 +0000 (16:05 -0800)]
Adds the '@' pattern modifier to limit matches to known aliases.

Example: ~f joe matches messages from joe. @~f joe matches messages from
any joe who is defined as an alias.

Pushed by Kevin McCarthy with two minor cosmetic fixes.

8 years agoWhen $flag_safe is set, flagged messages cannot be deleted.
David Champion [Wed, 16 Nov 2016 23:43:50 +0000 (15:43 -0800)]
When $flag_safe is set, flagged messages cannot be deleted.

This saves them from bulk operations on threads and tagged messages.  To
remove a flagged message, first unflag it.

8 years agoFix muttbug to check $XDG_CONFIG_HOME.
Kevin McCarthy [Tue, 15 Nov 2016 20:04:16 +0000 (12:04 -0800)]
Fix muttbug to check $XDG_CONFIG_HOME.

Fall back to $HOME/.config if $XDG_CONFIG_HOME is not set.

8 years agoFix loop terminator in in mutt_find_cfg().
Kevin McCarthy [Tue, 15 Nov 2016 20:03:58 +0000 (12:03 -0800)]
Fix loop terminator in in mutt_find_cfg().

Keep searching even if home is NULL.

8 years agoEnsure the compressed documentation is always built.
Kevin McCarthy [Mon, 14 Nov 2016 19:02:17 +0000 (11:02 -0800)]
Ensure the compressed documentation is always built.

Add USE_COMPRESSED to makedoc-defs.h so any conditional documentation
will always be built.

8 years agoCompress: check mailbox type if possible when appending.
Kevin McCarthy [Mon, 14 Nov 2016 04:02:36 +0000 (20:02 -0800)]
Compress: check mailbox type if possible when appending.

If an append hook isn't defined, then mutt has to decompress the
mailbox.  In that case, we can check the type of the decompressed
mailbox instead of defaulting to DefaultMagic.

8 years agoCompress: escape single quotes when invoking the compress/decompress commands.
Kevin McCarthy [Mon, 14 Nov 2016 04:02:36 +0000 (20:02 -0800)]
Compress: escape single quotes when invoking the compress/decompress commands.

The format strings are placed in single quotes.  mutt_system() invokes
sh, so escape the single quotes using bourne-shell syntax: '\''

8 years agoCompress: fix check_mailbox and sync_mailbox.
Kevin McCarthy [Mon, 14 Nov 2016 04:02:35 +0000 (20:02 -0800)]
Compress: fix check_mailbox and sync_mailbox.

Change check_mailbox to delegate to the child_ops->check_mailbox if
the compressed mailbox has changed.  This allows the mailbox to
properly recover if both the decompressed mailbox and compressed file
have changed.

Change sync_mailbox to call check_mailbox before attempting to sync.
This will prevent overwriting external changes to the compressed
mailbox.

8 years agoCreate mx_ops.sync operation. Refactor compress to use the mx_ops.sync.
Kevin McCarthy [Mon, 14 Nov 2016 04:02:35 +0000 (20:02 -0800)]
Create mx_ops.sync operation.  Refactor compress to use the mx_ops.sync.

Change compress.sync_mailbox() to lock the compressed mailbox around
both the tempfile sync and compress operations.  This will prevent
changes made inbetween the two syncs from being overwritten.

Thanks to Damien Riegel for his original patch refactoring
mx_ops.sync, which this patch is partially based upon.

8 years agoCompress: pull the lock/unlock operations into the open,close,sync operations.
Kevin McCarthy [Mon, 14 Nov 2016 04:02:35 +0000 (20:02 -0800)]
Compress: pull the lock/unlock operations into the open,close,sync operations.

Some operations, such as open_append and sync, need an exclusive lock
across a longer period than a single compress/decompress.  Remove it
from the execute_command and pull into the outer callers.  Store lock
information inside compress_info.

Sync and check_mailbox need more fixes, which will be addressed in
subsequent patches.

8 years agoCompress: safe_fopen() the tempfile, to prevent tempfile attacks.
Kevin McCarthy [Mon, 14 Nov 2016 04:02:35 +0000 (20:02 -0800)]
Compress: safe_fopen() the tempfile, to prevent tempfile attacks.

8 years agoCompress: add delegate calls to open_append and close mx_ops functions.
Kevin McCarthy [Mon, 14 Nov 2016 04:02:34 +0000 (20:02 -0800)]
Compress: add delegate calls to open_append and close mx_ops functions.

The open_append and close were partially duplicating mbox open_append
and close operations internally.  Change it to call the actual
delegate functions instead.

Inline the open_read() function inside open_mailbox().  Having it
split improved nothing and just complicated the code (i.e. added
error-handling checks in open_mailbox() that in reality could not
fail).

8 years agoCompress: fix several logic and memory bugs.
Kevin McCarthy [Mon, 14 Nov 2016 04:02:34 +0000 (20:02 -0800)]
Compress: fix several logic and memory bugs.

setup_paths leaks memory: realpath is already set in mx_open_mailbox()

restore_paths is unneeded.  mx_fastclose_mailbox() will free stuff,
and nothing is looking at the path once we are closing or aborting.

Make a copy of the hooks.  Otherwise 'unhook *' will leave dangling
pointers.

Add compress_info freeing inside mx_fastclose_mailbox().  Only free
inside compress.c when we want to prevent close() from doing anything.

close_mailbox() didn't preserve ctx->path on error.

execute_command() didn't return an error if the mutt_system() command
failed.

mx_open_mailbox_append() should check mutt_comp_can_append() only for
the case that the mailbox doesn't exist.  When it exists,
mx_get_magic() has already looked at the file contents before checking
for matching open_hooks.

In open_append_mailbox() if no append hook is defined, it should't
call ci->open() if the mailbox doesn't exist.  It should act just like
append and create a temporary file.

check_mailbox() needs more work.  For now, at least have it properly
close the mailbox on error.

8 years agoCompress: remove buffy stats "improvisation".
Kevin McCarthy [Mon, 14 Nov 2016 04:02:34 +0000 (20:02 -0800)]
Compress: remove buffy stats "improvisation".

Mutt doesn't support polling compressed mailboxes.  This code creates
a false impression and dirties mutt_save_message() in the process.  I
don't like it, so am taking it out.

8 years agoCompress: prefix external functions with "mutt_"
Kevin McCarthy [Mon, 14 Nov 2016 04:02:33 +0000 (20:02 -0800)]
Compress: prefix external functions with "mutt_"

Also, include compress.h in compress.c so the mx_comp_ops doesn't need
to be redeclared.

8 years agoCompress patch from the neomutt repository.
Kevin McCarthy [Mon, 14 Nov 2016 04:02:33 +0000 (20:02 -0800)]
Compress patch from the neomutt repository.

With the following changes:
- po/de.po changes trimmed to just the compress additions.

- Move the sample muttrc to contrib, and add it to the Makefile.am so it is
  distributed.  Remove the sample vimrc.

- Remove extra fluff from manual.

Thanks to Roland Rosenfeld for the original patch, and to the NeoMutt
team for their work cleaning up the patch.

8 years agosearch muttrc file according to XDG Base Specification (closes #3207)
Damien Riegel [Mon, 14 Nov 2016 02:45:35 +0000 (18:45 -0800)]
search muttrc file according to XDG Base Specification (closes #3207)

First of all, the MUTT_VERSION symbol is now concatenated (when
possible) at compile time.

Then, the logic to find the config file has been changed a bit to remove
unnecessary calls to access(), so now each possible locations for the
config file is only tested once, and it stops as soon as a valid one has
been found. So instead of:

  access("/home/dkc/.muttrc-1.7.1", F_OK) = -1 ENOENT (No such file or directory)
  access("/home/dkc/.muttrc", F_OK)       = 0
  access("/home/dkc/.muttrc", F_OK)       = 0
  access("/home/dkc/.muttrc", F_OK)       = 0
  [... Tests for Muttrc ... ]
  access("/home/dkc/.muttrc", F_OK)       = 0

We now have:

  access("/home/dkc/.muttrc-1.7+13 (f658e517960e)", F_OK) = -1 ENOENT (No such file or directory)
  access("/home/dkc/.muttrc", F_OK)       = 0

It also cleans up the case where -F is passed on the command line but
points to a non-existent file by moving the error path closer to the
actual fail condition.

Finally, it adds partial support for the XDG Base Directory
Specification. mutt will now try to locate its config at:

  $XDG_CONFIG_HOME/mutt/muttrc-MUTT_VERSION
  $XDG_CONFIG_HOME/mutt/muttrc.

If XDG_CONFIG_HOME is not set, it will use '~/.config' as a default.

8 years agoMove mbox close-append logic inside mbox_close_mailbox().
Kevin McCarthy [Tue, 8 Nov 2016 20:42:56 +0000 (12:42 -0800)]
Move mbox close-append logic inside mbox_close_mailbox().

The mx_fastclose_mailbox() calls mx_ops->close(), which invokes
mbox_close_mailbox().

Also, close the ctx->fp inside mbox_close_mailbox().  This way, the
(to be added) compress logic can call the mx_ops->close() instead of
"knowing" to close the fp before recompressing.

mx_fastclose_mailbox() will safe_fclose() the fp again, but I'm
leaving it there just in case I missed a usage of the fp in some other
part of the code.

Thanks to Damien Riegel for the original patch.

8 years agoChain %d->%F->%f in the attachment menu.
Kevin McCarthy [Tue, 8 Nov 2016 02:10:27 +0000 (18:10 -0800)]
Chain %d->%F->%f in the attachment menu.

Previously, %d would use %f if there was no description set.

Place the new %F option in between %d and %f.  This way, %d will fall
back on %F, which will fall back on %f.  This allows the standard
attachment menu to show d_filename.

This is useful for forwarding attachments or editing draft files with
attachments.  In these cases the actual filename is sanitized but the
attachment name is preserved in d_filename.

8 years agocompose: add operation to rename an attachment
Damien Riegel [Tue, 8 Nov 2016 02:10:22 +0000 (18:10 -0800)]
compose: add operation to rename an attachment

As opposed to rename-file, which actually renames the underlying file
of the attachment, rename-attachment puts a value in d_filename, which
is used in the Content-Disposition header.

8 years agoattach_format: add new %F placeholder
Damien Riegel [Tue, 8 Nov 2016 02:06:13 +0000 (18:06 -0800)]
attach_format: add new %F placeholder

This new placeholder allows to print the attachment name as it will be
seen on the recipient side.

8 years agoDefine PATH_MAX, it's missing on the GNU Hurd. (closes #3815)
Kevin McCarthy [Thu, 3 Nov 2016 22:49:50 +0000 (15:49 -0700)]
Define PATH_MAX, it's missing on the GNU Hurd. (closes #3815)

I believe this patch originally came from Debian.

Modified based on a suggestion from Fabian Groffen.

8 years agoFixed issue from changeset 4da647a80c55. (closes #3892)
Vincent Lefevre [Thu, 3 Nov 2016 09:17:13 +0000 (10:17 +0100)]
Fixed issue from changeset 4da647a80c55. (closes #3892)

Shell variables cannot be used in the first argument of AC_CHECK_HEADERS.

8 years agoAttempt to silence a clang range warning. (closes #3891)
Kevin McCarthy [Thu, 3 Nov 2016 01:54:06 +0000 (18:54 -0700)]
Attempt to silence a clang range warning. (closes #3891)

When TM_YEAR_MAX > INT_MAX, clang complains the comparison is always false.

Note that this is really a compiler bug, which was fixed by gcc 9 years ago.
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=12963

Thanks to Vincent Lefèvre for the suggested fix and the gcc bug reference.

8 years agoMake ncurses and ncursesw header checking the same.
Kevin McCarthy [Thu, 3 Nov 2016 01:27:09 +0000 (18:27 -0700)]
Make ncurses and ncursesw header checking the same.

Previously, ncurses.h wasn't searched for directly in the include
directory for ncursesw.

Also, fix a test in case $withval is empty.

Thanks to Sylvain Bertrand for the original patch.

8 years agoAdd a --disable-doc configuration option.
Kevin McCarthy [Tue, 1 Nov 2016 03:30:44 +0000 (20:30 -0700)]
Add a --disable-doc configuration option.

This allows mutt to be built without the documentation.

Thanks to Sylvain Bertrand for the original patch.

8 years agoPerform charset conversion on text attachments when piping. (closes #3773) (see ...
Kevin McCarthy [Sun, 23 Oct 2016 22:11:56 +0000 (15:11 -0700)]
Perform charset conversion on text attachments when piping. (closes #3773) (see #3886)

When piping a text attachment, there is no reliable way to know the
charset used.

Vincent Lefèvre says:
  It was decided in the past that when there is no information on the
  charset in a transmission to an external command (e.g. as for mail
  composing), texts are expected to be transmitted in the local
  charset.

Add a MUTT_CHARSET flag to enable charset conversion on text
attachments for both when $attach_split is set and unset.

8 years agomerge stable
Kevin McCarthy [Sun, 23 Oct 2016 21:49:07 +0000 (14:49 -0700)]
merge stable

8 years agoFix pager segfault when lineInfo.chunks overflows. (closes #3888)
Kevin McCarthy [Sun, 23 Oct 2016 21:46:37 +0000 (14:46 -0700)]
Fix pager segfault when lineInfo.chunks overflows. (closes #3888)

The reporter had an html attachment with extremely long lines,
combined with a color pattern of "color body default default ."
This overflowed the lineInfo.chunks, causing a segfault.

Abort the body color patterns if this happens.

8 years agomerge stable
Kevin McCarthy [Sun, 23 Oct 2016 20:47:14 +0000 (13:47 -0700)]
merge stable

8 years agoPrevent an integer overflow in mutt_mktime() (closes #3880)
Kevin McCarthy [Sun, 23 Oct 2016 20:43:56 +0000 (13:43 -0700)]
Prevent an integer overflow in mutt_mktime() (closes #3880)

Check to make sure the year passed in isn't bigger than can be
represented using time_t on the platform.

Also add a (time_t) cast to an intermediate "years * 365" calculation
to prevent an overflow there.

Thanks to TAKAHASHI Tamotsu for his patch, and to Vincent Lefèvre for
his improvement.  I merely took their code and commited it.

8 years agoUpdated French translation.
Vincent Lefevre [Thu, 20 Oct 2016 08:30:36 +0000 (10:30 +0200)]
Updated French translation.

8 years agoAdd root-message function to jump to root message in thread.
Kevin McCarthy [Wed, 19 Oct 2016 20:21:16 +0000 (13:21 -0700)]
Add root-message function to jump to root message in thread.

This seems like a useful feature that was brought up for discussion on
mutt-users.  Proposed solutions involved collapsing/uncollapsing
threads, but it's not hard to modify the mutt_parent_message()
function to return the root instead.

8 years agomerge stable
Kevin McCarthy [Mon, 17 Oct 2016 18:23:30 +0000 (11:23 -0700)]
merge stable

8 years agoActually fix gpgme segfault in create_recipient_set().
Kevin McCarthy [Mon, 17 Oct 2016 18:22:13 +0000 (11:22 -0700)]
Actually fix gpgme segfault in create_recipient_set().

Changeset 6e44bfa16096 did not fix the segv.  (Sorry, I made the fix
based off a report on IRC but didn't trigger the segv myself: it was
caused by an out-of-tree patch).

The actual problem was that the rset was only resized on a successful
gpgme_get_key().  However, on error, the array still needs to be
NULL-terminated before calling free_recipient_set().

Move the resize so it always takes place.  This obviates the need for
the NULL check added in 6e44bfa16096.

8 years agoChange sidebar to only match $folder prefix on a $sidebar_divider_char. (closes ...
Kevin McCarthy [Sun, 16 Oct 2016 22:44:17 +0000 (15:44 -0700)]
Change sidebar to only match $folder prefix on a $sidebar_divider_char. (closes #3887)

The reporter had a $spoolfile of ~/Mailbox and a $folder of ~/Mail.
The sidebar was truncating the spoolfile to "ox" because it only
looked at a substring prefix match.

8 years agomerge stable
Kevin McCarthy [Sun, 16 Oct 2016 22:14:32 +0000 (15:14 -0700)]
merge stable

8 years agoUse mutt_strlen and mutt_strncmp in sidebar.c.
Kevin McCarthy [Sun, 16 Oct 2016 22:12:33 +0000 (15:12 -0700)]
Use mutt_strlen and mutt_strncmp in sidebar.c.

This prevents a segv if folder is unset.

8 years agomerge stable
Kevin McCarthy [Sun, 16 Oct 2016 21:17:51 +0000 (14:17 -0700)]
merge stable

8 years agoFix gpgme segfault in create_recipient_set().
Kevin McCarthy [Sun, 16 Oct 2016 21:16:47 +0000 (14:16 -0700)]
Fix gpgme segfault in create_recipient_set().

If gpgme_get_key() errors on the first key, the rset will not be
allocated yet.  Attempting to null-terminate (and then free) the array
causes a segfault.

8 years agoAllow IPv6 literal addresses in URLs. (closes #3681)
Kevin McCarthy [Sat, 15 Oct 2016 21:45:55 +0000 (14:45 -0700)]
Allow IPv6 literal addresses in URLs. (closes #3681)

RFCs 2732 and 3986 specify a literal IPv6 address be surrounded by
"[]".

This patch removes the "[]" delimiters when parsing the URL, but adds
them back in url_ciss_tostring() if the host name contains a ':'.

Thanks to Evgeni Golov for the original patch.