
perlbug-followup at perl
Oct 18, 2004, 1:42 PM
Views: 150
Permalink
|
|
[perl #32032] defined may incorrectly returns true in 5.8.X
|
|
# New Ticket Created by Austin Schutz # Please include the string: [perl #32032] # in the subject line of all future correspondence about this issue. # <URL: http://rt.perl.org:80/rt3/Ticket/Display.html?id=32032 > Included is a message I sent to the Expect.pm list regarding the behavior of IO::Tty. What I discovered while debugging the error was very strange behavior of defined(). I was able to recreate this error using both perl 5.8.0 and 5.8.4, so I suspect it is a bug endemic to the 5.8 series. In order to recreate the bug, TIOCSCTTY must not be defined. This may be accomplished by using a system which doesn't define this constant or by commenting out or undefining it. After building IO::Tty, make test will warn "warning: TIOCSCTTY failed" because the test if(defined TIOCSCTTY) at line 118 succeeds even though TIOCSCTTY is set to undef, and is clearly set as such by the module. IO::Tty version was 1.02, I've recreated this on a couple systems verying both by perl version and OS, so I'm not including my perl -V information here. Please let me know if there is anything I can do to help fix this bug or provide more relevant information. Thanks muchly, Austin ----- Forwarded message from Austin Schutz <tex [at] off> ----- > Date: Fri, 8 Oct 2004 13:48:13 -0700 > From: Austin Schutz <tex [at] off> > To: Roland Giersig <RGiersig [at] cpan> > Cc: Austin Schutz <tex [at] off>, Zhisong Jin <jjin [at] dynaccsys>, > expectperl-discuss [at] lists > Subject: Re: [Expectperl-discuss] re: building Expect.pm on solaris 9 > > On Fri, Oct 08, 2004 at 11:28:37AM +0200, Roland Giersig wrote: > > > > Hmm, in the 'perl Makefile.PL' step I'm trying to figure out what > > constants are defined by compiling test progs for each constant. Austin, > > as you seem to have a solaris machine on your hands, could you look into > > that and see why it gets defined? > > > > On my solaris machine I'm not able to replicate the issue because > I'm running an old perl: 5.00503, which doesn't exhibit this problem and > I can't get 5.8.4 to compile. > However, I _was_ able to replicate this on my home linux workstation > by commenting out #define TIOCSCTTY in /usr/include/asm/ioctls.h. > > I'm not sure why the code in question is being executed. Running > it in the debugger I still couldn't figure it out (output follows). It looks > to me like a perl bug. However, I was able to work around it by changing line > 118 to: > > if (defined TIOCSCTTY && TIOCSCTTY) { > > which _should_ be valid - I doubt any vendor defines TIOCSCTTY as 0. > > Austin > > DB<5> p defined TIOCSCTTY > > DB<6> l > 118==> if (defined TIOCSCTTY) { > 119: if (not defined ioctl( ${*$self}{'io_pty_slave'}, TIOCSCTTY, 0 )) { > 120: warn "warning: TIOCSCTTY failed, slave might not be set as control > ling terminal: $!" if $^W; > 121 } > 122 } elsif (defined TCSETCTTY) { > 123: if (not defined ioctl( ${*$self}{'io_pty_slave'}, TCSETCTTY, 0 )) { > 124: warn "warning: TCSETCTTY failed, slave might not be set as control > ling terminal: $!" if $^W; > 125 } > 126 } > 127 > DB<6> s > IO::Pty::make_slave_controlling_terminal(/root/.cpan/build/IO-Tty-1.02/blib/lib/ > IO/Pty.pm:119): > 119: if (not defined ioctl( ${*$self}{'io_pty_slave'}, TIOCSCTTY, 0 )) { > DB<6> p defined TIOCSCTTY > > DB<7> p defined TIOCSCTTY > > DB<8> if(defined TIOCSCTTY) { print "defined\n"; } > > DB<9> n > IO::Pty::make_slave_controlling_terminal(/root/.cpan/build/IO-Tty-1.02/blib/lib/IO/Pty.pm:119): > 119: if (not defined ioctl( ${*$self}{'io_pty_slave'}, TIOCSCTTY, 0 )) { > DB<9> n > Use of uninitialized value in ioctl at /root/.cpan/build/IO-Tty-1.02/blib/lib/IO/Pty.pm line 119, <XT> line 1. > IO::Pty::make_slave_controlling_terminal('IO::Pty=GLOB(0x8171f8c)') called at test.pl line 66 > IO::Pty::make_slave_controlling_terminal(/root/.cpan/build/IO-Tty-1.02/blib/lib/IO/Pty.pm:120): > 120: warn "warning: TIOCSCTTY failed, slave might not be set as controlling terminal: $!" if $^W; ----- End forwarded message -----
|