Fix memory leak in Encode.xs maint-5.12
authorChris 'BinGOs' Williams <chris@bingosnet.co.uk>
Wed, 6 Mar 2013 16:55:19 +0000 (16:55 +0000)
committerChris 'BinGOs' Williams <chris@bingosnet.co.uk>
Wed, 6 Mar 2013 16:55:19 +0000 (16:55 +0000)
cpan/Encode/Encode.xs

index b2e9127..c44d8f3 100644 (file)
@@ -435,7 +435,6 @@ CODE:
     if (src == &PL_sv_undef) src = newSV(0);
     s = (U8 *) SvPV(src, slen);
     e = (U8 *) SvEND(src);
-    dst = newSV(slen>0?slen:1); /* newSV() abhors 0 -- inaba */
     check = SvROK(check_sv) ? ENCODE_PERLQQ|ENCODE_LEAVE_SRC : SvIV(check_sv);
     /* 
      * PerlIO check -- we assume the object is of PerlIO if renewed
@@ -466,6 +465,7 @@ CODE:
     }
     }
 
+    dst = sv_2mortal(newSV(slen>0?slen:1)); /* newSV() abhors 0 -- inaba */
     s = process_utf8(aTHX_ dst, s, e, check_sv, 0, strict_utf8(aTHX_ obj), renewed);
 
     /* Clear out translated part of source unless asked not to */
@@ -477,7 +477,7 @@ CODE:
     SvCUR_set(src, slen);
     }
     SvUTF8_on(dst);
-    ST(0) = sv_2mortal(dst);
+    ST(0) = dst;
     XSRETURN(1);
 }
 
@@ -499,7 +499,7 @@ CODE:
     if (src == &PL_sv_undef) src = newSV(0);
     s = (U8 *) SvPV(src, slen);
     e = (U8 *) SvEND(src);
-    dst = newSV(slen>0?slen:1); /* newSV() abhors 0 -- inaba */
+    dst = sv_2mortal(newSV(slen>0?slen:1)); /* newSV() abhors 0 -- inaba */
     if (SvUTF8(src)) {
     /* Already encoded */
     if (strict_utf8(aTHX_ obj)) {
@@ -538,7 +538,7 @@ CODE:
     }
     SvPOK_only(dst);
     SvUTF8_off(dst);
-    ST(0) = sv_2mortal(dst);
+    ST(0) = dst;
     XSRETURN(1);
 }