develooper Front page | perl.perl5.porters | Postings from January 2004

[perl #25251] Encode::decode trashes input parameter since Encode 0.96

Thread Previous | Thread Next
From:
Andreas Koenig
Date:
January 24, 2004 19:49
Subject:
[perl #25251] Encode::decode trashes input parameter since Encode 0.96
Message ID:
rt-3.0.8-25251-72106.19.6760534705015@perl.org
# New Ticket Created by  Andreas Koenig 
# Please include the string:  [perl #25251]
# in the subject line of all future correspondence about this issue. 
# <URL: http://rt.perl.org/rt3/Ticket/Display.html?id=25251 >


This is a bug report for perl from k@k75.linux.bogus,
generated with the help of perlbug 1.34 running under perl v5.9.0.


-----------------------------------------------------------------
[Please enter your report here]
The following program illustrates how Encode::decode can step
on the input parameter quite heavily:

perl -e '
use Encode;
use strict;
my $raw = my $raw2 = "\224\363\214\373\227T\224V";
for my $enc (qw( shift-jis )){
  for my $check (0,0,1,0){
    my $reco = eval {Encode::decode($enc,$raw,$check);};
      print "not " unless $raw eq $raw2;
      printf "ok # length raw[%d]length raw2[%d]\n", length($raw), length($raw2);
  }
}
'
ok # length raw[8]length raw2[8]
ok # length raw[8]length raw2[8]
not ok # length raw[0]length raw2[8]
not ok # length raw[0]length raw2[8]

I get the same result for latin1. With latin1 I entertained binsearch:

----Program----
use Encode;
use strict;
my $raw = my $raw2 = "\224\363\214\373\227T\224V";
for my $enc (qw( shift-jis )){
  for my $check (0,0,1,0){
    my $reco = eval {Encode::decode($enc,$raw,$check);};
    print "not " unless $raw eq $raw2;
    printf "ok # length raw[%d]length raw2[%d]\n", length($raw), length($raw2);
  }
}

----Output of .../p4JIpYe/perl-5.7.3@15429/bin/perl----
ok # length raw[8]length raw2[8]
ok # length raw[8]length raw2[8]
ok # length raw[8]length raw2[8]
ok # length raw[8]length raw2[8]

----EOF ($?='0')----
----Output of .../p41ymlh/perl-5.7.3@15430/bin/perl----
ok # length raw[8]length raw2[8]
ok # length raw[8]length raw2[8]
not ok # length raw[0]length raw2[8]
not ok # length raw[0]length raw2[8]

----EOF ($?='0')----

That leads me to

Change 15430 by jhi@alpha on 2002/03/22 21:48:28

        Upgrade to Encode 0.96, from Dan Kogai.


[Please do not change anything below this line]
-----------------------------------------------------------------
---
Flags:
    category=library
    severity=high
---
Site configuration information for perl v5.9.0:

Configured by k at Sat Jan 24 05:38:55 CET 2004.

Summary of my perl5 (revision 5.0 version 9 subversion 0 patch 21538) configuration:
  Platform:
    osname=linux, osvers=2.4.22-rc2-ac2, archname=i686-linux-64int
    uname='linux k75 2.4.22-rc2-ac2 #1 sat aug 16 12:22:34 cest 2003 i686 gnulinux '
    config_args='-Dprefix=/home/src/perl/repoperls/installed-perls/perl/plcRGXC/perl-5.8.0@22203 -Dinstallusrbinperl=n -Uversiononly -Doptimize=-g -des -Duse64bitint -Dusedevel'
    hint=recommended, useposix=true, d_sigaction=define
    usethreads=undef useithreads=undef usemultiplicity=undef
    useperlio=define d_sfio=undef uselargefiles=define usesocks=undef
    use64bitint=define use64bitall=undef uselongdouble=undef
    usemymalloc=n, bincompat5005=undef
  Compiler:
    cc='cc', ccflags ='-DDEBUGGING -fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
    optimize='-g',
    cppflags='-DDEBUGGING -fno-strict-aliasing -I/usr/local/include'
    ccversion='', gccversion='3.3.2 (Debian)', gccosandvers=''
    intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=12345678
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
    ivtype='long long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
    alignbytes=4, prototype=define
  Linker and Libraries:
    ld='cc', ldflags =' -L/usr/local/lib'
    libpth=/usr/local/lib /lib /usr/lib
    libs=-lnsl -lgdbm -ldb -ldl -lm -lcrypt -lutil -lc
    perllibs=-lnsl -ldl -lm -lcrypt -lutil -lc
    libc=/lib/libc-2.3.2.so, so=so, useshrplib=false, libperl=libperl.a
    gnulibc_version='2.3.2'
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-rdynamic'
    cccdlflags='-fpic', lddlflags='-shared -L/usr/local/lib'

Locally applied patches:
    DEVEL21538
    patchaperlup: --upto 22203

---
@INC for perl v5.9.0:
    /home/src/perl/repoperls/installed-perls/perl/plcRGXC/perl-5.8.0@22203/lib/5.9.0/i686-linux-64int
    /home/src/perl/repoperls/installed-perls/perl/plcRGXC/perl-5.8.0@22203/lib/5.9.0
    /home/src/perl/repoperls/installed-perls/perl/plcRGXC/perl-5.8.0@22203/lib/site_perl/5.9.0/i686-linux-64int
    /home/src/perl/repoperls/installed-perls/perl/plcRGXC/perl-5.8.0@22203/lib/site_perl/5.9.0
    /home/src/perl/repoperls/installed-perls/perl/plcRGXC/perl-5.8.0@22203/lib/site_perl
    .

---
Environment for perl v5.9.0:
    HOME=/home/k
    LANG=C
    LANGUAGE (unset)
    LD_LIBRARY_PATH (unset)
    LOGDIR (unset)
    PATH=/home/k/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/usr/local/perl/bin:/usr/X11/bin:/sbin:/usr/sbin
    PERL_BADLANG (unset)
    SHELL=/usr/bin/zsh

Thread Previous | Thread Next


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About