Skip Menu |

CC: rjbs [...] cpan.org
Subject: make require stop at the first found/failed file
Date: Tue, 29 May 2012 11:21:36 -0400 (EDT)
To: perlbug [...] perl.org
From: rjbs [...] cpan.org
Download (untitled) / with headers
text/plain 4.3k
This is a bug report for perl from rjbs@cpan.org, generated with the help of perlbug 1.39 running under perl 5.16.0. ----------------------------------------------------------------- [Please describe your issue here] If @INC contains ./a and ./b, and ./a/Foo.pm exists but is unreadable, the attempt to "require Foo" should fail, regardless of the contents of b. (Further, the error should probably be "./a/Foo.pm cannot be read: $!", but this may cause breakage on things that are overly-reliant on the error message from require.) For further reference, see [perl #112946] [Please do not change anything below this line] ----------------------------------------------------------------- --- Flags: category=core severity=wishlist --- Site configuration information for perl 5.16.0: Configured by rjbs at Sun May 20 14:03:44 EDT 2012. Summary of my perl5 (revision 5 version 16 subversion 0) configuration: Platform: osname=darwin, osvers=11.4.0, archname=darwin-2level uname='darwin walrus.local 11.4.0 darwin kernel version 11.4.0: mon apr 9 19:32:15 pdt 2012; root:xnu-1699.26.8~1release_x86_64 x86_64 ' config_args='-de -Dprefix=/Users/rjbs/perl5/perlbrew/perls/16.0' hint=recommended, useposix=true, d_sigaction=define useithreads=undef, usemultiplicity=undef useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef use64bitint=define, use64bitall=define, uselongdouble=undef usemymalloc=n, bincompat5005=undef Compiler: cc='cc', ccflags ='-fno-common -DPERL_DARWIN -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -I/opt/local/include', optimize='-O3', cppflags='-fno-common -DPERL_DARWIN -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -I/opt/local/include' ccversion='', gccversion='4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.1.00)', gccosandvers='' intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678 d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16 ivtype='long', ivsize=8, 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 -L/opt/local/lib' libpth=/usr/local/lib /opt/local/lib /usr/lib libs=-lgdbm -ldbm -ldl -lm -lutil -lc perllibs=-ldl -lm -lutil -lc libc=, 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 -L/opt/local/lib -fstack-protector' Locally applied patches: --- @INC for perl 5.16.0: /Users/rjbs/.perlbrew/libs/16.0@std/lib/perl5/darwin-2level /Users/rjbs/.perlbrew/libs/16.0@std/lib/perl5/darwin-2level /Users/rjbs/.perlbrew/libs/16.0@std/lib/perl5 /Users/rjbs/perl5/perlbrew/perls/16.0/lib/site_perl/5.16.0/darwin-2level /Users/rjbs/perl5/perlbrew/perls/16.0/lib/site_perl/5.16.0 /Users/rjbs/perl5/perlbrew/perls/16.0/lib/5.16.0/darwin-2level /Users/rjbs/perl5/perlbrew/perls/16.0/lib/5.16.0 . --- Environment for perl 5.16.0: DYLD_LIBRARY_PATH (unset) HOME=/Users/rjbs LANG=en_US.UTF-8 LANGUAGE (unset) LD_LIBRARY_PATH (unset) LOGDIR (unset) PATH=/Users/rjbs/.perlbrew/libs/16.0@std/bin:/Users/rjbs/perl5/perlbrew/bin:/Users/rjbs/perl5/perlbrew/perls/16.0/bin:/Users/rjbs/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/local/bin:/Users/rjbs/code/hla:/Users/rjbs/code/hla:/Users/rjbs/code/hla PERL5LIB=/Users/rjbs/.perlbrew/libs/16.0@std/lib/perl5/darwin-2level:/Users/rjbs/.perlbrew/libs/16.0@std/lib/perl5 PERLBREW_BASHRC_VERSION=0.42 PERLBREW_HOME=/Users/rjbs/.perlbrew PERLBREW_LIB=std PERLBREW_MANPATH=/Users/rjbs/.perlbrew/libs/16.0@std/man:/Users/rjbs/perl5/perlbrew/perls/16.0/man PERLBREW_PATH=/Users/rjbs/.perlbrew/libs/16.0@std/bin:/Users/rjbs/perl5/perlbrew/bin:/Users/rjbs/perl5/perlbrew/perls/16.0/bin PERLBREW_PERL=16.0 PERLBREW_ROOT=/Users/rjbs/perl5/perlbrew PERLBREW_VERSION=0.42 PERLDOC=-n/opt/local/bin/groff PERL_AUTOINSTALL=--skipdeps PERL_BADLANG (unset) PERL_LOCAL_LIB_ROOT=/Users/rjbs/.perlbrew/libs/16.0@std PERL_MB_OPT=--install_base /Users/rjbs/.perlbrew/libs/16.0@std PERL_MM_OPT=INSTALL_BASE=/Users/rjbs/.perlbrew/libs/16.0@std SHELL=/opt/local/bin/zsh
CC: bugs-bitbucket [...] rt.perl.org
Subject: Re: [perl #113422] make require stop at the first found/failed file
Date: Sat, 2 Jun 2012 15:31:04 -0300
To: perl5-porters [...] perl.org
From: Brian Fraser <fraserbn [...] gmail.com>

Message body is not shown because sender requested not to inline it.

Download (untitled) / with headers
text/plain 1.2k
On Tue, May 29, 2012 at 12:22 PM, Ricardo SIGNES <perlbug-followup@perl.org> wrote:
Show quoted text
# New Ticket Created by  Ricardo SIGNES
# Please include the string:  [perl #113422]
# in the subject line of all future correspondence about this issue.
# <URL: https://rt.perl.org:443/rt3/Ticket/Display.html?id=113422 >


This is a bug report for perl from rjbs@cpan.org,
generated with the help of perlbug 1.39 running under perl 5.16.0.


-----------------------------------------------------------------
[Please describe your issue here]


If @INC contains ./a and ./b, and ./a/Foo.pm exists but is unreadable, the
attempt to "require Foo" should fail, regardless of the contents of b.

(Further, the error should probably be "./a/Foo.pm cannot be read: $!", but
this may cause breakage on things that are overly-reliant on the error message
from require.)

For further reference, see [perl #112946]



 
How about something like the attached patch? The error message is different from what was suggested, because I forgot that something had been suggested at all; Feel free to change that. I'm currently having a failure on porting/checkcase.t, but it looks unrelated (it's also happening on a clean build of blead); sans that, all tests passes.

CC: perl5-porters [...] perl.org, bugs-bitbucket [...] rt.perl.org
Subject: Re: [perl #113422] make require stop at the first found/failed file
Date: Mon, 4 Jun 2012 20:32:02 -0400
To: Brian Fraser <fraserbn [...] gmail.com>
From: Ricardo Signes <perl.p5p [...] rjbs.manxome.org>
Download (untitled) / with headers
text/plain 577b
* Brian Fraser <fraserbn@gmail.com> [2012-06-02T14:31:04] Show quoted text
> How about something like the attached patch? The error message is different > from what was suggested, because I forgot that something had been suggested > at all; Feel free to change that. I'm currently having a failure on > porting/checkcase.t, but it looks unrelated (it's also happening on a clean > build of blead); sans that, all tests passes.
Cool. I did not test it, but I'm guessing that this test will fail when run as root. It should probably skip if the file, chmodded -r, is still readable. -- rjbs
Download signature.asc
application/pgp-signature 490b

Message body not shown because it is not plain text.

RT-Send-CC: perl5-porters [...] perl.org
Download (untitled) / with headers
text/plain 388b
Applied (with some modifications) as 2433d39. In particular, I fixed the test when running as root, and changed the error message to match the error already in perldiag. "Can't locate Foo.pm: Permission denied" isn't a great error, but we already have "Can't locate Foo.pm: Too many open files", so I figured it wouldn't be too bad (although if anyone wants to change it, do feel free).
RT-Send-CC: perl5-porters [...] perl.org
Download (untitled) / with headers
text/plain 1.3k
We were bitten by this fix. The description didn't help finding the reason of the error: -sh-4.1$ /usr/local/booking-perl/5.18.2/bin/perl5.18.2 -e 'print "@INC\n"' /usr/local/git_tree/main/lib /usr/local/booking-perl/5.18.2/site/lib /usr/local/booking-perl/5.18.2/lib . -sh-4.1$ /usr/local/booking-perl/5.18.2/bin/perl5.18.2 -e 'use warnings; print "@INC\n"' Can't locate warnings.pm: Permission denied at -e line 1. BEGIN failed--compilation aborted at -e line 1. -sh-4.1$ ls -l /usr/local/booking-perl/5.18.2/lib/warnings.pm -r--r--r-- 1 root root 20624 Jan 28 2014 /usr/local/booking-perl/5.18.2/lib/warnings.pm The problem was having a directory in PERL5LIB that had the wrong permissions. Test case: $ PERL5LIB=/root /usr/local/booking-perl/5.18.2/bin/perl5.18.2 -e 'use warnings; print "@INC\n"' Can't locate warnings.pm: Permission denied at -e line 1. BEGIN failed--compilation aborted at -e line 1. $ PERL5LIB=/root /usr/local/booking-perl/5.14.2/bin/perl5.14.2 -e 'use warnings; print "@INC\n"' /root /usr/local/booking-perl/5.14.2/site/lib /usr/local/booking-perl/5.14.2/lib . So perl isn't distinguishing from "no permission to read file" and "no permission to access a component in @INC". Could the fix be changed to only report on file permissions, or make the error more informative (include the path that gave the error, not just the module name)? Regards.
RT-Send-CC: perl5-porters [...] perl.org
Download (untitled) / with headers
text/plain 618b
Dne Pá 19.zář.2014 02:06:38, lfrocha@gmail.com napsal(a): Show quoted text
> We were bitten by this fix. > > The description didn't help finding the reason of the error: > -sh-4.1$ /usr/local/booking-perl/5.18.2/bin/perl5.18.2 -e 'print > "@INC\n"' > /usr/local/git_tree/main/lib /usr/local/booking-perl/5.18.2/site/lib > /usr/local/booking-perl/5.18.2/lib . > > -sh-4.1$ /usr/local/booking-perl/5.18.2/bin/perl5.18.2 -e 'use > warnings; print "@INC\n"' > Can't locate warnings.pm: Permission denied at -e line 1. > BEGIN failed--compilation aborted at -e line 1. >
I proposed a better error message in ticket #123270. -- Petr


This service is sponsored and maintained by Best Practical Solutions and runs on Perl.org infrastructure.

For issues related to this RT instance (aka "perlbug"), please contact perlbug-admin at perl.org