On Sat, 21 Jun 2003 12:47:23 -0400
Daniel Yacob <[EMAIL PROTECTED]> wrote:

> 
> Greetings,
> 
> I've submitted to CPAN the module Convert::Digits which provides a
> conversion service for digits found in the scripts of unicode.  It
> works fine as best as I can tell but non-fatal errors do appear from 
> utf8_heavy.pl when working on scripts outside the BMP:
> 
> Use of uninitialized value in numeric lt (<) at /usr/lib/perl5/5.8.0/utf8_heavy.pl 
> line 197.
> 
> 
> This is the first time I've worked with chars outside the BMP so
> I don't know what issues to anticipate.  Do I need adjust anything
> with the module for this range, or is this a known bug in utf8_heavy?
> I'm working with Perl 5.8.0 on RH9.
> 
> The error lines will appear when running "make test" or the example
> script "examples/digits.pl".  Any advice appreciated.
> 
> thanks,
> 
> /Daniel

    my $bits;
#.... (snip)
    if ($minbits < 32) {
        my $top = 0;
        while ($list =~ /^([0-9a-fA-F]+)(?:[\t]([0-9a-fA-F]+)?)(?:[ 
\t]([0-9a-fA-F]+))?/mg) {
            my $min = hex $1;
            my $max = defined $2 ? hex $2 : $min;
            my $val = defined $3 ? hex $3 : 0;
            $val += $max - $min if defined $3;
            $top = $val if $val > $top;
        }
        $bits =
            $top > 0xffff ? 32 :
            $top > 0xff ? 16 :
            $top > 1 ? 8 : 1
    }
    $bits = $minbits if $bits < $minbits;


Obviously, when $minbits >= 32, $bits is undefined.
That causes the warning in "$bits < $minbits;".

When the right part of tr/// is beyond BMP
(e.g. tr/0/\x{10000}/), Perl_pmtrans in op.c seems to
call swash_init with bits of 32 (as $minbits).

If $minbits >= 32, $bit must be 32 bit,
even without a quite heavy check of $list.
So, I think that C<if ($minbits < 32)> has a sense
and it is better to initialize $bits.
(But is utf8_heavy.pl not ported for 64-bits?)

#a patch against [EMAIL PROTECTED]
--- utf8_heavy.pl~      Thu Jan 23 23:23:32 2003
+++ utf8_heavy.pl       Sun Jun 22 13:04:48 2003
@@ -160,7 +160,7 @@
     }
 
     my $extras;
-    my $bits;
+    my $bits = 0;
 
     my $ORIG = $list;
     if ($list) {
#End of Patch

SADAHIRO Tomoyuki

Reply via email to