develooper Front page | perl.perl5.porters | Postings from June 2003

Re: B::Deparse fixes

Thread Previous | Thread Next
From:
Alexey Tourbin
Date:
June 10, 2003 07:25
Subject:
Re: B::Deparse fixes
Message ID:
20030610142402.GB20356@solemn.turbinal.org
On Mon, Jun 02, 2003 at 09:39:04PM +0200, Rafael Garcia-Suarez wrote:
> I just fixed this by change #19665.

Hi, thanks.  Two more kind of bugs in B::Deparse.

1) easy to reproduce with libnet-1.13/Net/FTP.pm, and I seem to be able
to fix it myself:

--- B/Deparse.pm~	2003-06-10 15:26:07 +0400
+++ B/Deparse.pm	2003-06-10 18:04:19 +0400
@@ -327,8 +327,9 @@
 	return unless $self->const_sv($constop)->PV eq $module;
 	$constop = $constop->sibling;
 	$version = $self->const_sv($constop);
-	if (class($version) ne "PVMG") {
-	    # version is either an integer or a double
+	if (class($version) eq "NV") {
+	    $version = $version->NV;
+    	} elsif (class($version) ne "PVMG") {
 	    $version = $version->PV;
 	} else {
 	    # version specified as a v-string

2) easy to reproduce with Sys/Syslog.pm.  It says:

Can't call method "isa" without a package or object reference at
/usr/lib/perl5/i386-linux/B/Deparse.pm line 1095.

As I've tried to track down the problem, I got the following caller()
trace for gv_name():

...
gv=B::GV=SCALAR(0x8355854) B::Deparse /usr/lib/perl5/i386-linux/B/Deparse.pm 2527
gv=B::GV=SCALAR(0x83572e4) B::Deparse /usr/lib/perl5/i386-linux/B/Deparse.pm 2535
gv=B::GV=SCALAR(0x8355890) B::Deparse /usr/lib/perl5/i386-linux/B/Deparse.pm 2527
gv=B::GV=SCALAR(0x8355764) B::Deparse /usr/lib/perl5/i386-linux/B/Deparse.pm 2535
gv=B::GV=SCALAR(0x835ba5c) B::Deparse /usr/lib/perl5/i386-linux/B/Deparse.pm 2527
gv=B::GV=SCALAR(0x83558e4) B::Deparse /usr/lib/perl5/i386-linux/B/Deparse.pm 2527
gv=B::GV=SCALAR(0x835ba5c) B::Deparse /usr/lib/perl5/i386-linux/B/Deparse.pm 2535
gv=B::GV=SCALAR(0x8357170) B::Deparse /usr/lib/perl5/i386-linux/B/Deparse.pm 2527
gv=B::GV=SCALAR(0x835595c) B::Deparse /usr/lib/perl5/i386-linux/B/Deparse.pm 2527
gv=B::GV=SCALAR(0x835ba8c) B::Deparse /usr/lib/perl5/i386-linux/B/Deparse.pm 2527
gv=B::GV=SCALAR(0x8356f9c) B::Deparse /usr/lib/perl5/i386-linux/B/Deparse.pm 2527
gv=B::GV=SCALAR(0x835baa4) B::Deparse /usr/lib/perl5/i386-linux/B/Deparse.pm 2527
gv=B::GV=SCALAR(0x831eeb8) B::Deparse /usr/lib/perl5/i386-linux/B/Deparse.pm 2527
gv=B::GV=SCALAR(0x835bb94) B::Deparse /usr/lib/perl5/i386-linux/B/Deparse.pm 2535
gv=B::GV=SCALAR(0x8355128) B::Deparse /usr/lib/perl5/i386-linux/B/Deparse.pm 2527
gv=B::GV=SCALAR(0x8350c64) B::Deparse /usr/lib/perl5/i386-linux/B/Deparse.pm 2527
gv=24 B::Deparse /usr/lib/perl5/i386-linux/B/Deparse.pm 3703

So the problem seems to be in pp_split, which calls gv_name with the value that
cannot be dereferenced.  I wish I could fix this, but I'm not a perl hacker...

Thread Previous | Thread Next


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About