Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

VMS::Filespec and PVLV globs #10586

Closed
p5pRT opened this issue Aug 29, 2010 · 8 comments
Closed

VMS::Filespec and PVLV globs #10586

p5pRT opened this issue Aug 29, 2010 · 8 comments

Comments

@p5pRT
Copy link

p5pRT commented Aug 29, 2010

Migrated from rt.perl.org#77500 (status was 'resolved')

Searchable as RT77500$

@p5pRT
Copy link
Author

p5pRT commented Aug 29, 2010

From @cpansprout

There are three instances of ‘SvTYPE(mysv) == SVt_PVGV’ in vms/vms.c, one in candelete_fromperl and two in rmscopy_from_perl. I think they should actually be isGV_with_GP(mysv).

Without that change, a glob in a PVLV will not be recognised as a glob. Currently, a PVLV will never hold a glob, though that was supposed to be possible as of 5.9.1. Half the perl source code was modified to support them. See bug #77362.

Once the patch for #77632 is applied, it should be possible to write failing tests for this.

To test these you can put a glob in a PVLV by passing a nonexistent hash element to a subroutine and then assigning a glob to it​:

  my %hash;
  sub { for(shift) {
  $_ = *foo;
  # ... test candelete and rmscopy with $_ ...
  }}->($hash{any_key});

Not having access to VMS, I am hesitant to write a patch myself, as I have no way of testing it.

This perlbug -d output is quite meaningless, as it’s not for the machine on which this bug will occur​:


Flags​:
  category=core
  severity=low


Site configuration information for perl 5.13.4​:

Configured by sprout at Fri Aug 20 23​:24​:53 PDT 2010.

Summary of my perl5 (revision 5 version 13 subversion 4 patch v5.13.4-16-g16c9153) configuration​:
  Snapshot of​: 9b47cdd
  Platform​:
  osname=darwin, osvers=10.4.0, archname=darwin-2level
  uname='darwin pint.local 10.4.0 darwin kernel version 10.4.0​: fri apr 23 18​:28​:53 pdt 2010; root​:xnu-1504.7.4~1release_i386 i386 '
  config_args='-de -Dusedevel'
  hint=recommended, useposix=true, d_sigaction=define
  useithreads=undef, usemultiplicity=undef
  useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
  use64bitint=undef, use64bitall=undef, uselongdouble=undef
  usemymalloc=n, bincompat5005=undef
  Compiler​:
  cc='cc', ccflags ='-fno-common -DPERL_DARWIN -no-cpp-precomp -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include',
  optimize='-O3',
  cppflags='-no-cpp-precomp -fno-common -DPERL_DARWIN -no-cpp-precomp -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include'
  ccversion='', gccversion='4.2.1 (Apple Inc. build 5664)', gccosandvers=''
  intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234
  d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
  ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
  alignbytes=8, prototype=define
  Linker and Libraries​:
  ld='env MACOSX_DEPLOYMENT_TARGET=10.3 cc', ldflags =' -fstack-protector -L/usr/local/lib'
  libpth=/usr/local/lib /usr/lib
  libs=-ldbm -ldl -lm -lutil -lc
  perllibs=-ldl -lm -lutil -lc
  libc=/usr/lib/libc.dylib, so=dylib, useshrplib=false, libperl=libperl.a
  gnulibc_version=''
  Dynamic Linking​:
  dlsrc=dl_dlopen.xs, dlext=bundle, d_dlsymun=undef, ccdlflags=' '
  cccdlflags=' ', lddlflags=' -bundle -undefined dynamic_lookup -L/usr/local/lib -fstack-protector'

Locally applied patches​:
 


@​INC for perl 5.13.4​:
  /usr/local/lib/perl5/site_perl/5.13.4/darwin-2level
  /usr/local/lib/perl5/site_perl/5.13.4
  /usr/local/lib/perl5/5.13.4/darwin-2level
  /usr/local/lib/perl5/5.13.4
  /usr/local/lib/perl5/site_perl
  .


Environment for perl 5.13.4​:
  DYLD_LIBRARY_PATH (unset)
  HOME=/Users/sprout
  LANG=en_US.UTF-8
  LANGUAGE (unset)
  LD_LIBRARY_PATH (unset)
  LOGDIR (unset)
  PATH=/usr/bin​:/bin​:/usr/sbin​:/sbin​:/usr/local/bin​:/usr/X11/bin​:/usr/local/bin
  PERL_BADLANG (unset)
  SHELL=/bin/bash

@p5pRT
Copy link
Author

p5pRT commented Aug 30, 2010

From @craigberry

On Sun, Aug 29, 2010 at 4​:12 PM, Father Chrysostomos
<perlbug-followup@​perl.org> wrote​:

# New Ticket Created by  Father Chrysostomos
# Please include the string​:  [perl #77500]
# in the subject line of all future correspondence about this issue.
# <URL​: http​://rt.perl.org/rt3/Ticket/Display.html?id=77500 >

There are three instances of ‘SvTYPE(mysv) == SVt_PVGV’ in vms/vms.c, one in candelete_fromperl and two in rmscopy_from_perl. I think they should actually be isGV_with_GP(mysv).

Without that change, a glob in a PVLV will not be recognised as a glob. Currently, a PVLV will never hold a glob, though that was supposed to be possible as of 5.9.1. Half the perl source code was modified to support them. See bug #77362.

Once the patch for #77632 is applied, it should be possible to write failing tests for this.

To test these you can put a glob in a PVLV by passing a nonexistent hash element to a subroutine and then assigning a glob to it​:

 my %hash;
 sub { for(shift) {
  $_ = *foo;
  # ... test candelete and rmscopy with $_ ...
 }}->($hash{any_key});

Not having access to VMS, I am hesitant to write a patch myself, as I have no way of testing it.

Thanks for spotting this. The code in question has been there for
fourteen-plus years (since 5.002) so it's unsurprising what it does is
no longer up to snuff. I couldn't find any documentation on
isGV_with_GP, but it apparently came on the scene about four years
ago​:

http​://perl5.git.perl.org/perl.git/blobdiff/fb4fc1fa

and your suggestion sounds similar to what people have been doing in
other places since then. I'm testing it now and should be able to
report back within a couple of days.

@p5pRT
Copy link
Author

p5pRT commented Aug 30, 2010

The RT System itself - Status changed from 'new' to 'open'

@p5pRT
Copy link
Author

p5pRT commented Oct 4, 2010

From @craigberry

On Sun, Aug 29, 2010 at 10​:17 PM, Craig A. Berry
<craig.a.berry@​gmail.com> wrote​:

On Sun, Aug 29, 2010 at 4​:12 PM, Father Chrysostomos
<perlbug-followup@​perl.org> wrote​:

# New Ticket Created by  Father Chrysostomos
# Please include the string​:  [perl #77500]
# in the subject line of all future correspondence about this issue.
# <URL​: http​://rt.perl.org/rt3/Ticket/Display.html?id=77500 >

There are three instances of ‘SvTYPE(mysv) == SVt_PVGV’ in vms/vms.c, one in candelete_fromperl and two in rmscopy_from_perl. I think they should actually be isGV_with_GP(mysv).

Without that change, a glob in a PVLV will not be recognised as a glob. Currently, a PVLV will never hold a glob, though that was supposed to be possible as of 5.9.1. Half the perl source code was modified to support them. See bug #77362.

Done in 6d24fbd. I see no new test failures.

Once the patch for #77632 is applied, it should be possible to write failing tests for this.

To test these you can put a glob in a PVLV by passing a nonexistent hash element to a subroutine and then assigning a glob to it​:

 my %hash;
 sub { for(shift) {
  $_ = *foo;
  # ... test candelete and rmscopy with $_ ...
 }}->($hash{any_key});

Not having access to VMS, I am hesitant to write a patch myself, as I have no way of testing it.

I have not added any tests as I don't see quite what I can hang my hat
on from Perl that's a reliable success or failure condition. I did
experiment with the following test program​:

$ type foo.pl
use strict;
my %hash;

sub some_sub {
  for(shift) {
  $_ = *foo;
  my $x = VMS​::Filespec​::candelete($_);
  print $! unless $x;
  }
}

some_sub($hash{'nonexistent_key'});
__END__;

Before the change, that gives me​:

$ perl foo.pl
no such file or directory

after the change​:

$ perl foo.pl
invalid argument

Stepping through in the VMS debugger (the gdb equivalent), I've
verified that after the change this passes the glob test and proceeds
to test the SV with GvIOp (a test it fails, yielding EINVAL), whereas
before it didn't recognize it as glob and proceeded to treat the input
argument as a string containing a filename.

So I think it's working and the ticket can be closed, but there's more
than one condition that sets EINVAL, so if there is a reliable way to
make sure it stays working I'm not seeing it.

@p5pRT
Copy link
Author

p5pRT commented Oct 4, 2010

From @cpansprout

On Oct 3, 2010, at 5​:15 PM, Craig Berry via RT wrote​:

So I think it's working and the ticket can be closed, but there's more
than one condition that sets EINVAL, so if there is a reliable way to
make sure it stays working I'm not seeing it.

What happens if you create a temporary file, open it, and pass the handle to candelete?

@p5pRT
Copy link
Author

p5pRT commented Oct 4, 2010

From @craigberry

On Sun, Oct 3, 2010 at 8​:12 PM, Father Chrysostomos <sprout@​cpan.org> wrote​:

On Oct 3, 2010, at 5​:15 PM, Craig Berry via RT wrote​:

So I think it's working and the ticket can be closed, but there's more
than one condition that sets EINVAL, so if there is a reliable way to
make sure it stays working I'm not seeing it.

What happens if you create a temporary file, open it, and pass the handle to candelete?

That still works.

@p5pRT
Copy link
Author

p5pRT commented Oct 4, 2010

From @cpansprout

On Oct 3, 2010, at 7​:44 PM, Craig Berry via RT wrote​:

On Sun, Oct 3, 2010 at 8​:12 PM, Father Chrysostomos <sprout@​cpan.org> wrote​:

On Oct 3, 2010, at 5​:15 PM, Craig Berry via RT wrote​:

So I think it's working and the ticket can be closed, but there's more
than one condition that sets EINVAL, so if there is a reliable way to
make sure it stays working I'm not seeing it.

What happens if you create a temporary file, open it, and pass the handle to candelete?

That still works.

Then can you assign that handle to a PVLV and use it for testing?

@p5pRT
Copy link
Author

p5pRT commented Feb 26, 2011

@cpansprout - Status changed from 'open' to 'resolved'

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant