Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Hash::Util::lock_hashref_recurse spews uninitialized value warnings #11111

Closed
p5pRT opened this issue Feb 2, 2011 · 5 comments
Closed

Hash::Util::lock_hashref_recurse spews uninitialized value warnings #11111

p5pRT opened this issue Feb 2, 2011 · 5 comments

Comments

@p5pRT
Copy link

p5pRT commented Feb 2, 2011

Migrated from rt.perl.org#83262 (status was 'resolved')

Searchable as RT83262$

@p5pRT
Copy link
Author

p5pRT commented Feb 2, 2011

From aderobertis@metrics.net

This is a bug report for perl fromanthony@​derobert.net,
generated with the help of perlbug 1.39 running under perl 5.10.1.

-----------------------------------------------------------------
Hash​::Util has a 'use warnings' up top, which unconditionally enables
warnings in the module. However, it then does things like​:

  sub lock_hashref_recurse {
  my $hash = shift;

  lock_ref_keys($hash);
  foreach my $value (values %$hash) {
  if (reftype($value) eq 'HASH') { #<---- HERE
  lock_hashref_recurse($value);
  }
  Internals​::SvREADONLY($value,1);
  }
  return $hash
  }

Scalar​::Util​::reftype, however, returns undef if the value is not a
reference, leading to spewing a warning per non-reference value. That's
a lot of spewage!

There are two occurances I see upon a quick glance​: once in lock and
once in unlock. Both need to be protected or probably just have​:
  no warnings 'uninitialized'
added.

Perl Info

Flags:
     category=library
     severity=low
     module=Hash::Util

Site configuration information for perl 5.10.1:

Configured by Debian Project at Fri Jan  7 12:14:33 UTC 2011.

Summary of my perl5 (revision 5 version 10 subversion 1) configuration:

   Platform:
     osname=linux, osvers=2.6.32-5-amd64, archname=x86_64-linux-gnu-thread-multi
     uname='linux madeleine 2.6.32-5-amd64 #1 smp fri dec 10 15:35:08 utc 2010 x86_64 gnulinux '
     config_args='-Dusethreads -Duselargefiles -Dccflags=-DDEBIAN -Dcccdlflags=-fPIC -Darchname=x86_64-linux-gnu -Dprefix=/usr -Dprivlib=/usr/share/perl/5.10 -Darchlib=/usr/lib/perl/5.10 -Dvendorprefix=/usr -Dvendorlib=/usr/share/perl5 -Dvendorarch=/usr/lib/perl5 -Dsiteprefix=/usr/local -Dsitelib=/usr/local/share/perl/5.10.1 -Dsitearch=/usr/local/lib/perl/5.10.1 -Dman1dir=/usr/share/man/man1 -Dman3dir=/usr/share/man/man3 -Dsiteman1dir=/usr/local/man/man1 -Dsiteman3dir=/usr/local/man/man3 -Dman1ext=1 -Dman3ext=3perl -Dpager=/usr/bin/sensible-pager -Uafs -Ud_csh -Ud_ualarm -Uusesfio -Uusenm -DDEBUGGING=-g -Doptimize=-O2 -Duseshrplib -Dlibperl=libperl.so.5.10.1 -Dd_dosuid -des'
     hint=recommended, useposix=true, d_sigaction=define
     useithreads=define, usemultiplicity=define
     useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
     use64bitint=define, use64bitall=define, uselongdouble=undef
     usemymalloc=n, bincompat5005=undef
   Compiler:
     cc='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
     optimize='-O2 -g',
     cppflags='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include'
     ccversion='', gccversion='4.4.5', gccosandvers=''
     intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678
     d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
     ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
     alignbytes=8, prototype=define
   Linker and Libraries:
     ld='cc', ldflags =' -fstack-protector -L/usr/local/lib'
     libpth=/usr/local/lib /lib /usr/lib /lib64 /usr/lib64
     libs=-lgdbm -lgdbm_compat -ldb -ldl -lm -lpthread -lc -lcrypt
     perllibs=-ldl -lm -lpthread -lc -lcrypt
     libc=/lib/libc-2.11.2.so, so=so, useshrplib=true, libperl=libperl.so.5.10.1
     gnulibc_version='2.11.2'
   Dynamic Linking:
     dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
     cccdlflags='-fPIC', lddlflags='-shared -O2 -g -L/usr/local/lib -fstack-protector'

Locally applied patches:
     DEBPKG:debian/arm_thread_stress_timeout -http://bugs.debian.org/501970  Raise the timeout of ext/threads/shared/t/stress.t to accommodate slower build hosts
     DEBPKG:debian/cpan_config_path - Set location of CPAN::Config to /etc/perl as /usr may not be writable.
     DEBPKG:debian/cpan_definstalldirs - Provide a sensible INSTALLDIRS default for modules installed from CPAN.
     DEBPKG:debian/db_file_ver -http://bugs.debian.org/340047  Remove overly restrictive DB_File version check.
     DEBPKG:debian/doc_info - Replace generic man(1) instructions with Debian-specific information.
     DEBPKG:debian/enc2xs_inc -http://bugs.debian.org/290336  Tweak enc2xs to follow symlinks and ignore missing @INC directories.
     DEBPKG:debian/errno_ver -http://bugs.debian.org/343351  Remove Errno version check due to upgrade problems with long-running processes.
     DEBPKG:debian/extutils_hacks - Various debian-specific ExtUtils changes
     DEBPKG:debian/fakeroot - Postpone LD_LIBRARY_PATH evaluation to the binary targets.
     DEBPKG:debian/instmodsh_doc - Debian policy doesn't install .packlist files for core or vendor.
     DEBPKG:debian/ld_run_path - Remove standard libs from LD_RUN_PATH as per Debian policy.
     DEBPKG:debian/libnet_config_path - Set location of libnet.cfg to /etc/perl/Net as /usr may not be writable.
     DEBPKG:debian/m68k_thread_stress -http://bugs.debian.org/495826  Disable some threads tests on m68k for now due to missing TLS.
     DEBPKG:debian/mod_paths - Tweak @INC ordering for Debian
     DEBPKG:debian/module_build_man_extensions -http://bugs.debian.org/479460  Adjust Module::Build manual page extensions for the Debian Perl policy
     DEBPKG:debian/perl_synopsis -http://bugs.debian.org/278323  Rearrange perl.pod
     DEBPKG:debian/prune_libs -http://bugs.debian.org/128355  Prune the list of libraries wanted to what we actually need.
     DEBPKG:debian/use_gdbm - Explicitly link against -lgdbm_compat in ODBM_File/NDBM_File.
     DEBPKG:fixes/assorted_docs -http://bugs.debian.org/443733  [384f06a] Math::BigInt::CalcEmu documentation grammar fix
     DEBPKG:fixes/net_smtp_docs -http://bugs.debian.org/100195  [rt.cpan.org #36038] Document the Net::SMTP 'Port' option
     DEBPKG:fixes/processPL -http://bugs.debian.org/357264  [rt.cpan.org #17224] Always use PERLRUNINST when building perl modules.
     DEBPKG:debian/perlivp -http://bugs.debian.org/510895  Make perlivp skip include directories in /usr/local
     DEBPKG:fixes/pod2man-index-backslash -http://bugs.debian.org/521256  Escape backslashes in .IX entries
     DEBPKG:debian/disable-zlib-bundling - Disable zlib bundling in Compress::Raw::Zlib
     DEBPKG:fixes/kfreebsd_cppsymbols -http://bugs.debian.org/533098  [3b910a0] Add gcc predefined macros to $Config{cppsymbols} on GNU/kFreeBSD.
     DEBPKG:debian/cpanplus_definstalldirs -http://bugs.debian.org/533707  Configure CPANPLUS to use the site directories by default.
     DEBPKG:debian/cpanplus_config_path - Save local versions of CPANPLUS::Config::System into /etc/perl.
     DEBPKG:fixes/kfreebsd-filecopy-pipes -http://bugs.debian.org/537555  [16f708c] Fix File::Copy::copy with pipes on GNU/kFreeBSD
     DEBPKG:fixes/anon-tmpfile-dir -http://bugs.debian.org/528544  [perl #66452] Honor TMPDIR when open()ing an anonymous temporary file
     DEBPKG:fixes/abstract-sockets -http://bugs.debian.org/329291  [89904c0] Add support for Abstract namespace sockets.
     DEBPKG:fixes/hurd_cppsymbols -http://bugs.debian.org/544307  [eeb92b7] Add gcc predefined macros to $Config{cppsymbols} on GNU/Hurd.
     DEBPKG:fixes/autodie-flock -http://bugs.debian.org/543731  Allow for flock returning EAGAIN instead of EWOULDBLOCK on linux/parisc
     DEBPKG:fixes/archive-tar-instance-error -http://bugs.debian.org/539355  [rt.cpan.org #48879] Separate Archive::Tar instance error strings from each other
     DEBPKG:fixes/positive-gpos -http://bugs.debian.org/545234  [perl #69056] [c584a96] Fix \\G crash on first match
     DEBPKG:debian/devel-ppport-ia64-optim -http://bugs.debian.org/548943  Work around an ICE on ia64
     DEBPKG:fixes/trie-logic-match -http://bugs.debian.org/552291  [perl #69973] [0abd0d7] Fix a DoS in Unicode processing [CVE-2009-3626]
     DEBPKG:fixes/hppa-thread-eagain -http://bugs.debian.org/554218  make the threads-shared test suite more robust, fixing failures on hppa
     DEBPKG:fixes/crash-on-undefined-destroy -http://bugs.debian.org/564074  [perl #71952] [1f15e67] Fix a NULL pointer dereference when looking for a DESTROY method
     DEBPKG:fixes/tainted-errno -http://bugs.debian.org/574129  [perl #61976] [be1cf43] fix an errno stringification bug in taint mode
     DEBPKG:fixes/safe-upgrade -http://bugs.debian.org/582978  Upgrade Safe.pm to 2.25, fixing CVE-2010-1974
     DEBPKG:fixes/tell-crash -http://bugs.debian.org/578577  [f4817f3] Fix a tell() crash on bad arguments.
     DEBPKG:fixes/format-write-crash -http://bugs.debian.org/579537  [perl #22977] [421f30e] Fix a crash in format/write
     DEBPKG:fixes/arm-alignment -http://bugs.debian.org/289884  [f1c7503] Prevent gcc from optimizing the alignment test away on armel
     DEBPKG:fixes/fcgi-test - Fix a failure in CGI/t/fast.t when FCGI is installed
     DEBPKG:fixes/hurd-ccflags -http://bugs.debian.org/587901  Make hints/gnu.sh append to $ccflags rather than overriding them
     DEBPKG:debian/squelch-locale-warnings -http://bugs.debian.org/508764  Squelch locale warnings in Debian package maintainer scripts
     DEBPKG:fixes/lc-numeric-docs -http://bugs.debian.org/379329  [perl #78452] [903eb63] LC_NUMERIC documentation fixes
     DEBPKG:fixes/lc-numeric-sprintf -http://bugs.debian.org/601549  [perl #78632] [b3fd614] Fix sprintf not to ignore LC_NUMERIC with constants
     DEBPKG:fixes/concat-stack-corruption -http://bugs.debian.org/596105  [perl #78674] [e3393f5] Fix stack pointer corruption in pp_concat() with 'use encoding'
     DEBPKG:fixes/cgi-multiline-header -http://bugs.debian.org/606995  [CVE-2010-2761 CVE-2010-4410 CVE-2010-4411] CGI.pm MIME boundary and multiline header vulnerabilities
     DEBPKG:patchlevel -http://bugs.debian.org/567489  List packaged patches for 5.10.1-17 in patchlevel.h


@INC for perl 5.10.1:
     /etc/perl
     /usr/local/lib/perl/5.10.1
     /usr/local/share/perl/5.10.1
     /usr/lib/perl5
     /usr/share/perl5
     /usr/lib/perl/5.10
     /usr/share/perl/5.10
     /usr/local/lib/site_perl
     .


Environment for perl 5.10.1:
     HOME=/home/anthony
     LANG=en_US.UTF-8
     LANGUAGE=
     LD_LIBRARY_PATH (unset)
     LOGDIR (unset)
     PATH=/home/anthony/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games
     PERL_BADLANG (unset)
     SHELL=/bin/bash



@p5pRT
Copy link
Author

p5pRT commented Feb 4, 2011

From @demerphq

On 2 February 2011 22​:58, Anthony DeRobertis <perlbug-followup@​perl.org> wrote​:

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

This is a bug report for perl fromanthony@​derobert.net,
generated with the help of perlbug 1.39 running under perl 5.10.1.

-----------------------------------------------------------------
Hash​::Util has a 'use warnings' up top, which unconditionally enables
warnings in the module. However, it then does things like​:

       sub lock_hashref_recurse {
               my $hash = shift;

               lock_ref_keys($hash);
               foreach my $value (values %$hash) {
                       if (reftype($value) eq 'HASH') { #<---- HERE
                               lock_hashref_recurse($value);
                       }
                       Internals​::SvREADONLY($value,1);
               }
               return $hash
       }

Scalar​::Util​::reftype, however, returns undef if the value is not a
reference, leading to spewing a warning per non-reference value. That's
a lot of spewage!

There are two occurances I see upon a quick glance​: once in lock and
once in unlock. Both need to be protected or probably just have​:
       no warnings 'uninitialized'
added.

I guess/think this code was ported from a module that used a smarter
reftype() that didnt return undef for non references.

Which I guess we could have switched to use the cleaner mauve
reimplementation, but that was ripped out.

So yeah, I agree. Something should be done.

cheers.
Yves

--
perl -Mre=debug -e "/just|another|perl|hacker/"

@p5pRT
Copy link
Author

p5pRT commented Feb 4, 2011

The RT System itself - Status changed from 'new' to 'open'

@p5pRT
Copy link
Author

p5pRT commented Feb 6, 2011

From @cpansprout

On Wed Feb 02 13​:58​:23 2011, aderobertis@​metrics.net wrote​:

Hash​::Util has a 'use warnings' up top, which unconditionally enables
warnings in the module. However, it then does things like​:

sub lock\_hashref\_recurse \{
    my $hash = shift;

    lock\_ref\_keys\($hash\);
    foreach my $value \(values %$hash\) \{
        if \(reftype\($value\) eq 'HASH'\) \{ \#\<\-\-\-\- HERE
            lock\_hashref\_recurse\($value\);
        \}
        Internals&#8203;::SvREADONLY\($value\,1\);
    \}
    return $hash
\}

Scalar​::Util​::reftype, however, returns undef if the value is not a
reference, leading to spewing a warning per non-reference value.
That's
a lot of spewage!

There are two occurances I see upon a quick glance​: once in lock and
once in unlock. Both need to be protected or probably just have​:
no warnings 'uninitialized'
added.

Thank you for the report. This was fixed early on in the 5.13.x series.

@p5pRT
Copy link
Author

p5pRT commented Feb 6, 2011

@cpansprout - Status changed from 'open' to 'resolved'

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant