diff options
Diffstat (limited to 'mail/p5-MIME-Tools/files/patch-ParamVal.pm')
-rw-r--r-- | mail/p5-MIME-Tools/files/patch-ParamVal.pm | 114 |
1 files changed, 0 insertions, 114 deletions
diff --git a/mail/p5-MIME-Tools/files/patch-ParamVal.pm b/mail/p5-MIME-Tools/files/patch-ParamVal.pm deleted file mode 100644 index afc85edda148..000000000000 --- a/mail/p5-MIME-Tools/files/patch-ParamVal.pm +++ /dev/null @@ -1,114 +0,0 @@ ---- lib/MIME/Field/ParamVal.pm.orig Sun Nov 5 04:54:49 2000 -+++ lib/MIME/Field/ParamVal.pm Thu Jun 6 10:15:15 2002 -@@ -100,6 +100,9 @@ - # token = 1*<any (ASCII) CHAR except SPACE, CTLs, or tspecials> - # - my $TSPECIAL = '()<>@,;:\</[]?="'; -+ -+#" Fix emacs highlighting... -+ - my $TOKEN = '[^ \x00-\x1f\x80-\xff' . "\Q$TSPECIAL\E" . ']+'; - - # Encoded token: -@@ -108,6 +111,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 = '[^;]+'; - - #------------------------------ - # -@@ -181,10 +187,40 @@ - - =cut - -+sub rfc2231decode { -+ my($val) = @_; -+ my($enc, $lang, $rest); -+ -+ if ($val =~ m/^([^\']*)\'([^\']*)\'(.*)$/) { -+ # SHOULD REALLY DO SOMETHING MORE INTELLIGENT WITH ENCODING!!! -+ $enc = $1; -+ $lang = $2; -+ $rest = $3; -+ $rest = rfc2231percent($rest); -+ } elsif ($val =~ m/^([^\']*)\'([^\']*)$/) { -+ $enc = $1; -+ $rest = $2; -+ $rest = rfc2231percent($rest); -+ } else { -+ $rest = rfc2231percent($val); -+ } -+ return $rest; -+} -+ -+sub rfc2231percent { -+ # Do percent-subsitution -+ my($str) = @_; -+ $str =~ s/%([0-9a-fA-F]{2})/pack("c", hex($1))/ge; -+ return $str; -+} -+ - sub parse_params { - my ($self, $raw) = @_; - my %params = (); -+ my %rfc2231params = (); - my $param; -+ my $val; -+ my $part; - - # Get raw field, and unfold it: - defined($raw) or $raw = ''; -@@ -200,9 +236,47 @@ - $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*$//; -+ } -+ $val = defined($qstr) ? $str : -+ (defined($enctoken) ? $enctoken : -+ (defined($badtoken) ? $badtoken : $token)); -+ -+ # Do RFC 2231 processing -+ if ($param =~ /\*/) { -+ my($name, $num); -+ # Pick out the parts of the parameter -+ if ($param =~ m/^([^*]+)\*([^*]+)\*?$/) { -+ # We have param*number* or param*number -+ $name = $1; -+ $num = $2; -+ } else { -+ # Fake a part of zero... not sure how to handle this properly -+ $param =~ s/\*//g; -+ $name = $param; -+ $num = 0; -+ } -+ # Decode the value unless it was a quoted string -+ if (!defined($qstr)) { -+ $val = rfc2231decode($val); -+ } -+ $rfc2231params{$name}{$num} .= $val; -+ } else { -+ # Make a fake "part zero" for non-RFC2231 params -+ $rfc2231params{$param}{"0"} = $val; -+ } -+ } -+ -+ # Extract reconstructed parameters -+ foreach $param (keys %rfc2231params) { -+ foreach $part (sort { $a <=> $b } keys %{$rfc2231params{$param}}) { -+ $params{$param} .= $rfc2231params{$param}{$part}; -+ } - debug " field param <$param> = <$params{$param}>"; - } - |