From: Jarkko Hietaniemi Date: Thu, 30 Nov 2000 20:41:39 +0000 (+0000) Subject: Fix for 20001128.006, be more careful in Perl_sv_utf8_downgrade(). X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=fa301091a913890fbb1fa04962693e6daf2a2229;p=p5sagit%2Fp5-mst-13.2.git Fix for 20001128.006, be more careful in Perl_sv_utf8_downgrade(). Why the different platforms behave so differently (core dump vs no core dump) on this bug is a but of a mystery, but if I had to guess I would mumble something like 'alignment'. p4raw-id: //depot/perl@7936 --- diff --git a/sv.c b/sv.c index d7b4c8b..01076cb 100644 --- a/sv.c +++ b/sv.c @@ -2447,22 +2447,26 @@ bool Perl_sv_utf8_downgrade(pTHX_ register SV* sv, bool fail_ok) { if (SvPOK(sv) && SvUTF8(sv)) { - char *c = SvPVX(sv); - STRLEN len = SvCUR(sv) + 1; /* include trailing NUL */ - if (!utf8_to_bytes((U8*)c, &len)) { - if (fail_ok) - return FALSE; - else { - if (PL_op) - Perl_croak(aTHX_ "Wide character in %s", - PL_op_desc[PL_op->op_type]); - else - Perl_croak(aTHX_ "Wide character"); + if (SvCUR(sv)) { + char *c = SvPVX(sv); + STRLEN len = SvCUR(sv); + + if (!utf8_to_bytes((U8*)c, &len)) { + if (fail_ok) + return FALSE; + else { + if (PL_op) + Perl_croak(aTHX_ "Wide character in %s", + PL_op_desc[PL_op->op_type]); + else + Perl_croak(aTHX_ "Wide character"); + } } + SvCUR(sv) = len; } - SvCUR(sv) = len - 1; SvUTF8_off(sv); } + return TRUE; }