Closed p5pRT closed 13 years ago
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: 9b47cddefd9b4a322e6382c8979ceeb2c3ac25c9 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
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.
The RT System itself - Status changed from 'new' to 'open'
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 6d24fbd10b671f02fd7526bee66bd955389d9ee4. 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.
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?
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.
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?
@cpansprout - Status changed from 'open' to 'resolved'
Migrated from rt.perl.org#77500 (status was 'resolved')
Searchable as RT77500$