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 --- universal.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) (limited to 'universal.c') diff --git a/universal.c b/universal.c index 119117e818..20a36fae85 100644 --- a/universal.c +++ b/universal.c @@ -593,11 +593,21 @@ XS(XS_utf8_upgrade) croak_xs_usage(cv, "sv"); else { SV * const sv = ST(0); - STRLEN RETVAL; + STRLEN RETVAL = 0; dXSTARG; - RETVAL = sv_utf8_upgrade(sv); - XSprePUSH; PUSHi((IV)RETVAL); + XSprePUSH; + if (UNLIKELY(! sv)) { + XSRETURN_UNDEF; + } + + SvGETMAGIC(sv); + if (UNLIKELY(! SvOK(sv))) { + XSRETURN_UNDEF; + } + + RETVAL = sv_utf8_upgrade_nomg(sv); + PUSHi( (IV) RETVAL); } XSRETURN(1); } -- cgit v1.2.1