From b6a844858c40d16423a6d3ca1189d051e7dc5ab2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= Date: Fri, 30 Sep 2016 10:36:38 +0200 Subject: [PATCH] Fix Encode::encode_utf8(undef) to return undef --- ...rn-value-of-Encode-encode_utf8-undef.patch | 73 +++++++++++++++++++ perl-Encode.spec | 9 ++- 2 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 Encode-2.86-Fix-return-value-of-Encode-encode_utf8-undef.patch diff --git a/Encode-2.86-Fix-return-value-of-Encode-encode_utf8-undef.patch b/Encode-2.86-Fix-return-value-of-Encode-encode_utf8-undef.patch new file mode 100644 index 0000000..fb48e8e --- /dev/null +++ b/Encode-2.86-Fix-return-value-of-Encode-encode_utf8-undef.patch @@ -0,0 +1,73 @@ +From 646aaae364fc8cd19786a66b88ec6aaf3f093024 Mon Sep 17 00:00:00 2001 +From: Pali +Date: Thu, 11 Aug 2016 23:09:26 +0200 +Subject: [PATCH] Fix return value of Encode::encode_utf8(undef) +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Documentation says that '$octets = encode_utf8($string)' is equivalent to +'$octets = encode("utf8", $string)'. And if the $string is undef, then +undef is returned. However without this patch encode_utf8(undef) returned +'' (empty string) and not undef. This patch fixes it and undef is returned. + +All other utf8 Encode calls already returns undef, just encode_utf8() acted +differently. + + Encode::encode('utf8', undef) -> undef + Encode::decode('utf8', undef) -> undef + Encode::decode_utf8(undef) -> undef + +Reported bug: https://rt.cpan.org/Public/Bug/Display.html?id=116904 + +Signed-off-by: Petr Písař +--- + Encode.pm | 1 + + t/utf8ref.t | 15 ++++++++++++++- + 2 files changed, 15 insertions(+), 1 deletion(-) + +diff --git a/Encode.pm b/Encode.pm +index bda8e1b..bc600be 100644 +--- a/Encode.pm ++++ b/Encode.pm +@@ -254,6 +254,7 @@ sub from_to($$$;$) { + + sub encode_utf8($) { + my ($str) = @_; ++ return undef unless defined $str; + utf8::encode($str); + return $str; + } +diff --git a/t/utf8ref.t b/t/utf8ref.t +index 3253e08..aff098f 100644 +--- a/t/utf8ref.t ++++ b/t/utf8ref.t +@@ -6,7 +6,7 @@ use strict; + use warnings; + use Encode; + use Test::More; +-plan tests => 4; ++plan tests => 12; + #plan 'no_plan'; + + # my $a = find_encoding('ASCII'); +@@ -18,3 +18,16 @@ is $u->encode($r), ''; + $r = {}; + is decode_utf8($r), ''.$r; + is $u->decode($r), ''; ++use warnings 'uninitialized'; ++ ++is encode_utf8(undef), undef; ++is decode_utf8(undef), undef; ++ ++is encode_utf8(''), ''; ++is decode_utf8(''), ''; ++ ++is Encode::encode('utf8', undef), undef; ++is Encode::decode('utf8', undef), undef; ++ ++is Encode::encode('utf8', ''), ''; ++is Encode::decode('utf8', ''), ''; +-- +2.7.4 + diff --git a/perl-Encode.spec b/perl-Encode.spec index fe1f875..25c84ef 100644 --- a/perl-Encode.spec +++ b/perl-Encode.spec @@ -8,7 +8,7 @@ Version: %{cpan_version} # perl-encoding sub-package has independent version which does not change # often and consecutive builds would clash on perl-encoding NEVRA. This is the # same case as in perl.spec. -Release: 2%{?dist} +Release: 3%{?dist} Summary: Character encodings in Perl # ucm: UCD # bin/encguess: Artistic 2.0 @@ -17,6 +17,9 @@ License: (GPL+ or Artistic) and Artistic 2.0 and UCD Group: Development/Libraries URL: http://search.cpan.org/dist/Encode/ Source0: http://www.cpan.org/authors/id/D/DA/DANKOGAI/Encode-%{cpan_version}.tar.gz +# Fix Encode::encode_utf8(undef) to return undef, CPAN RT#116904, +# in upstream after 2.86 +Patch0: Encode-2.86-Fix-return-value-of-Encode-encode_utf8-undef.patch BuildRequires: coreutils BuildRequires: findutils BuildRequires: make @@ -127,6 +130,7 @@ your own encoding to perl. No knowledge of XS is necessary. %prep %setup -q -n Encode-%{cpan_version} +%patch0 -p1 %build # Additional scripts can be installed by appending MORE_SCRIPTS, UCM files by @@ -168,6 +172,9 @@ make test %{perl_vendorarch}/Encode/encode.h %changelog +* Fri Sep 30 2016 Petr Pisar - 4:2.86-3 +- Fix Encode::encode_utf8(undef) to return undef (CPAN RT#116904) + * Fri Sep 16 2016 Petr Pisar - 4:2.86-2 - Add Artistic 2.0 into license tag because of encguess tool