From 347a477c264548540487606c624445883c79c135 Mon Sep 17 00:00:00 2001 From: Karl Williamson Date: Fri, 28 Oct 2022 08:48:37 -0600 Subject: utf8::upgrade: Don't coerce undef arg This fixes GH #20419 --- lib/utf8.pm | 4 +++- lib/utf8.t | 3 +++ 2 files changed, 6 insertions(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/utf8.pm b/lib/utf8.pm index 823193b8c1..c1f1680336 100644 --- a/lib/utf8.pm +++ b/lib/utf8.pm @@ -5,7 +5,7 @@ use warnings; our $hint_bits = 0x00800000; -our $VERSION = '1.24'; +our $VERSION = '1.25'; our $AUTOLOAD; sub import { @@ -114,6 +114,8 @@ sequence in the native encoding (Latin-1 or EBCDIC) to UTF-8. The logical character sequence itself is unchanged. If I<$string> is already upgraded, then this is a no-op. Returns the number of octets necessary to represent the string as UTF-8. +Since Perl v5.38, if C<$string> is C no action is taken; prior to that, +it would be converted to be defined and zero-length. If your code needs to be compatible with versions of perl without C, you can force Unicode semantics on diff --git a/lib/utf8.t b/lib/utf8.t index d35110baee..fa69fcbb88 100644 --- a/lib/utf8.t +++ b/lib/utf8.t @@ -669,6 +669,9 @@ for(__PACKAGE__) { eval { utf8::upgrade($_) }; is $@, "", 'no error with utf8::upgrade on read-only COW'; } + +is(utf8::upgrade(undef), undef, "Returns undef for undef input"); # GH #20419 + # This one croaks, but not because the scalar is read-only eval "package \x{100};\n" . <<'END' for(__PACKAGE__) { -- cgit v1.2.1