[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index][Thread Index][Top&Search][Original]

[perl #37711] undefined hashref error reported on wrong line



# New Ticket Created by  David Hillman 
# Please include the string:  [perl #37711]
# in the subject line of all future correspondence about this issue. 
# <URL: https://rt.perl.org/rt3/Ticket/Display.html?id=37711 >



This is a bug report for perl from david.hillman@livetext.com,
generated with the help of perlbug 1.35 running under perl v5.8.6.

-----------------------------------------------------------------

    The following script demonstrates the problem, which has been  
replicated on the platforms listed in the POD.
When a hashref being used as a 'while condition' runs out, the  
resulting undefined error is reported from the last
line of the loop, instead of the first.

#!/usr/bin/perl

use strict;   # error is not thrown unless strict is used

if (not $ARGV[0] or $ARGV[0] =~ 'bad_error') {
   bad_error();
} else {
   good_error();
}

sub good_error {
   my %hash;
   my $hash_ref = { name => 'value' };
   while ( 1 )
   {
     %hash = %{ $hash_ref }; # error correctly reported on this line
     last unless %hash;

     print "in good_error\n";
     $hash_ref = undef;
   }
}

sub bad_error {
   my %hash;
   my $hash_ref = { name => 'value' };
   while ( %hash = %{ $hash_ref } )  # error occurs here
   {
     print "in bad_error\n";
     $hash_ref = undef;
     1;  # error reported on this line
   }
}

=pod

=head1 Undefined Hashref at Wrong Line Number

Script dies with this error message:
Can't use an undefined value as a HASH reference at ./ 
undefined_hashref_line_num line 31.

The error message should read:
Can't use an undefined value as a HASH reference at ./ 
undefined_hashref_line_num line 16.

The actual error message reports the line number of the last  
statement of the loop instead of the assignment in the while().

The error only occurs when the strict pragma is in use.

Discovered when doing a this with DBI:

   while( %results = %{ $dbh->fetrow_hashref() } ) {

      # Do some stuff with %results

      some statement (error was reported on this line
                      when the statement handle returned undef)
   }

However, the script above proves that this issue is not DBI related.

=head1 Script Usage

   undefined_hashref_line_num.pl --good-error|--bad-error

Option --good-error dies with a diagnostic message and correct line  
number.
Option --bad-error dies with a diagnostic message and incorrect line  
number.

=head1 Reproduced On

=over

=item *
Mac OS X 10.3 with the default Perl 5.8.1

=item *
Mac OS X 10.4.* with 5.8.1, 5.8.6, 5.8.7, and 5.9.2

=item *
FreeBSD 4.8 with 5.8.3

=back

=cut


-----------------------------------------------------------------
---
Flags:
     category=core
     severity=low
---
Site configuration information for perl v5.8.6:

Configured by root at Sun Mar 20 16:31:42 PST 2005.

Summary of my perl5 (revision 5 version 8 subversion 6) configuration:
   Platform:
     osname=darwin, osvers=8.0, archname=darwin-thread-multi-2level
     uname='darwin b28.apple.com 8.0 darwin kernel version 7.5.0: thu  
mar 3 18:48:46 pst 2005; root:xnuxnu-517.99.13.obj~1release_ppc power  
macintosh powerpc '
     config_args='-ds -e -Dprefix=/usr -Dccflags=-g  -pipe  - 
Dldflags=-Dman3ext=3pm -Duseithreads -Duseshrplib'
     hint=recommended, useposix=true, d_sigaction=define
     usethreads=define use5005threads=undef useithreads=define  
usemultiplicity=define
     useperlio=define d_sfio=undef uselargefiles=define usesocks=undef
     use64bitint=undef use64bitall=undef uselongdouble=undef
     usemymalloc=n, bincompat5005=undef
   Compiler:
     cc='cc', ccflags ='-g -pipe -fno-common -DPERL_DARWIN -no-cpp- 
precomp -fno-strict-aliasing -I/usr/local/include',
     optimize='-Os',
     cppflags='-no-cpp-precomp -g -pipe -fno-common -DPERL_DARWIN -no- 
cpp-precomp -fno-strict-aliasing -I/usr/local/include'
     ccversion='', gccversion='3.3 20030304 (Apple Computer, Inc.  
build 1809)', gccosandvers=''
     intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=4321
     d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=8
     ivtype='long', ivsize=4, nvtype='double', nvsize=8,  
Off_t='off_t', lseeksize=8
     alignbytes=8, prototype=define
   Linker and Libraries:
     ld='env MACOSX_DEPLOYMENT_TARGET=10.3 cc', ldflags ='-L/usr/ 
local/lib'
     libpth=/usr/local/lib /usr/lib
     libs=-ldbm -ldl -lm -lc
     perllibs=-ldl -lm -lc
     libc=/usr/lib/libc.dylib, so=dylib, useshrplib=true,  
libperl=libperl.dylib
     gnulibc_version=''
   Dynamic Linking:
     dlsrc=dl_dlopen.xs, dlext=bundle, d_dlsymun=undef, ccdlflags=' '
     cccdlflags=' ', lddlflags='-bundle -undefined dynamic_lookup -L/ 
usr/local/lib'

Locally applied patches:
     23953 - fix for File::Path::rmtree CAN-2004-0452 security issue
     33990 - fix for setuid perl security issues

---
@INC for perl v5.8.6:
     /Applications/livetext/branches/misk5.cms/conf/test
     /Applications/livetext/branches/misk5.cms/mod
     /System/Library/Perl/5.8.6/darwin-thread-multi-2level
     /System/Library/Perl/5.8.6
     /Library/Perl/5.8.6/darwin-thread-multi-2level
     /Library/Perl/5.8.6
     /Library/Perl
     /Network/Library/Perl/5.8.6/darwin-thread-multi-2level
     /Network/Library/Perl/5.8.6
     /Network/Library/Perl
     /System/Library/Perl/Extras/5.8.6/darwin-thread-multi-2level
     /System/Library/Perl/Extras/5.8.6
     /Library/Perl/5.8.1
     .

---
Environment for perl v5.8.6:
     DYLD_LIBRARY_PATH (unset)
     HOME=/Users/hillman
     LANG (unset)
     LANGUAGE (unset)
     LD_LIBRARY_PATH (unset)
     LOGDIR (unset)
     PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/Users/hillman/ 
bin:/usr/local/mysql/bin
     PERL5LIB=/Applications/livetext/branches/misk5.cms/conf/test:/ 
Applications/livetext/branches/misk5.cms/mod
     PERL_BADLANG (unset)
     SHELL=/bin/bash

--
David Hillman
LiveText, Inc
1.866.LiveText x235


Follow-Ups from:
SADAHIRO Tomoyuki <bqw10602@nifty.com>
Dave Mitchell <davem@iabyn.com>

[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index][Thread Index][Top&Search][Original]