Author: pixel
Date: Mon Feb 12 10:41:08 2007
New Revision: 118871

Added:
   packages/cooker/perl/current/SOURCES/perlio-encoding.patch
Modified:
   packages/cooker/perl/current/SPECS/perl.spec

Log:
fix segfault (bugzilla #28537, perl #41442)


Added: packages/cooker/perl/current/SOURCES/perlio-encoding.patch
==============================================================================
--- (empty file)
+++ packages/cooker/perl/current/SOURCES/perlio-encoding.patch  Mon Feb 12 
10:41:08 2007
@@ -0,0 +1,118 @@
+# 
+# 
+# To apply this patch:
+# STEP 1: Chdir to the source directory.
+# STEP 2: Run the 'applypatch' program with this patch file as input.
+#
+# If you do not have 'applypatch', it is part of the 'makepatch' package
+# that you can fetch from the Comprehensive Perl Archive Network:
+# http://www.perl.com/CPAN/authors/Johan_Vromans/makepatch-x.y.tar.gz
+# In the above URL, 'x' should be 2 or higher.
+#
+# To apply this patch without the use of 'applypatch':
+# STEP 1: Chdir to the source directory.
+# STEP 2: Run the 'patch' program with this file as input.
+#
+#### End of Preamble ####
+
+#### Patch data follows ####
+diff -up 'bleedperl/ext/PerlIO/encoding/encoding.xs' 
'bleedperl3/ext/PerlIO/encoding/encoding.xs'
+Index: ./ext/PerlIO/encoding/encoding.xs
+Prereq:  0.3 
+--- ./ext/PerlIO/encoding/encoding.xs  Tue Jun 13 21:29:10 2006
++++ ./ext/PerlIO/encoding/encoding.xs  Mon Feb  5 22:41:59 2007
+@@ -48,6 +48,7 @@ typedef struct {
+     SV *enc;                  /* the encoding object */
+     SV *chk;                    /* CHECK in Encode methods */
+     int flags;                        /* Flags currently just needs lines */
++    int inEncodeCall;         /* trap recursive encode calls */
+ } PerlIOEncode;
+ 
+ #define NEEDS_LINES   1
+@@ -147,6 +148,7 @@ PerlIOEncode_pushed(pTHX_ PerlIO * f, co
+     }
+ 
+     e->chk = newSVsv(get_sv("PerlIO::encoding::fallback", 0));
++    e->inEncodeCall = 0;
+ 
+     FREETMPS;
+     LEAVE;
+@@ -404,6 +406,7 @@ PerlIOEncode_flush(pTHX_ PerlIO * f)
+       STRLEN len;
+       SSize_t count = 0;
+       if ((PerlIOBase(f)->flags & PERLIO_F_WRBUF) && (e->base.ptr > 
e->base.buf)) {
++          if (e->inEncodeCall) return 0;
+           /* Write case - encode the buffer and write() to layer below */
+           PUSHSTACKi(PERLSI_MAGIC);
+           SPAGAIN;
+@@ -416,9 +419,12 @@ PerlIOEncode_flush(pTHX_ PerlIO * f)
+           XPUSHs(e->bufsv);
+           XPUSHs(e->chk);
+           PUTBACK;
++          e->inEncodeCall = 1;
+           if (call_method("encode", G_SCALAR) != 1) {
++              e->inEncodeCall = 0;
+               Perl_die(aTHX_ "panic: encode did not return a value");
+           }
++          e->inEncodeCall = 0;
+           SPAGAIN;
+           str = POPs;
+           PUTBACK;
+@@ -453,6 +459,7 @@ PerlIOEncode_flush(pTHX_ PerlIO * f)
+           }
+           /* See if there is anything left in the buffer */
+           if (e->base.ptr < e->base.end) {
++              if (e->inEncodeCall) return 0;
+               /* Bother - have unread data.
+                  re-encode and unread() to layer below
+                */
+@@ -472,9 +479,12 @@ PerlIOEncode_flush(pTHX_ PerlIO * f)
+               XPUSHs(str);
+               XPUSHs(e->chk);
+               PUTBACK;
++              e->inEncodeCall = 1;
+               if (call_method("encode", G_SCALAR) != 1) {
+-                   Perl_die(aTHX_ "panic: encode did not return a value");
++                  e->inEncodeCall = 0;
++                  Perl_die(aTHX_ "panic: encode did not return a value");
+               }
++              e->inEncodeCall = 0;
+               SPAGAIN;
+               str = POPs;
+               PUTBACK;
+#### End of Patch data ####
+
+#### ApplyPatch data follows ####
+# Data version        : 1.0
+# Date generated      : Mon Feb  5 22:58:23 2007
+# Generated by        : makepatch 2.03
+# Recurse directories : Yes
+# Excluded files      : (\A|/).*\~\Z
+#                       (\A|/).*\.a\Z
+#                       (\A|/).*\.bak\Z
+#                       (\A|/).*\.BAK\Z
+#                       (\A|/).*\.elc\Z
+#                       (\A|/).*\.exe\Z
+#                       (\A|/).*\.gz\Z
+#                       (\A|/).*\.ln\Z
+#                       (\A|/).*\.o\Z
+#                       (\A|/).*\.obj\Z
+#                       (\A|/).*\.olb\Z
+#                       (\A|/).*\.old\Z
+#                       (\A|/).*\.orig\Z
+#                       (\A|/).*\.rej\Z
+#                       (\A|/).*\.so\Z
+#                       (\A|/).*\.Z\Z
+#                       (\A|/)\.del\-.*\Z
+#                       (\A|/)\.make\.state\Z
+#                       (\A|/)\.nse_depinfo\Z
+#                       (\A|/)core\Z
+#                       (\A|/)tags\Z
+#                       (\A|/)TAGS\Z
+# v 'patchlevel.h' 4732 1160388693 33056
+# p 'ext/PerlIO/encoding/encoding.xs' 16562 1170711719 0100440
+#### End of ApplyPatch data ####
+
+#### End of Patch kit [created: Mon Feb  5 22:58:23 2007] ####
+#### Patch checksum: 99 3441 30793 ####
+#### Checksum: 117 4065 16793 ####

Modified: packages/cooker/perl/current/SPECS/perl.spec
==============================================================================
--- packages/cooker/perl/current/SPECS/perl.spec        (original)
+++ packages/cooker/perl/current/SPECS/perl.spec        Mon Feb 12 10:41:08 2007
@@ -21,7 +21,7 @@
 Summary: The Perl programming language
 Name: perl
 Version: 5.8.8
-Release: %mkrel 8
+Release: %mkrel 9
 %define rel %{nil}
 License: GPL or Artistic
 Group: Development/Perl
@@ -50,6 +50,7 @@
 Patch36: perl-27359
 Patch37: perl-27363
 Patch38: perl-donot-defer-sig11.patch
+Patch39: perlio-encoding.patch
 
 Buildroot: %{_tmppath}/%{name}
 Requires: perl-base = %{epoch}:%{version}-%{release}
@@ -153,6 +154,7 @@
 %patch36 -p1
 %patch37 -p1
 %patch38 -p0
+%patch39 -p0
 
 %build
 %ifarch ppc

Reply via email to