diff options
| author | fukachan <fukachan> | 2001-10-29 13:54:20 +0000 |
|---|---|---|
| committer | fukachan <fukachan> | 2001-10-29 13:54:20 +0000 |
| commit | decec9cc610ded7237fcb0ee65548693875cccaa (patch) | |
| tree | 46ab2d870e419f4dde349a186530d07de49b1535 /fml/lib/Mail | |
| parent | 491271b39a7dbd9a57886b81f1cc7ca135a30b39 (diff) | |
| download | fml8-decec9cc610ded7237fcb0ee65548693875cccaa.tar.gz fml8-decec9cc610ded7237fcb0ee65548693875cccaa.tar.bz2 fml8-decec9cc610ded7237fcb0ee65548693875cccaa.zip | |
_get_mime_header() checks offset boundary
return default pair if overrun.
Diffstat (limited to 'fml/lib/Mail')
| -rw-r--r-- | fml/lib/Mail/Message.pm | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/fml/lib/Mail/Message.pm b/fml/lib/Mail/Message.pm index 9cf760b9..080f5c58 100644 --- a/fml/lib/Mail/Message.pm +++ b/fml/lib/Mail/Message.pm @@ -4,7 +4,7 @@ # All rights reserved. This program is free software; you can # redistribute it and/or modify it under the same terms as Perl itself. # -# $FML: Message.pm,v 1.33 2001/10/27 04:50:39 fukachan Exp $ +# $FML: Message.pm,v 1.34 2001/10/27 16:42:50 fukachan Exp $ # package Mail::Message; @@ -1211,10 +1211,11 @@ sub parse_and_build_mime_multipart_chain if ($pe > $pb) { # XXX not effective region if $pe <= $pb print " new block ($pb, $pe) " if $debug; - my ($header, $pb) = _get_mime_header($data, $pb); + my ($header, $pb) = _get_mime_header($data, $pb, $pe); if ($debug) { my $type; $header =~ /(\w+\/\w+)/ && ($type = $1); print "type=$type "; + print "\n *new block ($pb, $pe) header={$header}\n"; } my $args = { @@ -1339,11 +1340,16 @@ sub _get_data_type sub _get_mime_header { - my ($data, $pos_begin) = @_; + my ($data, $pos_begin, $pos_end) = @_; my $pos = index($$data, "\n\n", $pos_begin) + 1; my $buf = substr($$data, $pos_begin, $pos - $pos_begin); - if ($buf =~ /Content-Type:\s*(\S+)\;/i) { + print "\t_get_mime_header pos=$pos should be < end=$pos_end\n" if $debug; + + if ($pos > $pos_end) { + return ('', $pos_begin); + } + elsif ($buf =~ /Content-Type:\s*(\S+)\;/i) { return ($buf, $pos + 1); } elsif ($buf =~ /Content-Type:\s*(\S+)\s*$/i) { |
