# New Ticket Created by slaven@rezic.de # Please include the string: [perl #132648] # in the subject line of all future correspondence about this issue. # <URL: https://rt.perl.org/Ticket/Display.html?id=132648 > This is a bug report for perl from slaven@rezic.de, generated with the help of perlbug 1.40 running under perl 5.26.1. ----------------------------------------------------------------- The functions getcwd and abs_path return different values for the XS and pure perl variants if a directory is non-existent. The XS variant returns undef, while the PP variant returns an empty string. A test program: #!/usr/bin/perl use strict; use warnings; use Test::More 'no_plan'; use File::Temp 'tempdir'; use Cwd 'getcwd', 'abs_path'; my $tmp = tempdir(CLEANUP => 1); mkdir "$tmp/testdir" or die $!; chdir "$tmp/testdir" or die $!; rmdir "$tmp/testdir" or die $!; is getcwd, undef, 'XS getcwd on non-existent directory'; is abs_path("."), undef, 'XS abs_path on non-existent directory'; { no warnings 'redefine'; # force pure perl variants local *Cwd::abs_path = \&Cwd::_perl_abs_path; local *Cwd::getcwd = \&Cwd::_perl_getcwd; is Cwd::getcwd, undef, 'PP getcwd on non-existent directory'; is Cwd::abs_path("."), undef, 'PP abs_path on non-existent directory'; } chdir "/"; __END__ Output: ok 1 - XS getcwd on non-existent directory ok 2 - XS abs_path on non-existent directory readdir(./..): No such file or directory at /tmp/cwd.pl line 20. not ok 3 - PP getcwd on non-existent directory # Failed test 'PP getcwd on non-existent directory' # at /tmp/cwd.pl line 20. # got: '' # expected: undef readdir(./..): No such file or directory at /tmp/cwd.pl line 21. not ok 4 - PP abs_path on non-existent directory # Failed test 'PP abs_path on non-existent directory' # at /tmp/cwd.pl line 21. # got: '' # expected: undef 1..4 # Looks like you failed 2 tests of 4. Additionally, the PP variants are quite loud while the XS variant is silent in this situation. But this might be acceptable. Probably the fix is to change all "return ''" statements in _perl_abs_path to "return undef". Regards, Slaven ----------------------------------------------------------------- --- Flags: category=library severity=low module=Cwd --- Site configuration information for perl 5.26.1: Configured by eserte at Sat Sep 23 09:36:11 CEST 2017. Summary of my perl5 (revision 5 version 26 subversion 1) configuration: Platform: osname=linux osvers=3.16.0-4-amd64 archname=x86_64-linux uname='linux cabulja 3.16.0-4-amd64 #1 smp debian 3.16.39-1+deb8u2 (2017-03-07) x86_64 gnulinux ' config_args='-ds -e -Dprefix=/opt/perl-5.26.1 -Dcf_email=srezic@cpan.org' hint=recommended useposix=true d_sigaction=define useithreads=undef usemultiplicity=undef use64bitint=define use64bitall=define uselongdouble=undef usemymalloc=n default_inc_excludes_dot=define bincompat5005=undef Compiler: cc='cc' ccflags ='-fwrapv -fno-strict-aliasing -pipe -fstack-protector-strong -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_FORTIFY_SOURCE=2' optimize='-O2' cppflags='-fwrapv -fno-strict-aliasing -pipe -fstack-protector-strong -I/usr/local/include' ccversion='' gccversion='4.9.2' gccosandvers='' intsize=4 longsize=8 ptrsize=8 doublesize=8 byteorder=12345678 doublekind=3 d_longlong=define longlongsize=8 d_longdbl=define longdblsize=16 longdblkind=3 ivtype='long' ivsize=8 nvtype='double' nvsize=8 Off_t='off_t' lseeksize=8 alignbytes=8 prototype=define Linker and Libraries: ld='cc' ldflags =' -fstack-protector-strong -L/usr/local/lib' libpth=/usr/local/lib /usr/lib/gcc/x86_64-linux-gnu/4.9/include-fixed /usr/include/x86_64-linux-gnu /usr/lib /lib/x86_64-linux-gnu /lib/../lib /usr/lib/x86_64-linux-gnu /usr/lib/../lib /lib libs=-lpthread -lnsl -lgdbm -ldb -ldl -lm -lcrypt -lutil -lc -lgdbm_compat perllibs=-lpthread -lnsl -ldl -lm -lcrypt -lutil -lc libc=libc-2.19.so so=so useshrplib=false libperl=libperl.a gnulibc_version='2.19' Dynamic Linking: dlsrc=dl_dlopen.xs dlext=so d_dlsymun=undef ccdlflags='-Wl,-E' cccdlflags='-fPIC' lddlflags='-shared -O2 -L/usr/local/lib -fstack-protector-strong' --- @INC for perl 5.26.1: /opt/perl-5.26.1/lib/site_perl/5.26.1/x86_64-linux /opt/perl-5.26.1/lib/site_perl/5.26.1 /opt/perl-5.26.1/lib/5.26.1/x86_64-linux /opt/perl-5.26.1/lib/5.26.1 --- Environment for perl 5.26.1: HOME=/home/eserte LANG=en_US.UTF-8 LANGUAGE (unset) LD_LIBRARY_PATH (unset) LOGDIR (unset) PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/eserte/bin/linux-gnu:/home/eserte/bin/sh:/home/eserte/bin:/home/eserte/bin/pistachio-perl/bin:/usr/games:/home/eserte/devel PERLDOC=-MPod::Perldoc::ToTextOverstrike PERL_BADLANG (unset) SHELL=/bin/zshThread Next