diff options
author | Dan Kogai <dankogai@dan.co.jp> | 2021-10-10 20:45:40 +0000 |
---|---|---|
committer | James E Keenan <jkeenan@cpan.org> | 2021-10-10 20:45:40 +0000 |
commit | cf927cca44ddf2f1b26c43b9d31ad08db4e46dab (patch) | |
tree | c809f79eec80c2696bba6b4d428fbc0514be9884 /cpan/Encode | |
parent | e441c712e2da2bfc433b488adc4efa9b0d515aef (diff) | |
download | perl-cf927cca44ddf2f1b26c43b9d31ad08db4e46dab.tar.gz |
cpan/Encode: synch with CPAN 3.15
Per maintainer, this is a more complete fix for the problem addressed in
Encode 3.13: memory leak on FB_CROAK. Certain problems with the sequencing of
pull requests have been addressed.
Diffstat (limited to 'cpan/Encode')
-rw-r--r-- | cpan/Encode/Encode.pm | 4 | ||||
-rw-r--r-- | cpan/Encode/Encode.xs | 26 |
2 files changed, 15 insertions, 15 deletions
diff --git a/cpan/Encode/Encode.pm b/cpan/Encode/Encode.pm index 1dfe7d80c6..c3846c2cb4 100644 --- a/cpan/Encode/Encode.pm +++ b/cpan/Encode/Encode.pm @@ -1,5 +1,5 @@ # -# $Id: Encode.pm,v 3.13 2021/10/05 23:44:22 dankogai Exp $ +# $Id: Encode.pm,v 3.15 2021/10/08 15:28:22 dankogai Exp $ # package Encode; use strict; @@ -7,7 +7,7 @@ use warnings; use constant DEBUG => !!$ENV{PERL_ENCODE_DEBUG}; our $VERSION; BEGIN { - $VERSION = sprintf "%d.%02d", q$Revision: 3.13 $ =~ /(\d+)/g; + $VERSION = sprintf "%d.%02d", q$Revision: 3.15 $ =~ /(\d+)/g; require XSLoader; XSLoader::load( __PACKAGE__, $VERSION ); } diff --git a/cpan/Encode/Encode.xs b/cpan/Encode/Encode.xs index fa8cee8273..3416df70fa 100644 --- a/cpan/Encode/Encode.xs +++ b/cpan/Encode/Encode.xs @@ -1,5 +1,5 @@ /* - $Id: Encode.xs,v 2.49 2021/10/05 23:45:45 dankogai Exp $ + $Id: Encode.xs,v 2.51 2021/10/08 15:29:23 dankogai Exp dankogai $ */ #define PERL_NO_GET_CONTEXT @@ -154,7 +154,7 @@ encode_method(pTHX_ const encode_t * enc, const encpage_t * dir, SV * src, U8 * STRLEN sdone = 0; /* We allocate slen+1. PerlIO dumps core if this value is smaller than this. */ - SV *dst = newSV(slen+1); + SV *dst = sv_2mortal(newSV(slen+1)); U8 *d = (U8 *)SvPVX(dst); STRLEN dlen = SvLEN(dst)-1; int code = 0; @@ -275,7 +275,6 @@ encode_method(pTHX_ const encode_t * enc, const encpage_t * dir, SV * src, U8 * /* decoding */ else { if (check & ENCODE_DIE_ON_ERR){ - SvREFCNT_dec(dst); Perl_croak(aTHX_ ERR_DECODE_NOMAP, enc->name[0], (UV)s[slen]); return &PL_sv_undef; /* never reaches but be safe */ @@ -811,13 +810,12 @@ CODE: tmp = encode_method(aTHX_ enc, enc->t_utf8, src, s, slen, check, &offset, term, &code, fallback_cb); sv_catsv(dst, tmp); - SvREFCNT_dec(tmp); SvIV_set(off, (IV)offset); RETVAL = (code == ENCODE_FOUND_TERM); OUTPUT: RETVAL -SV * +void Method_decode(obj,src,check_sv = &PL_sv_no) SV * obj SV * src @@ -829,6 +827,7 @@ PREINIT: encode_t *enc; U8 *s; STRLEN slen; + SV *ret; INIT: SvGETMAGIC(src); SvGETMAGIC(check_sv); @@ -842,13 +841,13 @@ CODE: s = modify ? (U8 *)SvPV_force_nomg(src, slen) : (U8 *)SvPV_nomg(src, slen); if (SvUTF8(src)) utf8_safe_downgrade(aTHX_ &src, &s, &slen, modify); - RETVAL = encode_method(aTHX_ enc, enc->t_utf8, src, s, slen, check, + ret = encode_method(aTHX_ enc, enc->t_utf8, src, s, slen, check, NULL, Nullsv, NULL, fallback_cb); - SvUTF8_on(RETVAL); -OUTPUT: - RETVAL + SvUTF8_on(ret); + ST(0) = ret; + XSRETURN(1); -SV * +void Method_encode(obj,src,check_sv = &PL_sv_no) SV * obj SV * src @@ -860,6 +859,7 @@ PREINIT: encode_t *enc; U8 *s; STRLEN slen; + SV *ret; INIT: SvGETMAGIC(src); SvGETMAGIC(check_sv); @@ -873,10 +873,10 @@ CODE: s = modify ? (U8 *)SvPV_force_nomg(src, slen) : (U8 *)SvPV_nomg(src, slen); if (!SvUTF8(src)) utf8_safe_upgrade(aTHX_ &src, &s, &slen, modify); - RETVAL = encode_method(aTHX_ enc, enc->f_utf8, src, s, slen, check, + ret = encode_method(aTHX_ enc, enc->f_utf8, src, s, slen, check, NULL, Nullsv, NULL, fallback_cb); -OUTPUT: - RETVAL + ST(0) = ret; + XSRETURN(1); bool Method_needs_lines(obj) |