Skip Menu |

This queue is for tickets about the Win32-TieRegistry CPAN distribution.

Report information
The Basics
Id: 25102
Status: resolved
Priority: 0/
Queue: Win32-TieRegistry

People
Owner: Nobody in particular
Requestors: bruce [...] dilke.com
Cc:
AdminCc:

Bug Information
Severity: (no value)
Broken in: (no value)
Fixed in: 0.28



Subject: Win32::TieRegistry Problem
Date: Fri, 23 Feb 2007 14:22:06 -0400
To: <bug-Win32-TieRegistry [...] rt.cpan.org>
From: "Bruce Dilke" <bruce [...] dilke.com>
Hi, I have been unable to get myself out of this one, thought I should get help to see if it was a bug. Win32::TieRegistry produces an error: (using verions 0.24 and 0.25) Can't use an undefined value as an ARRAY reference at c:/Perl/site/lib/Win32/TieRegistry.pm line 678. it does this while looping through a list of subkey names to get the values. It will correctly process a varying number of the subkeys before crashing ,sometimes as many as 70, sometimes as few as 5. Thanks for any Insight Bruce The shard of Code I am using (environment etc. at the end of email): use Win32::AdminMisc; use Win32::ODBC; use Win32::TieRegistry; $Machine = Win32::NodeName(); $keystring = "HKEY_LOCAL_MACHINE\\SOFTWARE\\ODBC\\ODBC.INI\\"; $key = new Win32::TieRegistry $keystring; @subKeyNames = $key->SubKeyNames; my $DsnCount = 0; foreach my $DSNminor ( @subKeyNames ) { my @attr=("","","","","","","","","",""); my $DSNName = $DSNminor; my $ODBCUserName = ""; my $ODBCDriverVersion = ""; my $ODBCManagerVersion = ""; my $ODBCDriverName = ""; my $ODBCDatabase = ""; my $ODBCServer = ""; my $Result = ""; my $ErrorText = ""; my $AttrCount = 0; my %Config = Win32::ODBC::GetDSN( $DSNminor ); foreach my $Attrib ( keys( %Config ) ) { @attr[$AttrCount]= $Config{$Attrib}; $AttrCount++; } # # Use the registry entries to determine characteristics of the DSN # $Result = "Unknown"; $ErrorText = "Unknown"; $ODBCDriverVersion = "Unknown"; $ODBCManagerVersion = "Unknown"; # # Get Value Names for this registry Key # $key1=""; $key1= new Win32::TieRegistry "LMachine\\Software\\ODBC\\ODBC.INI\\", {Access=>KEY_READ, Delimiter=>"\\"}; $subkey= $key1->Open($DSNminor." <file://\\> \\",{Access=>KEY_READ, Delimiter=>"\\"}); print $key1." $DSNminor\n"; @valueNames = ("x","x","x","x","x","x"); @valueNames = $subkey->ValueNames; $ODBCDriverName = $subkey->GetValue("Driver") if $valueNames[0] = "Driver"; $ODBCUserName = $subkey->GetValue("LastUser") if $valueNames[3] = "LastUser"; $ODBCServer = $subkey->GetValue("Server") if $valueNames[2] = "Server"; $ODBCDatabase = $subkey->GetValue("Database") if $valueNames[5] = "Database"; $DsnCount++; } environment: D:\>perl -V Summary of my perl5 (revision 5 version 8 subversion 8) configuration: Platform: osname=MSWin32, osvers=5.0, archname=MSWin32-x86-multi-thread uname='' config_args='undef' hint=recommended, useposix=true, d_sigaction=undef 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='cl', ccflags ='-nologo -GF -W3 -MD -Zi -DNDEBUG -O1 -DWIN32 -D_CONSOLE -DNO_STRICT -DHAVE_DES_FCRYPT -DNO_HASH_SEED -DUSE_SI TECUSTOMIZE -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DUSE_PERLIO -DPERL_MSVCRT_READFIX', optimize='-MD -Zi -DNDEBUG -O1', cppflags='-DWIN32' ccversion='12.00.8804', gccversion='', gccosandvers='' intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234 d_longlong=undef, longlongsize=8, d_longdbl=define, longdblsize=10 ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='__int64', lseeksize=8 alignbytes=8, prototype=define Linker and Libraries: ld='link', ldflags ='-nologo -nodefaultlib -debug -opt:ref,icf -libpath:"C:\Perl\lib\CORE" -machine:x86' libpth=\lib libs= oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib netapi32.lib uuid.lib ws2_32.lib mpr.lib winmm.lib version.lib odbc32.lib odbccp32.lib msvcrt.lib perllibs= oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32 .lib netapi32.lib uuid.lib ws2_32.lib mpr.lib winmm.lib version.lib odbc32.lib odbccp32.lib msvcrt.lib libc=msvcrt.lib, so=dll, useshrplib=yes, libperl=perl58.lib gnulibc_version='' Dynamic Linking: dlsrc=dl_win32.xs, dlext=dll, d_dlsymun=undef, ccdlflags=' ' cccdlflags=' ', lddlflags='-dll -nologo -nodefaultlib -debug -opt:ref,icf -libpath:"C:\Perl\lib\CORE" -machine:x86' Characteristics of this binary (from libperl): Compile-time options: MULTIPLICITY PERL_IMPLICIT_CONTEXT PERL_IMPLICIT_SYS PERL_MALLOC_WRAP PL_OP_SLAB_ALLOC USE_ITHREADS USE_LARGE_FILES USE_PERLIO USE_SITECUSTOMIZE Locally applied patches: ActivePerl Build 819 [267479] Iin_load_module moved for compatibility with build 806 PerlEx support in CGI::Carp Less verbose ExtUtils::Install and Pod::Find Patch for CAN-2005-0448 from Debian with modifications Rearrange @INC so that 'site' is searched before 'perl' Partly reverted 24733 to preserve binary compatibility 28671 Define PERL_NO_DEV_RANDOM on Windows 28376 Add error checks after execing PL_cshname or PL_sh_path 28305 Pod::Html should not convert "foo" into ``foo'' 27736 Make perl_fini() run with Sun WorkShop compiler 27619 Bug in Term::ReadKey being triggered by a bug in Term::ReadLine 27549 Move DynaLoader.o into libperl.so 27528 win32_pclose() error exit doesn't unlock mutex 27527 win32_async_check() can loop indefinitely 27515 ignore directories when searching @INC 27359 Fix -d:Foo=bar syntax 27210 Fix quote typo in c2ph 27203 Allow compiling swigged C++ code 27200 Make stat() on Windows handle trailing slashes correctly 27194 Get perl_fini() running on HP-UX again 27133 Initialise lastparen in the regexp structure 27034 Avoid "Prototype mismatch" warnings with autouse 26970 Make Passive mode the default for Net::FTP 26921 Avoid getprotobyname/number calls in IO::Socket::INET 26897,26903 Make common IPPROTO_* constants always available 26670 Make '-s' on the shebang line parse -foo=bar switches 26536 INSTALLSCRIPT versus INSTALLDIRS 26379 Fix alarm() for Windows 2003 26087 Storable 0.1 compatibility 25861 IO::File performace issue 25084 long groups entry could cause memory exhaustion 24699 ICMP_UNREACHABLE handling in Net::Ping Built under MSWin32 Compiled at Aug 29 2006 12:42:41 %ENV: PERL5LIB="C:\Program Files\ActiveState Perl Dev Kit 6.0\lib\" PERLDB_OPTS="RemotePort=127.0.0.1:2000" @INC: C:\Program Files\ActiveState Perl Dev Kit 6.0\lib\ c:/Perl/site/lib c:/Perl/lib .

Message body is not shown because it is too large.

On Fri Feb 23 13:22:43 2007, bruce@dilke.com wrote: Show quoted text
> Hi, > I have been unable to get myself out of this one, thought I should get help > to see if it was a bug. > > Win32::TieRegistry produces an error: > (using verions 0.24 and 0.25) > Can't use an undefined value as an ARRAY reference at > c:/Perl/site/lib/Win32/TieRegistry.pm line 678. > > it does this while looping through a list of subkey names to get the values. > It will correctly process a varying number of the subkeys before crashing > ,sometimes as many as 70, sometimes as few as 5. > > Thanks for any Insight > Bruce > > The shard of Code I am using (environment etc. at the end of email): > > > use Win32::AdminMisc; > use Win32::ODBC; > use Win32::TieRegistry; > $Machine = Win32::NodeName(); > $keystring = "HKEY_LOCAL_MACHINE\\SOFTWARE\\ODBC\\ODBC.INI\\"; > $key = new Win32::TieRegistry $keystring; > @subKeyNames = $key->SubKeyNames; > my $DsnCount = 0; > foreach my $DSNminor ( @subKeyNames ) > { > my @attr=("","","","","","","","","",""); > my $DSNName = $DSNminor; > my $ODBCUserName = ""; > my $ODBCDriverVersion = ""; > my $ODBCManagerVersion = ""; > my $ODBCDriverName = ""; > my $ODBCDatabase = ""; > my $ODBCServer = ""; > my $Result = ""; > my $ErrorText = ""; > my $AttrCount = 0; > my %Config = Win32::ODBC::GetDSN( $DSNminor ); > foreach my $Attrib ( keys( %Config ) ) > { > @attr[$AttrCount]= $Config{$Attrib}; > $AttrCount++; > } > # > # Use the registry entries to determine characteristics of the DSN > # > $Result = "Unknown"; > $ErrorText = "Unknown"; > $ODBCDriverVersion = "Unknown"; > $ODBCManagerVersion = "Unknown"; > # > # Get Value Names for this registry Key > # > $key1=""; > $key1= new Win32::TieRegistry "LMachine\\Software\\ODBC\\ODBC.INI\\", > {Access=>KEY_READ, Delimiter=>"\\"}; > $subkey= $key1->Open($DSNminor." <file://\\> \\",{Access=>KEY_READ, > Delimiter=>"\\"}); > print $key1." $DSNminor\n"; > @valueNames = ("x","x","x","x","x","x"); > @valueNames = $subkey->ValueNames; > $ODBCDriverName = $subkey->GetValue("Driver") if $valueNames[0] = > "Driver"; > $ODBCUserName = $subkey->GetValue("LastUser") if $valueNames[3] = > "LastUser"; > $ODBCServer = $subkey->GetValue("Server") if $valueNames[2] = > "Server"; > $ODBCDatabase = $subkey->GetValue("Database") if $valueNames[5] = > "Database"; > $DsnCount++; > } > > > > environment: > D:\>perl -V > Summary of my perl5 (revision 5 version 8 subversion 8) configuration: > Platform: > osname=MSWin32, osvers=5.0, archname=MSWin32-x86-multi-thread > uname='' > config_args='undef' > hint=recommended, useposix=true, d_sigaction=undef > 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='cl', ccflags ='-nologo -GF -W3 -MD -Zi -DNDEBUG -O1 -DWIN32 > -D_CONSOLE -DNO_STRICT -DHAVE_DES_FCRYPT -DNO_HASH_SEED -DUSE_SI > TECUSTOMIZE -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DUSE_PERLIO > -DPERL_MSVCRT_READFIX', > optimize='-MD -Zi -DNDEBUG -O1', > cppflags='-DWIN32' > ccversion='12.00.8804', gccversion='', gccosandvers='' > intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234 > d_longlong=undef, longlongsize=8, d_longdbl=define, longdblsize=10 > ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='__int64', > lseeksize=8 > alignbytes=8, prototype=define > Linker and Libraries: > ld='link', ldflags ='-nologo -nodefaultlib -debug -opt:ref,icf > -libpath:"C:\Perl\lib\CORE" -machine:x86' > libpth=\lib > libs= oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib > comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib > netapi32.lib uuid.lib ws2_32.lib mpr.lib winmm.lib version.lib odbc32.lib > odbccp32.lib msvcrt.lib > perllibs= oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib > comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32 > .lib netapi32.lib uuid.lib ws2_32.lib mpr.lib winmm.lib version.lib > odbc32.lib odbccp32.lib msvcrt.lib > libc=msvcrt.lib, so=dll, useshrplib=yes, libperl=perl58.lib > gnulibc_version='' > Dynamic Linking: > dlsrc=dl_win32.xs, dlext=dll, d_dlsymun=undef, ccdlflags=' ' > cccdlflags=' ', lddlflags='-dll -nologo -nodefaultlib -debug > -opt:ref,icf -libpath:"C:\Perl\lib\CORE" -machine:x86' > > > Characteristics of this binary (from libperl): > Compile-time options: MULTIPLICITY PERL_IMPLICIT_CONTEXT > PERL_IMPLICIT_SYS PERL_MALLOC_WRAP > PL_OP_SLAB_ALLOC USE_ITHREADS USE_LARGE_FILES > USE_PERLIO USE_SITECUSTOMIZE > Locally applied patches: > ActivePerl Build 819 [267479] > Iin_load_module moved for compatibility with build 806 > PerlEx support in CGI::Carp > Less verbose ExtUtils::Install and Pod::Find > Patch for CAN-2005-0448 from Debian with modifications > Rearrange @INC so that 'site' is searched before 'perl' > Partly reverted 24733 to preserve binary compatibility > 28671 Define PERL_NO_DEV_RANDOM on Windows > 28376 Add error checks after execing PL_cshname or PL_sh_path > 28305 Pod::Html should not convert "foo" into ``foo'' > 27736 Make perl_fini() run with Sun WorkShop compiler > 27619 Bug in Term::ReadKey being triggered by a bug in > Term::ReadLine > 27549 Move DynaLoader.o into libperl.so > 27528 win32_pclose() error exit doesn't unlock mutex > 27527 win32_async_check() can loop indefinitely > 27515 ignore directories when searching @INC > 27359 Fix -d:Foo=bar syntax > 27210 Fix quote typo in c2ph > 27203 Allow compiling swigged C++ code > 27200 Make stat() on Windows handle trailing slashes correctly > 27194 Get perl_fini() running on HP-UX again > 27133 Initialise lastparen in the regexp structure > 27034 Avoid "Prototype mismatch" warnings with autouse > 26970 Make Passive mode the default for Net::FTP > 26921 Avoid getprotobyname/number calls in IO::Socket::INET > 26897,26903 Make common IPPROTO_* constants always available > 26670 Make '-s' on the shebang line parse -foo=bar switches > 26536 INSTALLSCRIPT versus INSTALLDIRS > 26379 Fix alarm() for Windows 2003 > 26087 Storable 0.1 compatibility > 25861 IO::File performace issue > 25084 long groups entry could cause memory exhaustion > 24699 ICMP_UNREACHABLE handling in Net::Ping > Built under MSWin32 > Compiled at Aug 29 2006 12:42:41 > %ENV: > PERL5LIB="C:\Program Files\ActiveState Perl Dev Kit 6.0\lib\" > PERLDB_OPTS="RemotePort=127.0.0.1:2000" > @INC: > C:\Program Files\ActiveState Perl Dev Kit 6.0\lib\ > c:/Perl/site/lib > c:/Perl/lib > .
The problem is with Win32API::Registry. See some good analysis here: https://rt.perl.org/Public/Bug/Display.html?id=123207 The only solution is to patch Win32API::Registry. The author seems a little unresponsive (see https://rt.cpan.org/Ticket/Display.html?id=37750.) If someone who knows XS would like to offer to take it over I think that would be best.
From: Bruce Reed
This appears to be the same bug as https://rt.cpan.org/Public/Bug/Display.html?id=99892 .
Bug was fixed in version 0.28 -- Alexandr Ciornii, http://chorny.net