Re: attachment file name is not decoded
RFC2047 encoding MUST NOT be used for MIME parameters.
Still, mutt has an option, rfc2047_parameters, that can turn on
RFC2047 decoding of MIME parameters.
On 2004-02-04 15:39:01 +0900, Yasuhiro Matsumoto wrote:
> From: Yasuhiro Matsumoto <mattn_jp@xxxxxxxxxxx>
> To: mutt-dev@xxxxxxxx
> Date: Wed, 04 Feb 2004 15:39:01 +0900
> Subject: attachment file name is not decoded
> X-Spam-Level:
>
> Hi, all
>
> The filename of attachments is not decoded with rfc2048.
>
> I'm using mutt on Fedora Core 1.
> and it recommends the utf-8 character set.
> in japanese, we often attach a file to the mail, which contained multibyte
> character.
> (of course, i _don't_ do such a thing. ;-)
>
> Then, we can't see the real filename on mutt.
> (It is encoded with base64)
>
> I made a patch for this problem.
> Please check and include.
>
> Thanks.
>
> _________________________________________________________________
> Tired of spam? Get advanced junk mail protection with MSN 8.
> http://join.msn.com/?page=features/junkmail
> Index: recvattach.c
> ===================================================================
> RCS file: /home/roessler/cvs/mutt/recvattach.c,v
> retrieving revision 3.12
> diff -c -r3.12 recvattach.c
> *** recvattach.c 4 Oct 2003 20:35:00 -0000 3.12
> --- recvattach.c 4 Feb 2004 05:43:17 -0000
> ***************
> *** 21,26 ****
> --- 21,27 ----
> #include "mutt_curses.h"
> #include "mutt_menu.h"
> #include "rfc1524.h"
> + #include "rfc2047.h"
> #include "mime.h"
> #include "mailbox.h"
> #include "attach.h"
> ***************
> *** 244,259 ****
> case 'f':
> if(!optional)
> {
> if (aptr->content->filename && *aptr->content->filename == '/')
> {
> char path[_POSIX_PATH_MAX];
>
> ! strfcpy (path, aptr->content->filename, sizeof (path));
> mutt_pretty_mailbox (path);
> mutt_format_s (dest, destlen, prefix, path);
> }
> else
> ! mutt_format_s (dest, destlen, prefix, NONULL
> (aptr->content->filename));
> }
> else if(!aptr->content->filename)
> optional = 0;
> --- 245,269 ----
> case 'f':
> if(!optional)
> {
> + char *dest_dup;
> if (aptr->content->filename && *aptr->content->filename == '/')
> {
> char path[_POSIX_PATH_MAX];
>
> ! dest_dup = safe_strdup (NONULL (aptr->content->filename));
> ! rfc2047_decode (&dest_dup);
> ! strfcpy (path, dest_dup, sizeof (path));
> ! FREE (&dest_dup);
> mutt_pretty_mailbox (path);
> mutt_format_s (dest, destlen, prefix, path);
> }
> else
> ! {
> ! dest_dup = safe_strdup (NONULL (aptr->content->filename));
> ! rfc2047_decode (&dest_dup);
> ! mutt_format_s (dest, destlen, prefix, dest_dup);
> ! FREE (&dest_dup);
> ! }
> }
> else if(!aptr->content->filename)
> optional = 0;
> ***************
> *** 338,343 ****
> --- 348,354 ----
> mutt_FormatString (dest, destlen, ifstring, mutt_attach_fmt, data, 0);
> else if (flags & M_FORMAT_OPTIONAL)
> mutt_FormatString (dest, destlen, elsestring, mutt_attach_fmt, data,
> 0);
> +
> return (src);
> }
>
> ***************
> *** 374,383 ****
> --- 385,400 ----
>
> if (body->filename)
> {
> + char *dest_dup;
> if (directory && *directory)
> mutt_concat_path (buf, *directory, mutt_basename (body->filename),
> sizeof (buf));
> else
> strfcpy (buf, body->filename, sizeof (buf));
> +
> + dest_dup = safe_strdup (buf);
> + rfc2047_decode (&dest_dup);
> + strfcpy (buf, dest_dup, sizeof (buf));
> + FREE (&dest_dup);
> }
> else if(body->hdr &&
> body->encoding != ENCBASE64 &&
> ***************
> *** 450,455 ****
> --- 467,473 ----
> int rc = 1;
> int last = menu ? menu->current : -1;
> FILE *fpout;
> + char *dest_dup;
>
> buf[0] = 0;
>
> ***************
> *** 463,469 ****
> {
> int append = 0;
>
> ! strfcpy (buf, NONULL (top->filename), sizeof (buf));
> if (mutt_get_field (_("Save to file: "), buf, sizeof (buf),
> M_FILE | M_CLEAR) != 0 || !buf[0])
> return;
> --- 481,490 ----
> {
> int append = 0;
>
> ! dest_dup = safe_strdup (NONULL(top->filename));
> ! rfc2047_decode (&dest_dup);
> ! strfcpy (buf, dest_dup, sizeof (buf));
> ! FREE (&dest_dup);
> if (mutt_get_field (_("Save to file: "), buf, sizeof (buf),
> M_FILE | M_CLEAR) != 0 || !buf[0])
> return;
>
--
Thomas Roessler · Personal soap box at <http://log.does-not-exist.org/>.