tags 365125 + patch pending
thanks

On Tue, May 09, 2006 at 06:50:01PM -0400, [EMAIL PROTECTED] wrote:
>I would like to add some more info on this bug to help others such as me
>that have been bitten by this. I use a program VOCP to do voice message
>processing among other things and it uses perl-tk 804.027 for its
>graphical elements. These elements ceased to function upon upgrading to
>perl_5.8.4-8sarge4.
>
>I've discovered that you can downgrade the single package perl-base to
>perl-base_5.8.4-8sarge3 available at snapshot.debian.net to restore
>perl-tk functionallity.

OK.  It would seem that the utf8 change introduced in sarge4 does indeed
not play nicely with the newer version of Tk.

I've prepared a new version of debian/patches/23_fix_utf8_taint which
incorporates upstream changes #23084 and #23085 from Nick Ing-Simmonds
for Tk.

This seems to work for the original testcase for utf8/taint, and the
widget demo from perl-tk 804.027-4 works for me.

Please test:

  $ apt-get source perl
  $ cd perl-5.8.4
  $ debian/rules unpatch
  [replace debian/patches/23_fix_utf8_taint attached]
  $ debian/rules patch
  $ dch -n Test Tk fix
  $ dpkg-buildpackage -rfakeroot -us -uc

--bod
Fix problem with utf8/taint interaction (upstream changes #22842,
#22843 and #22902).

Thanks to Steinar Gunderson for analysis/patch.

Additionally apply upstream changes #23084 and #23085 to correct problems
with Tk 804.27 .

diff -Naur --exclude=debian perl-5.8.4.orig/ext/Encode/lib/Encode/CN/HZ.pm 
perl-5.8.4/ext/Encode/lib/Encode/CN/HZ.pm
--- perl-5.8.4.orig/ext/Encode/lib/Encode/CN/HZ.pm      2004-02-23 
19:29:12.000000000 +0000
+++ perl-5.8.4/ext/Encode/lib/Encode/CN/HZ.pm   2006-05-10 03:08:42.303791195 
+0000
@@ -152,7 +152,8 @@
            $ret .= pack 'a*', $tmp; # remove UTF8 flag.
        }
        elsif ($str =~ s/(.)//) {
-           my $tmp = $GB->encode($1, $chk);
+           my $s = $1;
+           my $tmp = $GB->encode($s, $chk);
            last if !defined $tmp;
            if (length $tmp == 2) { # maybe a valid GB char (XXX)
                if ($in_ascii) {
diff -Naur --exclude=debian 
perl-5.8.4.orig/ext/Encode/lib/Encode/Unicode/UTF7.pm 
perl-5.8.4/ext/Encode/lib/Encode/Unicode/UTF7.pm
--- perl-5.8.4.orig/ext/Encode/lib/Encode/Unicode/UTF7.pm       2003-05-21 
14:15:16.000000000 +0000
+++ perl-5.8.4/ext/Encode/lib/Encode/Unicode/UTF7.pm    2006-05-10 
03:08:42.313791120 +0000
@@ -6,7 +6,7 @@
 no warnings 'redefine';
 use base qw(Encode::Encoding);
 __PACKAGE__->Define('UTF-7');
-our $VERSION = do { my @r = (q$Revision: 0.2 $ =~ /\d+/g); sprintf 
"%d."."%02d" x $#r, @r };
+our $VERSION = '2.00_01';
 use MIME::Base64;
 use Encode;
 
@@ -38,7 +38,8 @@
            if ($1 eq "+"){
                $bytes .= "+-";
            }else{
-               my $base64 = encode_base64($e_utf16->encode($1), '');
+               my $s = $1;
+               my $base64 = encode_base64($e_utf16->encode($s), '');
                $base64 =~ s/=+$//;
                $bytes .= "+$base64-";
            }
diff -Naur --exclude=debian perl-5.8.4.orig/sv.c perl-5.8.4/sv.c
--- perl-5.8.4.orig/sv.c        2004-03-31 15:03:57.000000000 +0000
+++ perl-5.8.4/sv.c     2006-05-10 03:11:23.912581291 +0000
@@ -3438,18 +3438,20 @@
     U8 *s, *t, *e;
     int  hibit = 0;
 
-    if (!sv)
-       return 0;
-
     if (!SvPOK(sv)) {
        STRLEN len = 0;
-       (void) sv_2pv_flags(sv,&len, flags);
-       if (!SvPOK(sv))
-            return len;
+       if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
+           (void) sv_2pv_flags(sv,&len, flags);
+           if (SvUTF8(sv))
+               return len;
+       } else {
+           (void) SvPV_force(sv,len);
+       }
     }
 
-    if (SvUTF8(sv))
+    if (SvUTF8(sv)) {
        return SvCUR(sv);
+    }
 
     if (SvREADONLY(sv) && SvFAKE(sv)) {
        sv_force_normal(sv);
@@ -3504,7 +3506,7 @@
 bool
 Perl_sv_utf8_downgrade(pTHX_ register SV* sv, bool fail_ok)
 {
-    if (SvPOK(sv) && SvUTF8(sv)) {
+    if (SvPOKp(sv) && SvUTF8(sv)) {
         if (SvCUR(sv)) {
            U8 *s;
            STRLEN len;
@@ -3566,7 +3568,7 @@
 bool
 Perl_sv_utf8_decode(pTHX_ register SV *sv)
 {
-    if (SvPOK(sv)) {
+    if (SvPOKp(sv)) {
         U8 *c;
         U8 *e;
 

Reply via email to