Kevin McCarthy [Wed, 23 Oct 2019 11:17:09 +0000 (19:17 +0800)]
Add typelen parameter to rfc1524_mailcap_lookup().
Because of mime_lookup commands, the call to mutt_check_lookup_list()
inside the function can modify the passed in type. Add an explicit
length parameter to the function, rather than assume the parameter
size. This also makes it more evident the type parameter can be
modified to callers.
Change the len parameter to mutt_check_lookup_list() to type size_t,
just to be correct about it.
Kevin McCarthy [Sun, 20 Oct 2019 06:06:24 +0000 (14:06 +0800)]
Remove make_key_attachment parameter.
The parameter is not actually used anywhere. The next commit will
convert the classic pgp implementation to use the buffer pool. This
change will simplify the logic.
Kevin McCarthy [Thu, 17 Oct 2019 10:34:55 +0000 (18:34 +0800)]
Clean up pager change folder aborts to return to pager.
Changing folder from within the pager behaved inconsistently when
aborting, or upon a normal error. It would sometimes return the pager
and other times return to the index.
Ensure it returns to the pager, except in the case where
mx_close_mailbox() fails due to a new mail or reopen event. In that
case we likely want to be in the index - the message we were viewing
could have disappeared or relocated.
Kevin McCarthy [Thu, 17 Oct 2019 09:30:03 +0000 (17:30 +0800)]
Remove menu->menu hack when redirecting pager ops through index.
As noted in commit a327386c, this causes problems when redirecting ops
that open new menus. There is no need to change the menu->menu type,
as a flag works perfectly well with no such side effects.
This also removes the need for comments explaning the hack before
mutt_folder_hooks() when changing folders, or before displaying a
message in the pager.
Kevin McCarthy [Thu, 17 Oct 2019 07:48:31 +0000 (15:48 +0800)]
Stable branch quick fix for pager change-mailbox push/exec bug.
The menu functions mutt_push/pop_current_menu() keep track of the menu
stack, automatically setting CurrentMenu when exiting menus.
The only gotcha was the function sharing between the index and pager
menus. The index uses a hack, setting menu->menu to MENU_PAGER for
operations redirecting through the index and back to the pager
afterwards.
I thought this was covered by the restoration of the menu before
returning to the pager, or when exiting the index switch. However it
is not: invoking other menus, such as the browser, will result in
CurrentMenu being set to the Pager when exiting those (by
mutt_pop_current_menu()). This can result in folder hooks failing for
unshared functions.
A better fix is to remove the hack of using menu->menu, because this
can easily cause a problem in the future in other situations. (I will
make this fix in master next.) For the stable branch, I am explicitly
setting/restoring CurrentMenu before invoking the folder hooks.
Kevin McCarthy [Wed, 16 Oct 2019 07:42:54 +0000 (15:42 +0800)]
Convert pgp_app_handler to use buffer pool.
Rename the pgp_copy_checksig() and mutt_wait_filter() return code
variables to provide more clarity, and to make the purpose and
assignment of rc more obvious.
Change tmpfname creation failure to be like pgpoutfile and
pgperrfile, by going to the cleanup point.
Kevin McCarthy [Sun, 13 Oct 2019 08:25:54 +0000 (16:25 +0800)]
Update mime fields when piping a message with $pipe_decode set.
Programs that process the message may get confused if the original
mime fields are in the output. Add the CH_MIME flag to strip mime
headers and CH_TXTPLAIN to add decoded text mime headers in their
place, just as <decode-copy> does.
However, make sure not to add the flags when printing, as printers
highly likely won't care and users probably don't want to see those
headers in their printout.
Beck, Andre [Fri, 11 Oct 2019 11:17:58 +0000 (19:17 +0800)]
Clear connection input buffer when closing.
An RFC-violating reply from the Dovecot SMTP submission service
uncovered a bug in Mutt. Mutt was not clearing out the input buffer
when closing the connection.
Dovecot was including an extra 250 response after data submission:
DATA
354 OK
Subject: Test 3
Test 3
.
250 2.0.0 223 byte chunk, total 223
250 2.0.0 OK id=1iIqT1-0004wS-Ac
quit
221 2.0.0 Bye
The multiline 250 reply requires a hyphen in the first response. Mutt
closes the connection after the quit, but ends up leaving the
unexpected second line in the input buffer. This causes an error in
the next usage of the connection.
Clean out bufpos and available when closing the socket.
Kevin McCarthy [Thu, 10 Oct 2019 07:03:05 +0000 (15:03 +0800)]
Add new browse-mailboxes function in index and pager.
This allows direct access to the mailboxes list in the folder menu.
This is useful, for instance, if $browser_sticky_cursor is set and the
current directory does not contain the open mailbox. The macro
version will lose the current mailbox while toggling to the mailboxes
list.
Kevin McCarthy [Wed, 9 Oct 2019 04:59:41 +0000 (12:59 +0800)]
Convert main() to use buffers for paths.
Convert fpath (used for checking and creating $folder.
Convert expanded_infile and tempfile which are used for the -i,-H, and
-E options. We allocate buffers, rather than use the pool, because
they are used for the duration of the compose/send operation.
Kevin McCarthy [Sun, 6 Oct 2019 05:37:14 +0000 (13:37 +0800)]
Convert mutt_parse_hook() to use buffer pool.
Remove the path variable, as this is not needed:
mutt_buffer_expand_path() and mutt_check_simple() can operate directly
on the pattern/command buffers.
Kevin McCarthy [Tue, 1 Oct 2019 01:50:27 +0000 (18:50 -0700)]
Memcpy header cache fetch values to ensure alignment.
While testing the hcache buffer pool changes, I noticed a misaligned
pointer warning when using LMDB.
The other header cache backends must ensure alignment of the pointer
they return, but LMDB apparently does not.
Instead of directly assigning and dereferencing the pointer fetched,
use memcpy to the appropriate type, just as the header cache restore
operation does.
Kevin McCarthy [Wed, 25 Sep 2019 22:28:30 +0000 (15:28 -0700)]
Convert crypt-gpgme to use BUFFER for tempfiles.
Use the pool where possible, but when the function calls other
long-running functions (such as mutt_body_handler() or
mutt_do_pager()), allocate the buffer.
smime_gpgme_decrypt_mime() was not freeing the "cur" BODY generated on
error. Add a call to mutt_free_body(cur) in the error handling.
Kevin McCarthy [Sun, 22 Sep 2019 01:34:51 +0000 (18:34 -0700)]
Fix mutt_save_message() "enter_fname()" to use buffer version.
Commit be632f11 converted this function to use the buffer pool, but
accidentally used the non-buffer prompt when there was already a
buffer-converted version.
Kevin McCarthy [Sun, 15 Sep 2019 22:41:42 +0000 (15:41 -0700)]
Improve sidebar indentation and shortpath behavior.
The previous implementation only enabled $sidebar_folder_indent for
mailboxes underneath $folder. Change indentation to be based upon the
previous common-path mailbox in the list. Indent one more than the
common-path mailbox, rather than the number of delimiters after
$folder.
Change $sidebar_short_path to shorten based on the previous mailbox in
the list too.
Invoke mutt_buffer_pretty_mailbox() to prefix the mailbox with '~' or
'=' characters. This changes the output for the case where mailbox
equals $folder, but provides uniform display behavior across mutt.
Thanks to Christopher Zimmermann (@madroach) for the original patch,
which this commit is based upon.
Kevin McCarthy [Wed, 11 Sep 2019 22:55:01 +0000 (15:55 -0700)]
Convert mutt_display_message() to buffer pool.
Remove an unused mime-type string generation at the top of the
function too. The code using the mime type was removed a long time
ago in commit 246198ae.
Kevin McCarthy [Tue, 10 Sep 2019 01:32:59 +0000 (18:32 -0700)]
Fix mutt_write_mime_body() application/pgp-encrypted handling.
It would blindly overwrite any attachment with that type, as if it
were the version label part of a multipart/encrypted message.
However attachments with extenstion .gpg are labeled that type if
$mime_type_query_command is set to "xdg-mime query filetype". This
would cause the attachment to be overwritten too.
Add a check for a missing body->filename, which should only be the
case for the manually constructed part.
Kevin McCarthy [Sun, 8 Sep 2019 19:09:51 +0000 (12:09 -0700)]
Rename browser fields to display_name and full_path.
Mailbox and Folder view don't make use of the desc field. They store
an abbreviated version in the name field and expand it when selecting
or testing it.
IMAP stores the full URL in name, and stores an abbreviated
version (possibly with a trailing slash) in the desc field.
The asymetricity makes it awkward, and interferes with a smart-cursor
option in the next commit. So instead rename the fields to
"display_name" and "full_path".
In Mailfox and Folder view, store the fully expanded path, which we
have while iterating, in "full_path", and the shortened version in
"display_name".
Likewise in IMAP, store the full URL in "full_path" and the shortened
version in "display_name".
Simplify the code in browser.c to use the full_path instead of
concatenating and expanding.
Kevin McCarthy [Mon, 2 Sep 2019 02:10:23 +0000 (19:10 -0700)]
Fix memory leak when attaching messages.
Setting actx->idx[]->content->parts to NULL causes a memory leak,
because message attachments store a BODY there that needs to be freed.
I looked through the various use cases of ci_send_message() and
actually believe content->parts will be NULL for all other cases
except message attachments. From the comment added to
delete_attachment():
Other ci_send_message() message constructors are careful to free
any body->parts, removing depth:
- mutt_prepare_template() used by postponed, resent, and draft files
- mutt_copy_body() used by the recvattach menu and $forward_attachments.
I believe it is safe to completely remove the "content->parts =
NULL" statement. But for safety, am doing so only for the case
it must be avoided: message attachments.