[rt-devel] RT::Template not unfolding long header lines

Jesse Vincent jesse at bestpractical.com
Wed Jan 16 12:09:22 EST 2002


I believe that a fix for this was already in cvs for 2.0.12.  (In my defense,
I don't think I wrote that code ;)  And I beleve everywhere else that we're 
dealing with headers, we're using Mail::Internet or MIME::Head,
rather doing it myself.


On Wed, Jan 16, 2002 at 04:49:25PM +0100, Bruce Campbell wrote:
> 
> 	Was Re: [rt-users] bad rfc822 field name? (fwd)
> 
> On Wed, 28 Nov 2001, matt carter wrote:
> 
> > i have done some further investigation of my problem and it would appear
> > that pine may be the culprit. i was hoping some other people may have an
> > opinion on this, and an appropriate way to deal with.
> >
> > my suggestion would be to check for presence of : on the line before we
> > assume its part of a new header line?
> 
> Looking at this old problem (which we're getting at the moment, which
> throws mh for a merry dance), it seems to be in RT::Template being rather
> silly about headers ( and I'm a tad busy to go and force Jesse to write 'I
> will not write a mail-parser without understanding mail standards' several
> thousand times ;) )
> 
> RFC822 cites:
> 
>      3.1.1.  LONG HEADER FIELDS
> 
>         Each header field can be viewed as a single, logical  line  of
>         ASCII  characters,  comprising  a field-name and a field-body.
>         For convenience, the field-body  portion  of  this  conceptual
>         entity  can be split into a multiple-line representation; this
>         is called "folding".  The general rule is that wherever  there
>         may  be  linear-white-space  (NOT  simply  LWSP-chars), a CRLF
>         immediately followed by AT LEAST one LWSP-char may instead  be
>         inserted.  Thus, the single line
> 
>             To:  "Joe & J. Harvey" <ddd @Org>, JJV @ BBN
> 
>         can be represented as:
> 
>             To:  "Joe & J. Harvey" <ddd @ Org>,
>                     JJV at BBN
> 
> [more examples]
> 
>              The process of moving  from  this  folded   multiple-line
>         representation  of a header field to its single line represen-
>         tation is called "unfolding".  Unfolding  is  accomplished  by
>         regarding   CRLF   immediately  followed  by  a  LWSP-char  as
>         equivalent to the LWSP-char.
> 
> So, pulling a sample out of our hat, we have a multi-line subject header
> as follows:
> 
> 	Subject: here is a sample of SPAM Filth and Depravity that I have
> 	  received either, from your service, from a service that you host,
> 	  solicitoring replies to your service. In my country, this kind of
> 	  email is illegal. please investigate.
> 
> Line 292 of RT::Template builds up the MIME::Entity based on a
> split(/\n/).  Ok, but theres no joining of header lines that have been
> folded.
> 
> So, if we change the loop to read:
> 
>   if ($headers) {
>     my $prevkey = undef;
>     foreach $header (split(/\n/,$headers)) {
>       if( $header =~ /^\s+/ && defined( $prevkey) ){
>         # This is a continuation.
>         # Although implied in the docs, "-1" as the index to add doesn't
>         # seem to work as wanted.  Use replace.
>         $self->{'MIMEObj'}->head->add( $prevkey, $self->{'MIMEObj'}->head->get( $prevkey ) . $header );
>         # Note that technically we should be doing get($prevkey) . "\r\n" . $header
>         # and then calling unfold() as the above could lead to strange
> 	# numbers of spaces.
>       }else{
>         (my $key, my $value) = (split(/: /,$header,2));
>         chomp $key;
>         chomp $value;
>         $self->{'MIMEObj'}->head->fold_length($key,10000);
>         $self->{'MIMEObj'}->head->add($key, $value);
>         # Cache the key in case it continues.
>         $prevkey = $key;
>       }
>     }
>     # Unfold all the headers if still needed.
>     $self->{'MIMEObj'}->head->unfold();
>   }
> 
> Applying this change to RT::Template results no more complaints about bad
> RFC822 headers ;)
> 
> Other portions of the RT code base also exhibit certain confusion about
> folded headers.
> 
> -- 
>                              Bruce Campbell                            RIPE
>                                     RIPE 41                             NCC
>                        Jan 14-18, Amsterdam                      Operations
> 
> 
> _______________________________________________
> rt-devel mailing list
> rt-devel at lists.fsck.com
> http://lists.fsck.com/mailman/listinfo/rt-devel
> 

-- 
http://www.bestpractical.com/products/rt  -- Trouble Ticketing. Free.




More information about the Rt-devel mailing list