Brian Grayson wrote:
>   I downloaded 1.4 on Friday just to see, and the same problem
> occurs.  The fundamental problem is once the CTE code sees a
> nonzero value of lobin, it goes into quoted, regardless of
> whether hibin is nonzero.  The following patch does the right
> thing for my testcase here, but I don't know if there's a good
> reason why the lobin/quotable check currently ignores whether
> there are any hibins or not.
> 
>   After a bit of inspection, the file rep.5k has hibins and
> _no_ lobins, and hence goes properly into 8bit encoding.  But
> the file rep1k has a lobin (0x0b at offset 0x340, for example),
> so it short-circuits into quoted-printable.  Try mailing the
> base64-encoded version of that to yourself, and it should
> choose quotable, even in 1.4.

Thanks for the extra info.  I looked into this more closely, and I see
that there are a couple of factors that come into play into this
situation.  First, I noticed that your PDF attachment was labeled
improperly as "text/plain".  This is not so bad in itself, but that
piece of code that checks for which transfer encoding to use assumes
that it really is text, which is a problem.  Since there was no
extension to the file, Mutt fell back into making a guess as to whether
or not the file was of type text/plain or appliation/octet-stream.  Mutt
guessed text/plain because it saw only a few lobins in the file.
However, Mutt failed to notice that there were bare CRs in the file when
choosing the transfer encoding.  The attach patch checks info->binary
even for the text/plain case.  I just tested this and it correctly chose
base64 encoding for the file.
Index: sendlib.c
===================================================================
RCS file: /home/roessler/cvs/mutt/sendlib.c,v
retrieving revision 2.94.2.5
diff -u -r2.94.2.5 sendlib.c
--- sendlib.c   31 May 2002 16:59:39 -0000      2.94.2.5
+++ sendlib.c   9 Sep 2002 16:32:21 -0000
@@ -1196,7 +1196,17 @@
   if (b->type == TYPETEXT)
   {
     char *chsname = mutt_get_body_charset (send_charset, sizeof (send_charset), b);
-    if ((info->lobin && strncasecmp (chsname, "iso-2022", 8)) || info->linemax > 990 
|| (info->from && option (OPTENCODEFROM)))
+
+    /*
+     * given a lack of info about what the file is from the mime-types file,
+     * Mutt will make a guess as to whether or not the file is likely
+     * text/plain or application/octet-stream based upon statistical
+     * evidence.  It is still possible that a binary file (one with a bare
+     * CR) might occur, so we need to account for it here.
+     */
+    if (info->binary)
+      b->encoding = ENCBASE64;
+    else if ((info->lobin && strncasecmp (chsname, "iso-2022", 8)) || info->linemax > 
+990 || (info->from && option (OPTENCODEFROM)))
       b->encoding = ENCQUOTEDPRINTABLE;
     else if (info->hibin)
       b->encoding = option (OPTALLOW8BIT) ? ENC8BIT : ENCQUOTEDPRINTABLE;

Reply via email to