Skip to content

Instantly share code, notes, and snippets.

@tomill
Created December 23, 2010 14:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tomill/753026 to your computer and use it in GitHub Desktop.
Save tomill/753026 to your computer and use it in GitHub Desktop.
diff --git a/lib/Encode/MIME/Header.pm b/lib/Encode/MIME/Header.pm
index 5f209b2..d61b589 100644
--- a/lib/Encode/MIME/Header.pm
+++ b/lib/Encode/MIME/Header.pm
@@ -61,10 +61,10 @@ sub decode($$;$) {
}{
if (uc($2) eq 'B'){
$obj->{decode_b} or croak qq(MIME "B" unsupported);
- decode_b($1, $3, $chk);
+ $obj->decode_b($1, $3, $chk);
} elsif (uc($2) eq 'Q'){
$obj->{decode_q} or croak qq(MIME "Q" unsupported);
- decode_q($1, $3, $chk);
+ $obj->decode_q($1, $3, $chk);
} else {
croak qq(MIME "$2" encoding is nonexistent!);
}
@@ -74,6 +74,7 @@ sub decode($$;$) {
}
sub decode_b {
+ my $self = shift;
my $enc = shift;
my $d = find_encoding($enc) or croak qq(Unknown encoding "$enc");
my $db64 = decode_base64(shift);
@@ -84,7 +85,7 @@ sub decode_b {
}
sub decode_q {
- my ( $enc, $q, $chk ) = @_;
+ my ( $self, $enc, $q, $chk ) = @_;
my $d = find_encoding($enc) or croak qq(Unknown encoding "$enc");
$q =~ s/_/ /go;
$q =~ s/=([0-9A-Fa-f]{2})/pack("C", hex($1))/ego;
diff --git a/lib/Encode/MIME/Header/ISO_2022_JP.pm b/lib/Encode/MIME/Header/ISO_2022_JP.pm
index 4abfbd0..e9baf94 100644
--- a/lib/Encode/MIME/Header/ISO_2022_JP.pm
+++ b/lib/Encode/MIME/Header/ISO_2022_JP.pm
@@ -2,11 +2,12 @@ package Encode::MIME::Header::ISO_2022_JP;
use strict;
use warnings;
+use Carp;
use base qw(Encode::MIME::Header);
$Encode::Encoding{'MIME-Header-ISO_2022_JP'} =
- bless { encode => 'B', bpl => 76, Name => 'MIME-Header-ISO_2022_JP' } =>
+ bless { decode_b => 1, decode_q => 1, encode => 'B', bpl => 76, Name => 'MIME-Header-ISO_2022_JP' } =>
__PACKAGE__;
use constant HEAD => '=?ISO-2022-JP?B?';
@@ -35,6 +36,27 @@ sub encode {
return $str;
}
+sub decode_b {
+ my $self = shift;
+ my ($enc) = @_;
+ if (Encode::resolve_alias($enc) eq 'iso-2022-jp') {
+ $self->SUPER::decode_b(@_);
+ } else {
+ croak qq("$enc" is not support);
+ }
+}
+
+sub decode_q {
+ my $self = shift;
+ my ($enc) = @_;
+ if (Encode::resolve_alias($enc) eq 'iso-2022-jp') {
+ $self->SUPER::decode_q(@_);
+ } else {
+ croak qq("$enc" is not support);
+ }
+}
+
+
sub _mime_unstructured_header {
my ( $oldheader, $bpl ) = @_;
my $crlf = $oldheader =~ /\n$/;
diff --git a/t/mime_header_iso2022jp.t b/t/mime_header_iso2022jp.t
index 818443a..09eaa85 100644
--- a/t/mime_header_iso2022jp.t
+++ b/t/mime_header_iso2022jp.t
@@ -5,7 +5,7 @@ BEGIN {
if( ord("A") == 193 ) {
plan skip_all => 'No Encode::MIME::Header::ISO_2022_JP on EBCDIC Platforms';
} else {
- plan tests => 14;
+ plan tests => 14 + 2;
}
}
@@ -45,4 +45,12 @@ for my $decoded (sort keys %mime){
is($header, $encoded);
}
+{
+ my $dan = decode('euc-jp', 'だん');
+ is(decode('MIME-Header-ISO_2022_JP', '=?ISO-2022-JP?B?GyRCJEAkcxsoQg==?='), $dan);
+
+ eval { decode('MIME-Header-ISO_2022_JP', '=?UTF-8?B?w6PCgcKgw6PCgsKT?=') };
+ like($@, qr/^"UTF-8" is not support/);
+}
+
__END__
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment