<<< Date Index >>>     <<< Thread Index >>>

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/>.