Prevent from some stack-not-ref-counted crashes in Carp
This commit is contained in:
parent
b853f44fd4
commit
217d519372
@ -0,0 +1,82 @@
|
||||
From b5ad485cc167b3b6aa43f83aa92bbf8b8811cb42 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <ppisar@redhat.com>
|
||||
Date: Fri, 20 Apr 2018 10:20:55 +0200
|
||||
Subject: [PATCH] Fix RT #52610: Carp: Do not crash when reading @DB::args
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Petr Pisar: Ported from perl after 5.27.8. The unreliable test was
|
||||
later deleted in a77eff3c and the comments rephrased in 02c84d7:
|
||||
|
||||
commit 4764858cb80e76fdba33cc1b3be8fcdef26df754
|
||||
Author: Pali <pali@cpan.org>
|
||||
Date: Wed Jan 31 22:43:46 2018 +0100
|
||||
|
||||
Fix RT #52610: Carp: Do not crash when reading @DB::args
|
||||
|
||||
Trying to read values from array @DB::args can lead to perl fatal error
|
||||
"Bizarre copy of ARRAY in scalar assignment". But missing, incomplete or
|
||||
possible incorrect value in @DB::args is not a fatal error for Carp.
|
||||
|
||||
Carp is primary used for reporting warnings and errors from other
|
||||
modules, so it should not crash perl when trying to print error message.
|
||||
|
||||
This patch safely iterates all elements of @DB::args array via eval { }
|
||||
block and replace already freed scalars for Carp usage by string
|
||||
"** argument not available anymore **".
|
||||
|
||||
This prevent crashing perl and allows to use Carp module. It it not a
|
||||
proper fix but rather workaround for Carp module. At least it allows to
|
||||
safely use Carp.
|
||||
|
||||
Patch amended by Yves Orton
|
||||
|
||||
Signed-off-by: Petr Písař <ppisar@redhat.com>
|
||||
---
|
||||
lib/Carp.pm | 22 ++++++++++++++++------
|
||||
1 file changed, 16 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/lib/Carp.pm b/lib/Carp.pm
|
||||
index 05052b9..60b2469 100644
|
||||
--- a/lib/Carp.pm
|
||||
+++ b/lib/Carp.pm
|
||||
@@ -203,11 +203,22 @@ sub caller_info {
|
||||
|
||||
my $sub_name = Carp::get_subname( \%call_info );
|
||||
if ( $call_info{has_args} ) {
|
||||
- my @args;
|
||||
- if (CALLER_OVERRIDE_CHECK_OK && @DB::args == 1
|
||||
- && ref $DB::args[0] eq ref \$i
|
||||
- && $DB::args[0] == \$i ) {
|
||||
- @DB::args = (); # Don't let anyone see the address of $i
|
||||
+ # guard our serialization of the stack from stack refcounting bugs
|
||||
+ my @args = map {
|
||||
+ my $arg;
|
||||
+ local $@= $@;
|
||||
+ eval {
|
||||
+ $arg = $_;
|
||||
+ 1;
|
||||
+ } or do {
|
||||
+ $arg = '** argument not available anymore **';
|
||||
+ };
|
||||
+ $arg;
|
||||
+ } @DB::args;
|
||||
+ if (CALLER_OVERRIDE_CHECK_OK && @args == 1
|
||||
+ && ref $args[0] eq ref \$i
|
||||
+ && $args[0] == \$i ) {
|
||||
+ @args = (); # Don't let anyone see the address of $i
|
||||
local $@;
|
||||
my $where = eval {
|
||||
my $func = $cgc or return '';
|
||||
@@ -226,7 +237,6 @@ sub caller_info {
|
||||
= "** Incomplete caller override detected$where; \@DB::args were not set **";
|
||||
}
|
||||
else {
|
||||
- @args = @DB::args;
|
||||
my $overflow;
|
||||
if ( $MaxArgNums and @args > $MaxArgNums )
|
||||
{ # More than we want to show?
|
||||
--
|
||||
2.14.3
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
Name: perl-Carp
|
||||
Version: 1.42
|
||||
Release: 395%{?dist}
|
||||
Release: 396%{?dist}
|
||||
Summary: Alternative warn and die for modules
|
||||
License: GPL+ or Artistic
|
||||
URL: http://search.cpan.org/dist/Carp/
|
||||
@ -11,10 +11,13 @@ Source0: http://www.cpan.org/authors/id/R/RJ/RJBS/Carp-%{cpan_version}.ta
|
||||
Patch0: Carp-1.38-Upgrade-to-1.40.patch
|
||||
# Unbundled from perl 5.25.12
|
||||
Patch1: Carp-1.40-Upgrade-to-1.42.patch
|
||||
# Prevent from some stack-not-ref-counted crashes in Carp, RT#52610,
|
||||
# in perl upstream after 5.27.8
|
||||
Patch2: Carp-1.42-Fix-RT-52610-Carp-Do-not-crash-when-reading-DB-args.patch
|
||||
BuildArch: noarch
|
||||
BuildRequires: make
|
||||
BuildRequires: perl-interpreter
|
||||
BuildRequires: perl-generators
|
||||
BuildRequires: perl-interpreter
|
||||
BuildRequires: perl(ExtUtils::MakeMaker) >= 6.76
|
||||
BuildRequires: perl(warnings)
|
||||
BuildRequires: perl(strict)
|
||||
@ -46,6 +49,7 @@ but it is a good educated guess.
|
||||
%setup -q -n Carp-%{cpan_version}
|
||||
%patch0 -p1
|
||||
%patch1 -p1
|
||||
%patch2 -p1
|
||||
|
||||
%build
|
||||
perl Makefile.PL INSTALLDIRS=vendor NO_PACKLIST=1
|
||||
@ -64,6 +68,9 @@ make test
|
||||
%{_mandir}/man3/*
|
||||
|
||||
%changelog
|
||||
* Fri Apr 20 2018 Petr Pisar <ppisar@redhat.com> - 1.42-396
|
||||
- Prevent from some stack-not-ref-counted crashes in Carp (RT#52610)
|
||||
|
||||
* Thu Feb 08 2018 Fedora Release Engineering <releng@fedoraproject.org> - 1.42-395
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user