[Mimedefang] Please try attached patch
David F. Skoll
dfs at roaringpenguin.com
Wed Apr 24 18:45:34 EDT 2002
Hi,
Please try the patch below against a pristine MIME-tools 5.411a. It should
take care of even weird things like name=@ 21.pif
Regards,
David.
diff -u -r MIME-tools-5.411-ORIG/lib/MIME/Field/ParamVal.pm MIME-tools-5.411/lib/MIME/Field/ParamVal.pm
--- MIME-tools-5.411-ORIG/lib/MIME/Field/ParamVal.pm Sat Nov 4 14:54:49 2000
+++ MIME-tools-5.411/lib/MIME/Field/ParamVal.pm Wed Apr 24 18:41:35 2002
@@ -108,6 +108,9 @@
# Pattern to match spaces or comments:
my $SPCZ = '(?:\s|\([^\)]*\))*';
+# Pattern to match non-semicolon as fallback for broken MIME
+# produced by some viruses
+my $BADTOKEN = '[^;]+';
#------------------------------
#
@@ -200,9 +203,16 @@
$raw =~ m/\G$SPCZ\;$SPCZ/og or last; # skip leading separator
$raw =~ m/\G($PARAMNAME)\s*=\s*/og or last; # give up if not a param
$param = lc($1);
- $raw =~ m/\G(\"([^\"]+)\")|\G($TOKEN)|\G($ENCTOKEN)/g or last; # give up if no value
- my ($qstr, $str, $token, $enctoken) = ($1, $2, $3, $4);
- $params{$param} = defined($qstr) ? $str : (defined($token) ? $token : $enctoken);
+ $raw =~ m/\G(\"([^\"]+)\")|\G($ENCTOKEN)|\G($BADTOKEN)|\G($TOKEN)/g or last; # give up if no value
+ my ($qstr, $str, $enctoken, $badtoken, $token) = ($1, $2, $3, $4, $5);
+ if (defined($badtoken)) {
+ # Strip leading/trailing whitespace from badtoken
+ $badtoken =~ s/^\s*//;
+ $badtoken =~ s/\s*$//;
+ }
+ $params{$param} = defined($qstr) ? $str :
+ (defined($enctoken) ? $enctoken :
+ (defined($badtoken) ? $badtoken : $token));
debug " field param <$param> = <$params{$param}>";
}
Only in MIME-tools-5.411/lib/MIME/Field: ParamVal.pm~
diff -u -r MIME-tools-5.411-ORIG/lib/MIME/Parser.pm MIME-tools-5.411/lib/MIME/Parser.pm
--- MIME-tools-5.411-ORIG/lib/MIME/Parser.pm Sun Nov 12 00:55:11 2000
+++ MIME-tools-5.411/lib/MIME/Parser.pm Wed Apr 24 08:34:18 2002
@@ -998,6 +998,7 @@
$self->process_multipart($in, $rdr, $ent);
}
elsif (("$type/$subtype" eq "message/rfc822") &&
+ ($head->count('MIME-Version') > 0 || $self->extract_nested_messages eq 'REPLACE') &&
$self->extract_nested_messages) {
$self->debug("attempting to process a nested message");
$self->process_message($in, $rdr, $ent);
More information about the MIMEDefang
mailing list