Bug 1390907

Summary: perl segmentation fault when using PerlIO Layer :locale and threads
Product: Red Hat Enterprise Linux 6 Reporter: Martin Kyral <mkyral>
Component: perlAssignee: perl-maint-list
Status: CLOSED ERRATA QA Contact: Martin Kyral <mkyral>
Severity: unspecified Docs Contact:
Priority: unspecified    
Version: 6.9CC: bnater, jorton, ppisar, psabata
Target Milestone: rcKeywords: Patch
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
URL: https://rt.perl.org/Public/Bug/Display.html?id=31923
Whiteboard:
Fixed In Version: perl-5.10.1-144.el6 Doc Type: If docs needed, set a value
Doc Text:
Perl interpreter no longer crashes after using the PerlIO locale pragma When a thread was spawned after using the PerlIO locale pragma, the Perl interpreter terminated unexpectedly with a segmentation fault. An upstream patch has been applied, which fixes PerlIO::encoding object duplication. As a result, threads are correctly created after setting a file handle encoding.
Story Points: ---
Clone Of: 1344749 Environment:
Last Closed: 2017-03-21 09:25: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
Fix ported to 5.10.1 none

Description Martin Kyral 2016-11-02 08:51:13 UTC
The bug is present in RHEL 6.9 as well.

Version-Release number of selected component (if applicable):
perl-5.10.1-143.el6

+++ This bug was initially created as a clone of Bug #1344749 +++

Description of problem:

perl segmentation fault when using PerlIO Layer :locale and threads


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

Red Hat Enterprise Linux Server release 7.2


How reproducible:

~~~~
[root@dhcp7-145 abhi]# perl
use open IO => ':locale';
use threads;
sub loop {for ($x = 1; $x < 1000000000000; $x++) {}}
$thr = threads->create(\&loop);
^d

Segmentation fault (core dumped)
~~~~


The script should not core dump but print a message like it does when run without the "open" pragma.

# perl
use threads;
sub loop {for ($x = 1; $x < 1000000000000; $x++) {}}
$thr = threads->create(\&loop);
^d
Perl exited with active threads:
        1 running and unjoined
        0 finished and unjoined
        0 running and detached


Additional info:

1. the crash is in the PUSHSTACKi(PERLSI_MAGIC); expansion

2. looks like a very old bug :( http://www.gossamer-threads.com/lists/perl/porters/219693) and it appears to have been fixed in 2015, so maybe our perl is missing it 

3. link to report is 
~~~
https://rt.perl.org/Public/Bug/Display.html?id=44887
~~~

and link to patch is 
~~~
https://rt.perl.org/Public/Ticket/Attachment/1362828/730066/0001-Properly-duplicate-PerlIO-encoding-objects.patch
~~~

Comment 2 Petr Pisar 2016-11-02 14:05:41 UTC
Created attachment 1216578 [details]
Fix ported to 5.10.1

Comment 8 errata-xmlrpc 2017-03-21 09:25:32 UTC
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory, and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.

https://rhn.redhat.com/errata/RHBA-2017-0598.html