Login | Register For Free | Help
Search for: (Advanced)

Mailing List Archive: Perl: porters
[perl #32032] defined may incorrectly returns true in 5.8.X
 

Index | Next | Previous | View Flat


perlbug-followup at perl

Oct 18, 2004, 1:42 PM


Views: 225
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 -----

Subject User Time
[perl #32032] defined may incorrectly returns true in 5.8.X perlbug-followup at perl Oct 18, 2004, 1:42 PM
    Re: [perl #32032] defined may incorrectly returns true in 5.8.X nick at ing-simmons Oct 19, 2004, 6:21 AM
    Re: [perl #32032] defined may incorrectly returns true in 5.8.X tex at off Oct 19, 2004, 10:03 AM
    Re: [perl #32032] defined may incorrectly returns true in 5.8.X tex at off Oct 19, 2004, 10:06 AM
    Re: [perl #32032] defined may incorrectly returns true in 5.8.X doy at tozt May 31, 2012, 3:15 PM

  Index | Next | Previous | View Flat
 
 


Interested in having your list archived? Contact Gossamer Threads
 
  Web Applications & Managed Hosting Powered by Gossamer Threads Inc.