Bug 1084399

Summary: t/comp/parser.t loads modules from system instead from build directory
Product: [Fedora] Fedora Reporter: Petr Pisar <ppisar>
Component: perlAssignee: Petr Pisar <ppisar>
Status: CLOSED RAWHIDE QA Contact: Fedora Extras Quality Assurance <extras-qa>
Severity: unspecified Docs Contact:
Priority: unspecified    
Version: rawhideCC: cweyl, iarnell, jplesnik, kasal, perl-devel, ppisar, psabata, rc040203, tcallawa
Target Milestone: ---   
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
URL: https://rt.perl.org/Ticket/Display.html?id=121579
Whiteboard:
Fixed In Version: perl-5.18.2-297.fc21 Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2014-04-04 13:49:32 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Attachments:
Description Flags
Proposed fix
none
Upstream fix ported to 5.18.2 none

Description Petr Pisar 2014-04-04 09:07:38 UTC
perl-5.18.2-296.fc21 loads modules from system instead from build directory at some tests. E.g. t/comp/parser.t:

$ LD_PRELOAD=../libperl.so strace -fq -eopen,execve ./perl harness comp/parser.t 2>&1 |grep '"/usr/lib64/perl5/'
[pid 13545] open("/usr/lib64/perl5/re.pm", O_RDONLY) = 5
[pid 13545] open("/usr/lib64/perl5/auto/re/re.so", O_RDONLY|O_CLOEXEC) = 5

This is caused by a bug in t/TEST where _cmd() functions forgets to emit "-I" arguments if requested. The _cmd() is called with:

$VAR1 = {
          'return_dir' => undef,
          'testswitch' => '',
          'perl' => './perl',
          'file' => '',
          'utf8' => '',
          'lib' => '../lib',
          'run_dir' => undef,
          'switch' => '',
          'test' => 'comp/parser.t'
        };
$VAR2 = 'perl';

but it returns:

$VAR1 = './perl comp/parser.t ';

while it should return:

$VAR1 = './perl -I../lib comp/parser.t ';

The fix is to change line:

        $cmd = $perl . _quote_args($args) . " $test $redir";

into:
        my $lib = ($options->{lib} eq '') ? '' : " -I$options->{lib}";
        $cmd = $perl . $lib . _quote_args($args) . " $test $redir";

Comment 1 Petr Pisar 2014-04-04 11:37:04 UTC
Created attachment 882662 [details]
Proposed fix

Comment 2 Petr Pisar 2014-04-04 11:41:26 UTC
Reported to upstream <https://rt.perl.org/Ticket/Display.html?id=121579>.

Comment 3 Petr Pisar 2014-04-04 12:50:57 UTC
Created attachment 882684 [details]
Upstream fix ported to 5.18.2

The proposed fix was wrong. Upstream prefers different approach already implemented in this patch.

Comment 4 Petr Pisar 2014-04-04 13:49:32 UTC
Different tests still loads:

/usr/lib64/perl5/vendor_perl/auto/HTML/Parser/Parser.so
/usr/lib64/perl5/vendor_perl/auto/Params/Util/Util.so
/usr/lib64/perl5/vendor_perl/HTML/Entities.pm
/usr/lib64/perl5/vendor_perl/HTML/Parser.pm
and some /usr/share/perl5 stuff.

But these things did not go away even with originally proposed patch, so they are probably isolated execs of perl.

However this is different story, maybe different bug report.