[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [Debconf-devel] Bug#480533: "uninitialized value" warnings from Perl during install



I've reproduced this and done some debugging.

If I install perl (not just perl-base), the uninitialised value goes away!

I'm leaning solidly toward this being a perl problem now, and it seems
it's a problem in the perl-base package, possibly missing something pulled
in if full perl is installed.



It seems that the call to split is sometimes causing this uninitalised value
warning. I've verified that it can happen when $reply has a value such as "0
multiselect escape " when going into the split. And it is still defined when
coming out, AND both values split out are defined and correct. So what's
uninitialised?

Here's a backtrace I got of how SWASHNEW gets called. This call seems
to be done implicity by perl.

May 20 23:05:11 in-target: 	utf8::SWASHNEW('utf8', 'IsSpacePerl', undef, 1, 0) called at /usr/share/perl5/Debconf/FrontEnd/Passthrough.pm line 74
May 20 23:05:11 in-target: 	Debconf::FrontEnd::Passthrough::talk('Debconf::FrontEnd::Passthrough=HASH(0x853aa58)', 'CAPB', 'backup') called at /usr/share/perl5/Debconf/FrontEnd/Passthrough.pm line 113
May 20 23:05:11 in-target: 	Debconf::FrontEnd::Passthrough::capb_backup('Debconf::FrontEnd::Passthrough=HASH(0x853aa58)', 1) called at /usr/share/perl5/Debconf/ConfModule.pm line 250
May 20 23:05:11 in-target: 	Debconf::ConfModule::command_capb('Debconf::ConfModule=HASH(0x8661f10)', 'backup', 'multiselect') called at /usr/share/perl5/Debconf/ConfModule.pm line 132
May 20 23:05:11 in-target: 	Debconf::ConfModule::process_command('Debconf::ConfModule=HASH(0x8661f10)', 'CAPB backup multiselect') called at /usr/share/perl5/Debconf/ConfModule.pm line 74
May 20 23:05:11 in-target: 	Debconf::ConfModule::communicate('Debconf::ConfModule=HASH(0x8661f10)') called at /usr/sbin/dpkg-preconfigure line 133

Tracing through SWASHNEW, I see:

- $extras is not set, because $list ($_[2]) is undef.
- So 'for my $x ($extras)' just sets $x to undef, causing 2
  uninitialised value warnings as code in the loop operates on $x.
- I'm not sure what it returns exactly (hard to tell w/o Data::Dumper,
  which is in perl-modules), but I suspect that it contains some
  sort of uninitialised value..

In debconf, I can work around the perl problem and avoid the warning messages
with this change:

Index: Debconf/FrontEnd/Passthrough.pm
===================================================================
--- Debconf/FrontEnd/Passthrough.pm	(revision 2280)
+++ Debconf/FrontEnd/Passthrough.pm	(working copy)
@@ -95,7 +95,7 @@
 	$reply = <$readfh>;
 	chomp($reply);
 	debug developer => "<---- $reply";
-	my ($tag, $val) = split(' ', $reply, 2);
+	my ($tag, $val) = split(/ /, $reply, 2);
 	$val = '' unless defined $val;
 	$val = Debconf::Encoding::convert("UTF-8", $val);
 
So I think that SWASHNEW is getting called incorrectly somehow for
the implied whitespace-matching regexp in the ' ' pattern passed to
split.

FWIW, this is the only instance of split(' ', ...) in debconf, aside from
one in a rarely used code path. But I don't see anything wrong with
the code in debconf, so I think that rather than change those, this needs
to be reassigned to perl-base.

-- 
see shy jo

Attachment: signature.asc
Description: Digital signature


Reply to: