The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
Changes 27
Encode.pm 22
Encode.xs 55
META.json 11
META.yml 11
Makefile.PL 11
encoding.pm 11
t/Mod_EUCJP.pm 11
t/enc_data.t 11
t/enc_eucjp.t 11
t/enc_module.t 11
t/enc_utf8.t 11
t/jperl.t 11
t/piconv.t 11
14 files changed (This is a version diff) 2025
@@ -1,8 +1,13 @@
 # Revision history for Perl extension Encode.
 #
-# $Id: Changes,v 2.48 2013/02/18 02:23:56 dankogai Exp dankogai $
+# $Id: Changes,v 2.49 2013/03/05 03:12:49 dankogai Exp dankogai $
 #
-$Revision: 2.48 $ $Date: 2013/02/18 02:23:56 $
+$Revision: 2.49 $ $Date: 2013/03/05 03:12:49 $
+! Encode.xs
+  Addressed: Encoding objects leak memory if decoding fails
+  https://github.com/dankogai/p5-encode/issues/8
+
+2.48 2013/02/18 02:23:56
 ! encoding.pm 
   t/Mod_EUCJP.pm t/enc_data.t t/enc_eucjp.t t/enc_module.t t/enc_utf8.t
   t/encoding.t t/jperl.t
@@ -1,10 +1,10 @@
 #
-# $Id: Encode.pm,v 2.48 2013/02/18 02:23:56 dankogai Exp dankogai $
+# $Id: Encode.pm,v 2.49 2013/03/05 03:13:47 dankogai Exp dankogai $
 #
 package Encode;
 use strict;
 use warnings;
-our $VERSION = sprintf "%d.%02d", q$Revision: 2.48 $ =~ /(\d+)/g;
+our $VERSION = sprintf "%d.%02d", q$Revision: 2.49 $ =~ /(\d+)/g;
 use constant DEBUG => !!$ENV{PERL_ENCODE_DEBUG};
 use XSLoader ();
 XSLoader::load( __PACKAGE__, $VERSION );
@@ -1,5 +1,5 @@
 /*
- $Id: Encode.xs,v 2.20 2010/12/31 22:48:48 dankogai Exp $
+ $Id: Encode.xs,v 2.21 2013/03/05 03:12:49 dankogai Exp dankogai $
  */
 
 #define PERL_NO_GET_CONTEXT
@@ -440,7 +440,6 @@ CODE:
     if (src == &PL_sv_undef || SvROK(src)) src = sv_2mortal(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
@@ -471,6 +470,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 */
@@ -482,7 +482,7 @@ CODE:
     SvCUR_set(src, slen);
     }
     SvUTF8_on(dst);
-    ST(0) = sv_2mortal(dst);
+    ST(0) = dst;
     XSRETURN(1);
 }
 
@@ -504,7 +504,7 @@ CODE:
     if (src == &PL_sv_undef || SvROK(src)) src = sv_2mortal(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)) {
@@ -543,7 +543,7 @@ CODE:
     }
     SvPOK_only(dst);
     SvUTF8_off(dst);
-    ST(0) = sv_2mortal(dst);
+    ST(0) = dst;
     XSRETURN(1);
 }
 
@@ -35,5 +35,5 @@
       }
    },
    "release_status" : "stable",
-   "version" : "2.48"
+   "version" : "2.49"
 }
@@ -18,4 +18,4 @@ no_index:
     - t
     - inc
 requires: {}
-version: 2.48
+version: 2.49
@@ -1,5 +1,5 @@
 #
-# $Id: Makefile.PL,v 2.10 2013/02/18 02:23:56 dankogai Exp dankogai $
+# $Id: Makefile.PL,v 2.10 2013/02/18 02:23:56 dankogai Exp $
 #
 use 5.007003;
 use strict;
@@ -1,4 +1,4 @@
-# $Id: encoding.pm,v 2.11 2013/02/18 02:23:56 dankogai Exp dankogai $
+# $Id: encoding.pm,v 2.11 2013/02/18 02:23:56 dankogai Exp $
 package encoding;
 our $VERSION = '2.6_01';
 
@@ -1,4 +1,4 @@
-# $Id: Mod_EUCJP.pm,v 2.1 2013/02/18 02:23:56 dankogai Exp dankogai $
+# $Id: Mod_EUCJP.pm,v 2.1 2013/02/18 02:23:56 dankogai Exp $
 # This file is in euc-jp
 package Mod_EUCJP;
 no warnings "deprecated";
@@ -1,4 +1,4 @@
-# $Id: enc_data.t,v 2.2 2013/02/18 02:23:56 dankogai Exp dankogai $
+# $Id: enc_data.t,v 2.2 2013/02/18 02:23:56 dankogai Exp $
 
 BEGIN {
     require Config; import Config;
@@ -1,4 +1,4 @@
-# $Id: enc_eucjp.t,v 2.2 2013/02/18 02:23:56 dankogai Exp dankogai $
+# $Id: enc_eucjp.t,v 2.2 2013/02/18 02:23:56 dankogai Exp $
 # This is the twin of enc_utf8.t .
 
 BEGIN {
@@ -1,4 +1,4 @@
-# $Id: enc_module.t,v 2.2 2013/02/18 02:23:56 dankogai Exp dankogai $
+# $Id: enc_module.t,v 2.2 2013/02/18 02:23:56 dankogai Exp $
 # This file is in euc-jp
 BEGIN {
     require Config; import Config;
@@ -1,4 +1,4 @@
-# $Id: enc_utf8.t,v 2.2 2013/02/18 02:23:56 dankogai Exp dankogai $
+# $Id: enc_utf8.t,v 2.2 2013/02/18 02:23:56 dankogai Exp $
 # This is the twin of enc_eucjp.t .
 
 BEGIN {
@@ -1,5 +1,5 @@
 #
-# $Id: jperl.t,v 2.2 2013/02/18 02:23:56 dankogai Exp dankogai $
+# $Id: jperl.t,v 2.2 2013/02/18 02:23:56 dankogai Exp $
 #
 # This script is written in euc-jp
 
@@ -1,5 +1,5 @@
 #
-# $Id: piconv.t,v 0.4 2013/02/18 02:23:56 dankogai Exp dankogai $
+# $Id: piconv.t,v 0.4 2013/02/18 02:23:56 dankogai Exp $
 #
 
 BEGIN {