Upgrade to Encode 2.37
Rafael Garcia-Suarez [Mon, 7 Sep 2009 08:33:41 +0000 (10:33 +0200)]
(leave out the test t/piconv.t for now)

ext/Encode/Changes
ext/Encode/Encode.pm
ext/Encode/Encode.xs

index 481e976..dcd7384 100644 (file)
@@ -1,7 +1,17 @@
 # Revision history for Perl extension Encode.
 #
-# $Id: Changes,v 2.35 2009/07/13 02:06:30 dankogai Exp dankogai $
-$Revision: 2.35 $ $Date: 2009/07/13 02:06:30 $
+# $Id: Changes,v 2.37 2009/09/06 14:32:21 dankogai Exp dankogai $
+$Revision: 2.37 $ $Date: 2009/09/06 14:32:21 $
+! Encode.xs
+  fixed: compilation failure on compilers not supporting C99
+  http://rt.cpan.org/Ticket/Display.html?id=49466
+
+2.37 2009/09/06 09:03:07
+! Encode.xs
+  fixed: 'find_encoding("utf8")->decode(undef)' causes segmentation fault
+  http://rt.cpan.org/Ticket/Display.html?id=49462
+
+2.35 2009/07/13 02:06:30
 ! lib/Encode/MIME/Header.pm
   Addressed RT #40027:
    decode of MIME-Header removes too much whitespace
index 4492164..749c8f9 100644 (file)
@@ -1,10 +1,10 @@
 #
-# $Id: Encode.pm,v 2.35 2009/07/13 00:49:38 dankogai Exp $
+# $Id: Encode.pm,v 2.37 2009/09/06 14:30:32 dankogai Exp $
 #
 package Encode;
 use strict;
 use warnings;
-our $VERSION = sprintf "%d.%02d", q$Revision: 2.35 $ =~ /(\d+)/g;
+our $VERSION = sprintf "%d.%02d", q$Revision: 2.37 $ =~ /(\d+)/g;
 sub DEBUG () { 0 }
 use XSLoader ();
 XSLoader::load( __PACKAGE__, $VERSION );
index 1424071..e5f4c9a 100644 (file)
@@ -1,5 +1,5 @@
 /*
- $Id: Encode.xs,v 2.14 2007/05/29 18:15:32 dankogai Exp $
+ $Id: Encode.xs,v 2.16 2009/09/06 14:32:21 dankogai Exp dankogai $
  */
 
 #define PERL_NO_GET_CONTEXT
@@ -405,18 +405,23 @@ Method_decode_xs(obj,src,check = 0)
 SV *   obj
 SV *   src
 int    check
+PREINIT:
+    STRLEN slen;
+    U8 *s;
+    U8 *e;
+    SV *dst;
+    bool renewed = 0;
 CODE:
 {
-    STRLEN slen;
-    U8 *s = (U8 *) SvPV(src, slen);
-    U8 *e = (U8 *) SvEND(src);
-    SV *dst = newSV(slen>0?slen:1); /* newSV() abhors 0 -- inaba */
+    dSP; ENTER; SAVETMPS;
+    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 */
 
     /* 
      * PerlIO check -- we assume the object is of PerlIO if renewed
      */
-    bool renewed = 0;
-    dSP; ENTER; SAVETMPS;
     PUSHMARK(sp);
     XPUSHs(obj);
     PUTBACK;
@@ -463,12 +468,18 @@ Method_encode_xs(obj,src,check = 0)
 SV *   obj
 SV *   src
 int    check
+PREINIT:
+    STRLEN slen;
+    U8 *s;
+    U8 *e;
+    SV *dst;
+    bool renewed = 0;
 CODE:
 {
-    STRLEN slen;
-    U8 *s = (U8 *) SvPV(src, slen);
-    U8 *e = (U8 *) SvEND(src);
-    SV *dst = newSV(slen>0?slen:1); /* newSV() abhors 0 -- inaba */
+    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 */
     if (SvUTF8(src)) {
     /* Already encoded */
     if (strict_utf8(aTHX_ obj)) {