Bug 1370954

Summary: Perl module Number::Fraction dumps core when loaded.
Product: [Fedora] Fedora Reporter: George Sicherman <colonel>
Component: perl-Number-FractionAssignee: Jitka Plesnikova <jplesnik>
Status: CLOSED NOTABUG QA Contact: Fedora Extras Quality Assurance <extras-qa>
Severity: low Docs Contact:
Priority: unspecified    
Version: 23CC: colonel, jplesnik, perl-devel, ppisar
Target Milestone: ---   
Target Release: ---   
Hardware: x86_64   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2016-09-02 14:13:00 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:

Description George Sicherman 2016-08-28 23:35:53 UTC
Description of problem:

     This Perl module dumps core when loaded.

Version-Release number of selected component (if applicable):

     2.00-1.fc23 noarch

How reproducible:

     Create a file with this in it:

         #!/usr/bin/perl

         use Number::Fraction;

Make it executable and execute it.

Actual results:

      Segmentation fault (core dumped)

Expected results:

      Exit with status 0.

Additional info:

      The computer is an HP workstation with a quad-core Xeon CPU.

Comment 1 Petr Pisar 2016-09-02 13:29:49 UTC
I cannot reproduce it. Does this command fails at your machine?

$ perl -e 'use Number::Fraction;'

It should not print anything. If it fails, I suspect you have some private copy of a binary Perl module installed that was built against older perl and is not compatible with Fedora's perl (e.g. after upgrading from Fedora 22). You can check it with strace command to see where the files are loaded from:

$ strace -e open -- perl -e 'use Number::Fraction;'
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libperl.so.5.22", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libpthread.so.0", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libresolv.so.2", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libnsl.so.1", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libdl.so.2", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libm.so.6", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libcrypt.so.1", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libutil.so.1", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libfreebl3.so", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
open("/dev/urandom", O_RDONLY)          = 3
open("/dev/null", O_RDONLY)             = 3
open("/usr/share/perl5/vendor_perl/Number/Fraction.pm", O_RDONLY) = 4
open("/usr/share/perl5/strict.pm", O_RDONLY) = 5
open("/usr/share/perl5/warnings.pm", O_RDONLY) = 5
open("/usr/share/perl5/vendor_perl/Carp.pm", O_RDONLY) = 5
open("/usr/share/perl5/vendor_perl/Exporter.pm", O_RDONLY) = 5
[...]
open("/usr/lib64/perl5/vendor_perl/Moose/Meta/Role/Application/ToRole.pm", O_RDONLY) = 6
open("/usr/lib64/perl5/vendor_perl/Moose/Meta/Role/Application/ToInstance.pm", O_RDONLY) = 6
open("/usr/lib64/perl5/vendor_perl/Moose/Meta/Attribute/Native.pm", O_RDONLY) = 6
+++ exited with 0 +++

Especially files that end with ".so" are important as they are binary Perl modules that must match current perl. The wrong location is usually from /usr/local or home user's home directory. My output for the .so file looks like this:

$ strace -e open -- perl -e 'use Number::Fraction;' 2>&1 |grep \\.so
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libperl.so.5.22", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libpthread.so.0", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libresolv.so.2", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libnsl.so.1", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libdl.so.2", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libm.so.6", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libcrypt.so.1", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libutil.so.1", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libfreebl3.so", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib64/perl5/vendor_perl/auto/List/Util/Util.so", O_RDONLY|O_CLOEXEC) = 6
open("/usr/lib64/perl5/vendor_perl/auto/Params/Util/Util.so", O_RDONLY|O_CLOEXEC) = 8
open("/usr/lib64/perl5/vendor_perl/auto/Sub/Name/Name.so", O_RDONLY|O_CLOEXEC) = 9
open("/usr/lib64/perl5/vendor_perl/auto/Package/Stash/XS/XS.so", O_RDONLY|O_CLOEXEC) = 8
open("/usr/lib64/perl5/vendor_perl/auto/List/MoreUtils/MoreUtils.so", O_RDONLY|O_CLOEXEC) = 10
open("/usr/lib64/perl5/auto/mro/mro.so", O_RDONLY|O_CLOEXEC) = 9
open("/usr/lib64/perl5/vendor_perl/auto/Sub/Identify/Identify.so", O_RDONLY|O_CLOEXEC) = 11
open("/usr/lib64/perl5/vendor_perl/auto/Moose/Moose.so", O_RDONLY|O_CLOEXEC) = 7
open("/usr/lib64/perl5/auto/B/B.so", O_RDONLY|O_CLOEXEC) = 9
open("/usr/lib64/perl5/auto/re/re.so", O_RDONLY|O_CLOEXEC) = 9

Comment 2 George Sicherman 2016-09-02 14:13:00 UTC
Thank you!  This was indeed the cause.  My Perl takes modules Runtime
and Classify from /usr/local/... and is dumping core on Classify.so.
I will clean out the local modules and close this bug report.