@@ -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 {