[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#962234: marked as done (stretch-pu: package perl/5.24.1-3+deb9u7)



Your message dated Sat, 18 Jul 2020 13:07:00 +0100
with message-id <b8d89cdfeeda7b6d1ef96a8706a20f9525c2151b.camel@adam-barratt.org.uk>
and subject line Closing requests for fixes included in 9.13 point release
has caused the Debian Bug report #962234,
regarding stretch-pu: package perl/5.24.1-3+deb9u7
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact owner@bugs.debian.org
immediately.)


-- 
962234: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=962234
Debian Bug Tracking System
Contact owner@bugs.debian.org with problems
--- Begin Message ---
Package: release.debian.org
Severity: normal
Tags: stretch
User: release.debian.org@packages.debian.org
Usertags: pu

Upstream released fixes for three regexp-related security issues
on Monday:

https://metacpan.org/pod/release/XSAWYERX/perl-5.28.3/pod/perldelta.pod

The Debian security team would like these as no-dsa, so we would like
to provide them in a point release. The patches have been trivially
backported from 5.28. See #962005.

A FTBFS fix is also included. Please let us know if it's okay to
upload.

Cheers
Dominic.
diff --git a/cpan/IO-Socket-IP/t/01local-client-v4.t b/cpan/IO-Socket-IP/t/01local-client-v4.t
index 7ab7156993..f6aeac4c3b 100644
--- a/cpan/IO-Socket-IP/t/01local-client-v4.t
+++ b/cpan/IO-Socket-IP/t/01local-client-v4.t
@@ -8,7 +8,7 @@ use Test::More;
 use IO::Socket::IP;
 
 use IO::Socket::INET;
-use Socket qw( inet_aton inet_ntoa pack_sockaddr_in unpack_sockaddr_in );
+use Socket qw( inet_aton inet_ntoa pack_sockaddr_in unpack_sockaddr_in AI_NUMERICHOST );
 
 # Some odd locations like BSD jails might not like INADDR_LOOPBACK. We'll
 # establish a baseline first to test against
@@ -29,12 +29,14 @@ foreach my $socktype (qw( SOCK_STREAM SOCK_DGRAM )) {
       LocalHost => "127.0.0.1",
       Type      => Socket->$socktype,
       Proto     => ( $socktype eq "SOCK_STREAM" ? "tcp" : "udp" ), # Because IO::Socket::INET is stupid and always presumes tcp
+      GetAddrInfoFlags => AI_NUMERICHOST,
    ) or die "Cannot listen on PF_INET - $@";
 
    my $socket = IO::Socket::IP->new(
       PeerHost    => "127.0.0.1",
       PeerService => $testserver->sockport,
       Type        => Socket->$socktype,
+      GetAddrInfoFlags => AI_NUMERICHOST,
    );
 
    ok( defined $socket, "IO::Socket::IP->new constructs a $socktype socket" ) or
diff --git a/cpan/IO-Socket-IP/t/02local-server-v4.t b/cpan/IO-Socket-IP/t/02local-server-v4.t
index c0d349f573..fb711f08bd 100644
--- a/cpan/IO-Socket-IP/t/02local-server-v4.t
+++ b/cpan/IO-Socket-IP/t/02local-server-v4.t
@@ -8,7 +8,7 @@ use Test::More;
 use IO::Socket::IP;
 
 use IO::Socket::INET;
-use Socket qw( inet_aton inet_ntoa pack_sockaddr_in unpack_sockaddr_in );
+use Socket qw( inet_aton inet_ntoa pack_sockaddr_in unpack_sockaddr_in AI_NUMERICHOST );
 
 # Some odd locations like BSD jails might not like INADDR_LOOPBACK. We'll
 # establish a baseline first to test against
@@ -29,6 +29,7 @@ foreach my $socktype (qw( SOCK_STREAM SOCK_DGRAM )) {
       LocalHost => "127.0.0.1",
       LocalPort => "0",
       Type      => Socket->$socktype,
+      GetAddrInfoFlags => AI_NUMERICHOST,
    );
 
    ok( defined $testserver, "IO::Socket::IP->new constructs a $socktype socket" ) or
diff --git a/cpan/IO-Socket-IP/t/03local-cross-v4.t b/cpan/IO-Socket-IP/t/03local-cross-v4.t
index 8cac72a95b..3e8174ee08 100644
--- a/cpan/IO-Socket-IP/t/03local-cross-v4.t
+++ b/cpan/IO-Socket-IP/t/03local-cross-v4.t
@@ -6,6 +6,7 @@ use warnings;
 use Test::More;
 
 use IO::Socket::IP;
+use Socket qw(AI_NUMERICHOST);
 
 foreach my $socktype (qw( SOCK_STREAM SOCK_DGRAM )) {
    my $testserver = IO::Socket::IP->new(
@@ -13,12 +14,14 @@ foreach my $socktype (qw( SOCK_STREAM SOCK_DGRAM )) {
       LocalHost => "127.0.0.1",
       LocalPort => "0",
       Type      => Socket->$socktype,
+      GetAddrInfoFlags => AI_NUMERICHOST,
    ) or die "Cannot listen on PF_INET - $@";
 
    my $socket = IO::Socket::IP->new(
       PeerHost    => "127.0.0.1",
       PeerService => $testserver->sockport,
       Type        => Socket->$socktype,
+      GetAddrInfoFlags => AI_NUMERICHOST,
    ) or die "Cannot connect on PF_INET - $@";
 
    my $testclient = ( $socktype eq "SOCK_STREAM" ) ? 
diff --git a/cpan/IO-Socket-IP/t/11sockopts.t b/cpan/IO-Socket-IP/t/11sockopts.t
index 90f92ae7bd..856ff28f4e 100644
--- a/cpan/IO-Socket-IP/t/11sockopts.t
+++ b/cpan/IO-Socket-IP/t/11sockopts.t
@@ -8,7 +8,7 @@ use Test::More;
 use IO::Socket::IP;
 
 use Errno qw( EACCES );
-use Socket qw( SOL_SOCKET SO_REUSEADDR SO_REUSEPORT SO_BROADCAST );
+use Socket qw( SOL_SOCKET SO_REUSEADDR SO_REUSEPORT SO_BROADCAST AI_NUMERICHOST);
 
 TODO: {
    local $TODO = "SO_REUSEADDR doesn't appear to work on cygwin smokers" if $^O eq "cygwin";
@@ -21,6 +21,7 @@ TODO: {
       Type      => SOCK_STREAM,
       Listen    => 1,
       ReuseAddr => 1,
+      GetAddrInfoFlags => AI_NUMERICHOST,
    ) or die "Cannot socket() - $@";
 
    ok( $sock->getsockopt( SOL_SOCKET, SO_REUSEADDR ), 'SO_REUSEADDR set' );
@@ -39,6 +40,7 @@ SKIP: {
       Type      => SOCK_STREAM,
       Listen    => 1,
       ReusePort => 1,
+      GetAddrInfoFlags => AI_NUMERICHOST,
    ) or die "Cannot socket() - $@";
 
    ok( $sock->getsockopt( SOL_SOCKET, SO_REUSEPORT ), 'SO_REUSEPORT set' );
@@ -51,6 +53,7 @@ SKIP: {
       LocalHost => "127.0.0.1",
       Type      => SOCK_DGRAM,
       Broadcast => 1,
+      GetAddrInfoFlags => AI_NUMERICHOST,
    );
    skip "Privileges required to set broadcast on datagram socket", 1 if !$sock and $! == EACCES;
    die "Cannot socket() - $@" unless $sock;
diff --git a/cpan/IO-Socket-IP/t/18fdopen.t b/cpan/IO-Socket-IP/t/18fdopen.t
index 20cbe46d47..6843a2c3d2 100644
--- a/cpan/IO-Socket-IP/t/18fdopen.t
+++ b/cpan/IO-Socket-IP/t/18fdopen.t
@@ -6,12 +6,13 @@ use warnings;
 use Test::More;
 
 use IO::Socket::IP;
-use Socket qw( SOCK_STREAM );
+use Socket qw( SOCK_STREAM AI_NUMERICHOST );
 
 my $s1 = IO::Socket::IP->new(
    LocalHost => "127.0.0.1",
    Type      => SOCK_STREAM,
    Listen    => 1,
+   GetAddrInfoFlags => AI_NUMERICHOST,
 ) or die "Cannot listen on AF_INET - $@";
 
 my $s2 = IO::Socket::IP->new;
diff --git a/cpan/IO-Socket-IP/t/20subclass.t b/cpan/IO-Socket-IP/t/20subclass.t
index 231bd52cab..fbc9cff23e 100644
--- a/cpan/IO-Socket-IP/t/20subclass.t
+++ b/cpan/IO-Socket-IP/t/20subclass.t
@@ -6,16 +6,19 @@ use warnings;
 use Test::More;
 
 use IO::Socket::IP;
+use Socket qw( AI_NUMERICHOST );
 
 my $server = IO::Socket::IP->new(
    Listen    => 1,
    LocalHost => "127.0.0.1",
    LocalPort => 0,
+   GetAddrInfoFlags => AI_NUMERICHOST,
 ) or die "Cannot listen on PF_INET - $!";
 
 my $client = IO::Socket::IP->new(
    PeerHost => $server->sockhost,
    PeerPort => $server->sockport,
+   GetAddrInfoFlags => AI_NUMERICHOST,
 ) or die "Cannot connect on PF_INET - $!";
 
 my $accepted = $server->accept( 'MySubclass' )
diff --git a/cpan/IO-Socket-IP/t/21as-inet.t b/cpan/IO-Socket-IP/t/21as-inet.t
index 2b8713d46f..fedb8be538 100644
--- a/cpan/IO-Socket-IP/t/21as-inet.t
+++ b/cpan/IO-Socket-IP/t/21as-inet.t
@@ -6,16 +6,19 @@ use warnings;
 use Test::More;
 
 use IO::Socket::IP;
+use Socket qw( AI_NUMERICHOST );
 
 my $server = IO::Socket::IP->new(
    Listen    => 1,
    LocalHost => "127.0.0.1",
    LocalPort => 0,
+   GetAddrInfoFlags => AI_NUMERICHOST,
 ) or die "Cannot listen on PF_INET - $!";
 
 my $client = IO::Socket::IP->new(
    PeerHost => $server->sockhost,
    PeerPort => $server->sockport,
+   GetAddrInfoFlags => AI_NUMERICHOST,
 ) or die "Cannot connect on PF_INET - $!";
 
 my $accepted = $server->accept
diff --git a/cpan/IO-Socket-IP/t/22timeout.t b/cpan/IO-Socket-IP/t/22timeout.t
index a4c28b3af0..c4a08f5d1f 100644
--- a/cpan/IO-Socket-IP/t/22timeout.t
+++ b/cpan/IO-Socket-IP/t/22timeout.t
@@ -6,17 +6,20 @@ use warnings;
 use Test::More;
 
 use IO::Socket::IP;
+use Socket qw( AI_NUMERICHOST );
 
 my $server = IO::Socket::IP->new(
    Listen    => 1,
    LocalHost => "127.0.0.1",
    LocalPort => 0,
+   GetAddrInfoFlags => AI_NUMERICHOST,
 ) or die "Cannot listen on PF_INET - $!";
 
 my $client = IO::Socket::IP->new(
    PeerHost => $server->sockhost,
    PeerPort => $server->sockport,
    Timeout  => 0.1,
+   GetAddrInfoFlags => AI_NUMERICHOST,
 ) or die "Cannot connect on PF_INET - $!";
 
 ok( defined $client, 'client constructed with Timeout' );
diff --git a/cpan/IO-Socket-IP/t/30nonblocking-connect.t b/cpan/IO-Socket-IP/t/30nonblocking-connect.t
index 518bd2ebd8..ade8349354 100644
--- a/cpan/IO-Socket-IP/t/30nonblocking-connect.t
+++ b/cpan/IO-Socket-IP/t/30nonblocking-connect.t
@@ -8,7 +8,7 @@ use Test::More;
 use IO::Socket::IP;
 
 use IO::Socket::INET;
-use Socket qw( inet_aton inet_ntoa pack_sockaddr_in unpack_sockaddr_in );
+use Socket qw( inet_aton inet_ntoa pack_sockaddr_in unpack_sockaddr_in AI_NUMERICHOST );
 use Errno qw( EINPROGRESS EWOULDBLOCK );
 
 # Some odd locations like BSD jails might not like INADDR_LOOPBACK. We'll
@@ -27,6 +27,7 @@ my $testserver = IO::Socket::INET->new(
    Listen    => 1,
    LocalHost => "127.0.0.1",
    Type      => SOCK_STREAM,
+   GetAddrInfoFlags => AI_NUMERICHOST,
 ) or die "Cannot listen on PF_INET - $@";
 
 my $socket = IO::Socket::IP->new(
@@ -34,6 +35,7 @@ my $socket = IO::Socket::IP->new(
    PeerService => $testserver->sockport,
    Type        => SOCK_STREAM,
    Blocking    => 0,
+   GetAddrInfoFlags => AI_NUMERICHOST,
 );
 
 ok( defined $socket, 'IO::Socket::IP->new( Blocking => 0 ) constructs a socket' ) or
diff --git a/debian/.git-dpm b/debian/.git-dpm
index 9f7bc9372d..7f785904f5 100644
--- a/debian/.git-dpm
+++ b/debian/.git-dpm
@@ -1,6 +1,6 @@
 # see git-dpm(1) from git-dpm package
-fa594ebedfe64ff2ea2101e07618daeaa9d6e0eb
-fa594ebedfe64ff2ea2101e07618daeaa9d6e0eb
+e5a5e4056884afc8bf630675094fad92e409a30b
+e5a5e4056884afc8bf630675094fad92e409a30b
 13beb365bfa6ab6c49c061bd55769bf272a5e1bf
 13beb365bfa6ab6c49c061bd55769bf272a5e1bf
 perl_5.24.1.orig.tar.xz
diff --git a/debian/changelog b/debian/changelog
index 0920bf60ae..f7884dc6dd 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,16 @@
+perl (5.24.1-3+deb9u7) UNRELEASED; urgency=medium
+
+  * Multiple regexp security fixes (Closes: #962005)
+     + [SECURITY] CVE-2020-10543: Buffer overflow caused by a crafted
+       regular expression
+     + [SECURITY] CVE-2020-10878: Integer overflow via malformed bytecode
+       produced by a crafted regular expression
+     + [SECURITY] CVE-2020-12723: Buffer overflow caused by a crafted
+       regular expression
+  * Fix FTBFS with IPv6-only host (Closes: #962019)
+
+ -- Dominic Hargreaves <dom@earth.li>  Wed, 03 Jun 2020 23:54:47 +0100
+
 perl (5.24.1-3+deb9u6) stretch; urgency=medium
 
   * Add backported Time-Local patch by Bernhard M. Wiedemann fixing test
diff --git a/debian/patches/debian/CVE-2016-1238/base-pm-amends-pt2.diff b/debian/patches/debian/CVE-2016-1238/base-pm-amends-pt2.diff
index 17795a6e05..fdfda6a6fc 100644
--- a/debian/patches/debian/CVE-2016-1238/base-pm-amends-pt2.diff
+++ b/debian/patches/debian/CVE-2016-1238/base-pm-amends-pt2.diff
@@ -65,17 +65,17 @@ Origin: upstream, http://perl5.git.perl.org/perl.git/commit/1afa2890005f3acdb579
 Patch-Name: debian/CVE-2016-1238/base-pm-amends-pt2.diff
 ---
  MANIFEST                            |  1 +
- dist/base/lib/base.pm               | 55 +++++++++++++++++++++++++++++++++++--
- dist/base/t/incdot.t                | 55 +++++++++++++++++++++++++++++++++++++
- dist/base/t/lib/BaseIncMandatory.pm |  9 ++++++
- dist/base/t/lib/BaseIncOptional.pm  | 13 +++++++++
+ dist/base/lib/base.pm               | 55 +++++++++++++++++++++++++++--
+ dist/base/t/incdot.t                | 55 +++++++++++++++++++++++++++++
+ dist/base/t/lib/BaseIncMandatory.pm |  9 +++++
+ dist/base/t/lib/BaseIncOptional.pm  | 13 +++++++
  5 files changed, 131 insertions(+), 2 deletions(-)
  create mode 100644 dist/base/t/incdot.t
  create mode 100644 dist/base/t/lib/BaseIncMandatory.pm
  create mode 100644 dist/base/t/lib/BaseIncOptional.pm
 
 diff --git a/MANIFEST b/MANIFEST
-index e4331f166..e6a3dd929 100644
+index e4331f166a..e6a3dd9296 100644
 --- a/MANIFEST
 +++ b/MANIFEST
 @@ -3007,6 +3007,7 @@ dist/base/t/fields-5_6_0.t	See if fields work
@@ -87,7 +87,7 @@ index e4331f166..e6a3dd929 100644
  dist/base/t/lib/Broken.pm	Test module for base.pm
  dist/base/t/lib/Dummy.pm	Test module for base.pm
 diff --git a/dist/base/lib/base.pm b/dist/base/lib/base.pm
-index 6fee6008f..044d138c3 100644
+index 6fee6008fc..044d138c36 100644
 --- a/dist/base/lib/base.pm
 +++ b/dist/base/lib/base.pm
 @@ -6,6 +6,11 @@ use vars qw($VERSION);
@@ -166,7 +166,7 @@ index 6fee6008f..044d138c3 100644
                  #
 diff --git a/dist/base/t/incdot.t b/dist/base/t/incdot.t
 new file mode 100644
-index 000000000..412b2feef
+index 0000000000..412b2feefb
 --- /dev/null
 +++ b/dist/base/t/incdot.t
 @@ -0,0 +1,55 @@
@@ -227,7 +227,7 @@ index 000000000..412b2feef
 +}
 diff --git a/dist/base/t/lib/BaseIncMandatory.pm b/dist/base/t/lib/BaseIncMandatory.pm
 new file mode 100644
-index 000000000..9e0718c60
+index 0000000000..9e0718c60e
 --- /dev/null
 +++ b/dist/base/t/lib/BaseIncMandatory.pm
 @@ -0,0 +1,9 @@
@@ -242,7 +242,7 @@ index 000000000..9e0718c60
 +1;
 diff --git a/dist/base/t/lib/BaseIncOptional.pm b/dist/base/t/lib/BaseIncOptional.pm
 new file mode 100644
-index 000000000..e5bf0174e
+index 0000000000..e5bf0174ef
 --- /dev/null
 +++ b/dist/base/t/lib/BaseIncOptional.pm
 @@ -0,0 +1,13 @@
diff --git a/debian/patches/debian/CVE-2016-1238/cpan-without-dot.diff b/debian/patches/debian/CVE-2016-1238/cpan-without-dot.diff
index d558de8c55..7bc1581912 100644
--- a/debian/patches/debian/CVE-2016-1238/cpan-without-dot.diff
+++ b/debian/patches/debian/CVE-2016-1238/cpan-without-dot.diff
@@ -13,7 +13,7 @@ Patch-Name: debian/CVE-2016-1238/cpan-without-dot.diff
  1 file changed, 5 insertions(+)
 
 diff --git a/cpan/CPAN/scripts/cpan b/cpan/CPAN/scripts/cpan
-index ccba47e22..e1c1f02d0 100644
+index ccba47e227..e1c1f02d0e 100644
 --- a/cpan/CPAN/scripts/cpan
 +++ b/cpan/CPAN/scripts/cpan
 @@ -4,6 +4,11 @@ BEGIN { pop @INC if $INC[-1] eq '.' }
diff --git a/debian/patches/debian/CVE-2016-1238/eumm-without-dot.diff b/debian/patches/debian/CVE-2016-1238/eumm-without-dot.diff
index c7655b15f0..13ebe931cd 100644
--- a/debian/patches/debian/CVE-2016-1238/eumm-without-dot.diff
+++ b/debian/patches/debian/CVE-2016-1238/eumm-without-dot.diff
@@ -18,7 +18,7 @@ Patch-Name: debian/CVE-2016-1238/eumm-without-dot.diff
  2 files changed, 7 insertions(+), 2 deletions(-)
 
 diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm
-index 80f95ab99..cf4d3e9e3 100644
+index 80f95ab997..cf4d3e9e33 100644
 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm
 +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm
 @@ -3535,7 +3535,7 @@ PERL_DL_NONLAZY set for tests.
@@ -40,7 +40,7 @@ index 80f95ab99..cf4d3e9e3 100644
  
  
 diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker.pm
-index 5a9fce22b..199bf15c9 100644
+index 5a9fce22b1..199bf15c94 100644
 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker.pm
 +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker.pm
 @@ -5,6 +5,11 @@ use strict;
diff --git a/debian/patches/debian/CVE-2016-1238/remove-inc-test.diff b/debian/patches/debian/CVE-2016-1238/remove-inc-test.diff
index 239393c942..7a05961676 100644
--- a/debian/patches/debian/CVE-2016-1238/remove-inc-test.diff
+++ b/debian/patches/debian/CVE-2016-1238/remove-inc-test.diff
@@ -13,7 +13,7 @@ Patch-Name: debian/CVE-2016-1238/remove-inc-test.diff
  1 file changed, 1 insertion(+), 3 deletions(-)
 
 diff --git a/t/run/runenv.t b/t/run/runenv.t
-index 82846a4d2..53a6bf643 100644
+index 82846a4d28..53a6bf643e 100644
 --- a/t/run/runenv.t
 +++ b/t/run/runenv.t
 @@ -12,7 +12,7 @@ BEGIN {
diff --git a/debian/patches/debian/CVE-2016-1238/sitecustomize-in-etc.diff b/debian/patches/debian/CVE-2016-1238/sitecustomize-in-etc.diff
index 4fc72b5891..5c0bdfc066 100644
--- a/debian/patches/debian/CVE-2016-1238/sitecustomize-in-etc.diff
+++ b/debian/patches/debian/CVE-2016-1238/sitecustomize-in-etc.diff
@@ -17,7 +17,7 @@ Patch-Name: debian/CVE-2016-1238/sitecustomize-in-etc.diff
  2 files changed, 10 insertions(+)
 
 diff --git a/perl.c b/perl.c
-index 1e543e716..8ba560afe 100644
+index 1e543e7163..8ba560afe6 100644
 --- a/perl.c
 +++ b/perl.c
 @@ -2144,7 +2144,12 @@ S_parse_body(pTHX_ char **env, XSINIT_t xsinit)
@@ -34,7 +34,7 @@ index 1e543e716..8ba560afe 100644
  	    /* process .../.. if PERL_RELOCATABLE_INC is defined */
  	    SV *sitelib_sv = mayberelocate(raw_sitelib, strlen(raw_sitelib),
 diff --git a/pod/perlrun.pod b/pod/perlrun.pod
-index 349e91e3d..db50b233f 100644
+index 349e91e3d6..db50b233fc 100644
 --- a/pod/perlrun.pod
 +++ b/pod/perlrun.pod
 @@ -494,6 +494,11 @@ blocks will be likewise executed very late.
diff --git a/debian/patches/debian/CVE-2016-1238/test-suite-without-dot.diff b/debian/patches/debian/CVE-2016-1238/test-suite-without-dot.diff
index f476748643..25a48ba282 100644
--- a/debian/patches/debian/CVE-2016-1238/test-suite-without-dot.diff
+++ b/debian/patches/debian/CVE-2016-1238/test-suite-without-dot.diff
@@ -29,7 +29,7 @@ Patch-Name: debian/CVE-2016-1238/test-suite-without-dot.diff
  17 files changed, 24 insertions(+), 17 deletions(-)
 
 diff --git a/Makefile.SH b/Makefile.SH
-index 5f195299b..f56827f22 100755
+index 5f195299bf..f56827f220 100755
 --- a/Makefile.SH
 +++ b/Makefile.SH
 @@ -342,7 +342,7 @@ RUN_PERL = \$(LDLIBPTH) \$(RUN) $perl\$(EXE_EXT)
@@ -42,7 +42,7 @@ index 5f195299b..f56827f22 100755
  	;;
  esac
 diff --git a/Porting/pod_rules.pl b/Porting/pod_rules.pl
-index 0d837bf23..f4c094db3 100644
+index 0d837bf232..f4c094db3c 100644
 --- a/Porting/pod_rules.pl
 +++ b/Porting/pod_rules.pl
 @@ -32,7 +32,7 @@ if (ord("A") == 193) {
@@ -55,7 +55,7 @@ index 0d837bf23..f4c094db3 100644
  
  # process command-line switches
 diff --git a/TestInit.pm b/TestInit.pm
-index f4ed6fd93..f9a5e916c 100644
+index f4ed6fd93d..f9a5e916cc 100644
 --- a/TestInit.pm
 +++ b/TestInit.pm
 @@ -47,7 +47,7 @@ sub import {
@@ -68,7 +68,7 @@ index f4ed6fd93..f9a5e916c 100644
  	} else {
  	    die "Unknown option '$_'";
 diff --git a/lib/strict.t b/lib/strict.t
-index d6c6ed0e4..bfee7620c 100644
+index d6c6ed0e41..bfee7620c2 100644
 --- a/lib/strict.t
 +++ b/lib/strict.t
 @@ -1,7 +1,7 @@
@@ -81,7 +81,7 @@ index d6c6ed0e4..bfee7620c 100644
  our $local_tests = 6;
  require "../t/lib/common.pl";
 diff --git a/lib/warnings.t b/lib/warnings.t
-index ee696fe2a..7c24f3af2 100644
+index ee696fe2a1..7c24f3af2a 100644
 --- a/lib/warnings.t
 +++ b/lib/warnings.t
 @@ -1,7 +1,7 @@
@@ -94,7 +94,7 @@ index ee696fe2a..7c24f3af2 100644
  our $UTF8 = (${^OPEN} || "") =~ /:utf8/;
  require "../t/lib/common.pl";
 diff --git a/makedef.pl b/makedef.pl
-index 104696c8f..c0a220a6f 100644
+index 104696c8f3..c0a220a6f2 100644
 --- a/makedef.pl
 +++ b/makedef.pl
 @@ -70,7 +70,7 @@ BEGIN {
@@ -107,7 +107,7 @@ index 104696c8f..c0a220a6f 100644
  # Is the following guard strictly necessary? Added during refactoring
  # to keep the same behaviour when merging other code into here.
 diff --git a/regen.pl b/regen.pl
-index 878866835..71a6eda60 100644
+index 878866835e..71a6eda60a 100644
 --- a/regen.pl
 +++ b/regen.pl
 @@ -15,7 +15,7 @@ use strict;
@@ -120,7 +120,7 @@ index 878866835..71a6eda60 100644
    system @command
      and die "@command failed: $?" 
 diff --git a/regen/ebcdic.pl b/regen/ebcdic.pl
-index fa8a051df..718a7c868 100644
+index fa8a051dfc..718a7c8681 100644
 --- a/regen/ebcdic.pl
 +++ b/regen/ebcdic.pl
 @@ -1,6 +1,9 @@
@@ -134,7 +134,7 @@ index fa8a051df..718a7c868 100644
  require 'regen/charset_translations.pl';
  
 diff --git a/regen/genpacksizetables.pl b/regen/genpacksizetables.pl
-index 7a03dcd15..d88682231 100644
+index 7a03dcd150..d886822319 100644
 --- a/regen/genpacksizetables.pl
 +++ b/regen/genpacksizetables.pl
 @@ -3,7 +3,7 @@
@@ -147,7 +147,7 @@ index 7a03dcd15..d88682231 100644
  sub make_text {
      my ($chrmap, $letter, $unpredictable, $nocsum, $size, $condition) = @_;
 diff --git a/regen/mg_vtable.pl b/regen/mg_vtable.pl
-index a05a7d414..342f5e04c 100644
+index a05a7d4146..342f5e04c4 100644
 --- a/regen/mg_vtable.pl
 +++ b/regen/mg_vtable.pl
 @@ -20,7 +20,7 @@ require 5.004;
@@ -160,7 +160,7 @@ index a05a7d414..342f5e04c 100644
  
  my %mg =
 diff --git a/t/comp/line_debug.t b/t/comp/line_debug.t
-index 8361194bb..71626bbf3 100644
+index 8361194bbf..71626bbf35 100644
 --- a/t/comp/line_debug.t
 +++ b/t/comp/line_debug.t
 @@ -1,5 +1,7 @@
@@ -172,7 +172,7 @@ index 8361194bb..71626bbf3 100644
  
  sub ok {
 diff --git a/t/lib/warnings/op b/t/lib/warnings/op
-index 528639e5a..df9dadb48 100644
+index 528639e5a9..df9dadb48e 100644
 --- a/t/lib/warnings/op
 +++ b/t/lib/warnings/op
 @@ -1435,6 +1435,7 @@ END { print "in end\n"; }
@@ -184,7 +184,7 @@ index 528639e5a..df9dadb48 100644
  do "abc.pm";
  EXPECT
 diff --git a/t/op/goto.t b/t/op/goto.t
-index aa2f24fa7..a65ede2a2 100644
+index aa2f24fa7c..a65ede2a28 100644
 --- a/t/op/goto.t
 +++ b/t/op/goto.t
 @@ -280,7 +280,7 @@ YYY: print "OK\n";
@@ -197,7 +197,7 @@ index aa2f24fa7..a65ede2a2 100644
  unlink_all "Op_goto01.pm";
  
 diff --git a/t/porting/regen.t b/t/porting/regen.t
-index 5d085181c..d2342605f 100644
+index 5d085181ce..d2342605f6 100644
 --- a/t/porting/regen.t
 +++ b/t/porting/regen.t
 @@ -86,7 +86,7 @@ OUTER: foreach my $file (@files) {
@@ -210,7 +210,7 @@ index 5d085181c..d2342605f 100644
          and die "Failed to run $command: $?";
  }
 diff --git a/t/re/pat.t b/t/re/pat.t
-index 295a9f713..8652bf65e 100644
+index 295a9f7138..8652bf65e0 100644
 --- a/t/re/pat.t
 +++ b/t/re/pat.t
 @@ -1663,7 +1663,7 @@ EOP
@@ -232,7 +232,7 @@ index 295a9f713..8652bf65e 100644
                  # \x80 and \x41 are continuation bytes in their respective
                  # character sets
 diff --git a/t/run/switches.t b/t/run/switches.t
-index aa9bda385..2272c94a4 100644
+index aa9bda3859..2272c94a47 100644
 --- a/t/run/switches.t
 +++ b/t/run/switches.t
 @@ -194,17 +194,17 @@ sub import { print map "<\$_>", \@_ }
@@ -257,7 +257,7 @@ index aa9bda385..2272c94a4 100644
      );
  
 diff --git a/t/test.pl b/t/test.pl
-index acff745e9..4195c9a81 100644
+index acff745e93..4195c9a81c 100644
 --- a/t/test.pl
 +++ b/t/test.pl
 @@ -646,7 +646,7 @@ sub _create_runperl { # Create the string to qx in runperl().
diff --git a/debian/patches/debian/cpan-missing-site-dirs.diff b/debian/patches/debian/cpan-missing-site-dirs.diff
index 6ba2430f15..1d1400439f 100644
--- a/debian/patches/debian/cpan-missing-site-dirs.diff
+++ b/debian/patches/debian/cpan-missing-site-dirs.diff
@@ -18,7 +18,7 @@ Patch-Name: debian/cpan-missing-site-dirs.diff
  1 file changed, 27 insertions(+), 4 deletions(-)
 
 diff --git a/cpan/CPAN/lib/CPAN/FirstTime.pm b/cpan/CPAN/lib/CPAN/FirstTime.pm
-index 33054cd28..7b0becfc3 100644
+index 33054cd284..7b0becfc3d 100644
 --- a/cpan/CPAN/lib/CPAN/FirstTime.pm
 +++ b/cpan/CPAN/lib/CPAN/FirstTime.pm
 @@ -2057,11 +2057,34 @@ sub _print_urllist {
diff --git a/debian/patches/debian/cpan_definstalldirs.diff b/debian/patches/debian/cpan_definstalldirs.diff
index af48217572..2e70193065 100644
--- a/debian/patches/debian/cpan_definstalldirs.diff
+++ b/debian/patches/debian/cpan_definstalldirs.diff
@@ -14,7 +14,7 @@ Patch-Name: debian/cpan_definstalldirs.diff
  1 file changed, 2 insertions(+), 2 deletions(-)
 
 diff --git a/cpan/CPAN/lib/CPAN/FirstTime.pm b/cpan/CPAN/lib/CPAN/FirstTime.pm
-index 918e009a2..33054cd28 100644
+index 918e009a2b..33054cd284 100644
 --- a/cpan/CPAN/lib/CPAN/FirstTime.pm
 +++ b/cpan/CPAN/lib/CPAN/FirstTime.pm
 @@ -1024,7 +1024,7 @@ sub init {
diff --git a/debian/patches/debian/customized.diff b/debian/patches/debian/customized.diff
index 82ca50a8da..dd73042f45 100644
--- a/debian/patches/debian/customized.diff
+++ b/debian/patches/debian/customized.diff
@@ -9,7 +9,7 @@ Patch-Name: debian/customized.diff
  1 file changed, 16 insertions(+), 14 deletions(-)
 
 diff --git a/t/porting/customized.dat b/t/porting/customized.dat
-index defeae112..5d0a25529 100644
+index defeae1127..5d0a255298 100644
 --- a/t/porting/customized.dat
 +++ b/t/porting/customized.dat
 @@ -5,12 +5,12 @@ Archive::Tar cpan/Archive-Tar/lib/Archive/Tar.pm b7e13134a5bcabe8c33fb0729d2f2f8
diff --git a/debian/patches/debian/db_file_ver.diff b/debian/patches/debian/db_file_ver.diff
index 1abe154aaa..2b4ceca3b9 100644
--- a/debian/patches/debian/db_file_ver.diff
+++ b/debian/patches/debian/db_file_ver.diff
@@ -13,7 +13,7 @@ Patch-Name: debian/db_file_ver.diff
  1 file changed, 2 insertions(+)
 
 diff --git a/cpan/DB_File/version.c b/cpan/DB_File/version.c
-index e01f6f6fa..544e6ee8f 100644
+index e01f6f6fa3..544e6ee8fb 100644
 --- a/cpan/DB_File/version.c
 +++ b/cpan/DB_File/version.c
 @@ -48,6 +48,7 @@ __getBerkeleyDBInfo()
diff --git a/debian/patches/debian/deprecate-with-apt.diff b/debian/patches/debian/deprecate-with-apt.diff
index 77d52c14ed..c5eb5a5a32 100644
--- a/debian/patches/debian/deprecate-with-apt.diff
+++ b/debian/patches/debian/deprecate-with-apt.diff
@@ -20,7 +20,7 @@ Patch-Name: debian/deprecate-with-apt.diff
  1 file changed, 14 insertions(+), 1 deletion(-)
 
 diff --git a/lib/deprecate.pm b/lib/deprecate.pm
-index 47bc11253..b0c61dfb0 100644
+index 47bc11253e..b0c61dfb05 100644
 --- a/lib/deprecate.pm
 +++ b/lib/deprecate.pm
 @@ -7,6 +7,13 @@ our $VERSION = 0.03;
diff --git a/debian/patches/debian/devel-ppport-reproducibility.diff b/debian/patches/debian/devel-ppport-reproducibility.diff
index da4249267e..be73be4f1e 100644
--- a/debian/patches/debian/devel-ppport-reproducibility.diff
+++ b/debian/patches/debian/devel-ppport-reproducibility.diff
@@ -15,7 +15,7 @@ Patch-Name: debian/devel-ppport-reproducibility.diff
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/cpan/Devel-PPPort/PPPort_xs.PL b/cpan/Devel-PPPort/PPPort_xs.PL
-index 5f18940ef..149f2fe07 100644
+index 5f18940ef1..149f2fe07e 100644
 --- a/cpan/Devel-PPPort/PPPort_xs.PL
 +++ b/cpan/Devel-PPPort/PPPort_xs.PL
 @@ -38,7 +38,7 @@ END
diff --git a/debian/patches/debian/doc_info.diff b/debian/patches/debian/doc_info.diff
index c2d5cdeefd..7d07e4de47 100644
--- a/debian/patches/debian/doc_info.diff
+++ b/debian/patches/debian/doc_info.diff
@@ -11,7 +11,7 @@ Patch-Name: debian/doc_info.diff
  1 file changed, 10 insertions(+), 2 deletions(-)
 
 diff --git a/pod/perl.pod b/pod/perl.pod
-index 671044e7d..e8e1197d9 100644
+index 671044e7d1..e8e1197d96 100644
 --- a/pod/perl.pod
 +++ b/pod/perl.pod
 @@ -284,8 +284,16 @@ aux c2ph h2ph h2xs perlbug pl2pm pod2html pod2man splain xsubpp
diff --git a/debian/patches/debian/document_inc_removal.diff b/debian/patches/debian/document_inc_removal.diff
index ffda352b9e..2278084b62 100644
--- a/debian/patches/debian/document_inc_removal.diff
+++ b/debian/patches/debian/document_inc_removal.diff
@@ -9,7 +9,7 @@ Patch-Name: debian/document_inc_removal.diff
  1 file changed, 5 insertions(+), 3 deletions(-)
 
 diff --git a/pod/perlvar.pod b/pod/perlvar.pod
-index 1821b95d1..c3e8e4f89 100644
+index 1821b95d1c..c3e8e4f893 100644
 --- a/pod/perlvar.pod
 +++ b/pod/perlvar.pod
 @@ -503,9 +503,11 @@ initially consists of the arguments to any B<-I> command-line
diff --git a/debian/patches/debian/enc2xs_inc.diff b/debian/patches/debian/enc2xs_inc.diff
index f9b53a5569..d8fcf3ab68 100644
--- a/debian/patches/debian/enc2xs_inc.diff
+++ b/debian/patches/debian/enc2xs_inc.diff
@@ -17,7 +17,7 @@ Patch-Name: debian/enc2xs_inc.diff
  2 files changed, 7 insertions(+), 4 deletions(-)
 
 diff --git a/cpan/Encode/bin/enc2xs b/cpan/Encode/bin/enc2xs
-index f8d9f52f2..5f6bb43fe 100644
+index f8d9f52f2a..5f6bb43fea 100644
 --- a/cpan/Encode/bin/enc2xs
 +++ b/cpan/Encode/bin/enc2xs
 @@ -985,11 +985,11 @@ use vars qw(
@@ -53,7 +53,7 @@ index f8d9f52f2..5f6bb43fe 100644
      for my $enc ( sort keys %LocalMod ) {
          $_ModLines .=
 diff --git a/t/porting/customized.t b/t/porting/customized.t
-index 45fcafb10..3bd6adb33 100644
+index 45fcafb100..3bd6adb33a 100644
 --- a/t/porting/customized.t
 +++ b/t/porting/customized.t
 @@ -101,8 +101,11 @@ foreach my $module ( sort keys %Modules ) {
diff --git a/debian/patches/debian/encode-unicode-bom-doc.diff b/debian/patches/debian/encode-unicode-bom-doc.diff
index 99993c1967..6676b8b6ed 100644
--- a/debian/patches/debian/encode-unicode-bom-doc.diff
+++ b/debian/patches/debian/encode-unicode-bom-doc.diff
@@ -10,7 +10,7 @@ Patch-Name: debian/encode-unicode-bom-doc.diff
  1 file changed, 3 insertions(+), 1 deletion(-)
 
 diff --git a/cpan/Encode/Unicode/Unicode.pm b/cpan/Encode/Unicode/Unicode.pm
-index 7dec3e381..708a03440 100644
+index 7dec3e3815..708a03440d 100644
 --- a/cpan/Encode/Unicode/Unicode.pm
 +++ b/cpan/Encode/Unicode/Unicode.pm
 @@ -184,7 +184,9 @@ Default Byte Order
diff --git a/debian/patches/debian/errno_ver.diff b/debian/patches/debian/errno_ver.diff
index bad1a5b6ff..a78934a81d 100644
--- a/debian/patches/debian/errno_ver.diff
+++ b/debian/patches/debian/errno_ver.diff
@@ -16,7 +16,7 @@ Patch-Name: debian/errno_ver.diff
  1 file changed, 16 deletions(-)
 
 diff --git a/ext/Errno/Errno_pm.PL b/ext/Errno/Errno_pm.PL
-index 6251a3cf3..472dfba08 100644
+index 6251a3cf33..472dfba08d 100644
 --- a/ext/Errno/Errno_pm.PL
 +++ b/ext/Errno/Errno_pm.PL
 @@ -287,22 +287,6 @@ package Errno;
diff --git a/debian/patches/debian/extutils_set_libperl_path.diff b/debian/patches/debian/extutils_set_libperl_path.diff
index a34b368729..a8a990200a 100644
--- a/debian/patches/debian/extutils_set_libperl_path.diff
+++ b/debian/patches/debian/extutils_set_libperl_path.diff
@@ -12,7 +12,7 @@ Patch-Name: debian/extutils_set_libperl_path.diff
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm
-index 9af9458d7..01e42d2d6 100644
+index 9af9458d75..01e42d2d67 100644
 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm
 +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm
 @@ -2506,7 +2506,7 @@ MAP_PRELIBS   = $Config{perllibs} $Config{cryptlib}
diff --git a/debian/patches/debian/fakeroot.diff b/debian/patches/debian/fakeroot.diff
index 33e36ca06f..cf053bf462 100644
--- a/debian/patches/debian/fakeroot.diff
+++ b/debian/patches/debian/fakeroot.diff
@@ -16,7 +16,7 @@ Patch-Name: debian/fakeroot.diff
  1 file changed, 2 insertions(+), 5 deletions(-)
 
 diff --git a/Makefile.SH b/Makefile.SH
-index 8e943c4d8..5f195299b 100755
+index 8e943c4d8e..5f195299bf 100755
 --- a/Makefile.SH
 +++ b/Makefile.SH
 @@ -48,10 +48,7 @@ case "$useshrplib" in
diff --git a/debian/patches/debian/find_html2text.diff b/debian/patches/debian/find_html2text.diff
index 7a5c050af4..1951deb598 100644
--- a/debian/patches/debian/find_html2text.diff
+++ b/debian/patches/debian/find_html2text.diff
@@ -21,7 +21,7 @@ functionality].
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/cpan/CPAN/lib/CPAN/Distribution.pm b/cpan/CPAN/lib/CPAN/Distribution.pm
-index 092b781ac..5c2bae1c8 100644
+index 092b781ac2..5c2bae1c8f 100644
 --- a/cpan/CPAN/lib/CPAN/Distribution.pm
 +++ b/cpan/CPAN/lib/CPAN/Distribution.pm
 @@ -4099,7 +4099,7 @@ sub _display_url {
diff --git a/debian/patches/debian/hppa_op_optimize_workaround.diff b/debian/patches/debian/hppa_op_optimize_workaround.diff
index 23c5dc554e..3fe7b2fd81 100644
--- a/debian/patches/debian/hppa_op_optimize_workaround.diff
+++ b/debian/patches/debian/hppa_op_optimize_workaround.diff
@@ -16,7 +16,7 @@ Patch-Name: debian/hppa_op_optimize_workaround.diff
  1 file changed, 6 insertions(+)
 
 diff --git a/cflags.SH b/cflags.SH
-index a50044eb9..ba4ac8932 100755
+index a50044eb9a..ba4ac8932b 100755
 --- a/cflags.SH
 +++ b/cflags.SH
 @@ -495,6 +495,12 @@ for file do
diff --git a/debian/patches/debian/hurd-softupdates.diff b/debian/patches/debian/hurd-softupdates.diff
index 1a6790b02e..cc21720ef4 100644
--- a/debian/patches/debian/hurd-softupdates.diff
+++ b/debian/patches/debian/hurd-softupdates.diff
@@ -13,7 +13,7 @@ Patch-Name: debian/hurd-softupdates.diff
  1 file changed, 1 insertion(+)
 
 diff --git a/t/op/stat.t b/t/op/stat.t
-index 0a7f971af..1dc3ff2c0 100644
+index 0a7f971af5..1dc3ff2c0b 100644
 --- a/t/op/stat.t
 +++ b/t/op/stat.t
 @@ -97,6 +97,7 @@ print FOO "Now is the time for all good men to come to.\n";
diff --git a/debian/patches/debian/installman-utf8.diff b/debian/patches/debian/installman-utf8.diff
index 1b82d8b6d4..39ecc05043 100644
--- a/debian/patches/debian/installman-utf8.diff
+++ b/debian/patches/debian/installman-utf8.diff
@@ -15,7 +15,7 @@ Patch-Name: debian/installman-utf8.diff
  1 file changed, 1 insertion(+)
 
 diff --git a/installman b/installman
-index 60fbce3bd..fa7ac928a 100755
+index 60fbce3bde..fa7ac928aa 100755
 --- a/installman
 +++ b/installman
 @@ -153,6 +153,7 @@ sub pod2man {
diff --git a/debian/patches/debian/instmodsh_doc.diff b/debian/patches/debian/instmodsh_doc.diff
index cd261d66f1..38ce03b16c 100644
--- a/debian/patches/debian/instmodsh_doc.diff
+++ b/debian/patches/debian/instmodsh_doc.diff
@@ -9,7 +9,7 @@ Patch-Name: debian/instmodsh_doc.diff
  1 file changed, 3 insertions(+), 1 deletion(-)
 
 diff --git a/cpan/ExtUtils-MakeMaker/bin/instmodsh b/cpan/ExtUtils-MakeMaker/bin/instmodsh
-index ab0f9d1ff..b3b109f47 100644
+index ab0f9d1ffe..b3b109f475 100644
 --- a/cpan/ExtUtils-MakeMaker/bin/instmodsh
 +++ b/cpan/ExtUtils-MakeMaker/bin/instmodsh
 @@ -19,9 +19,11 @@ instmodsh - A shell to examine installed modules
diff --git a/debian/patches/debian/kfreebsd-softupdates.diff b/debian/patches/debian/kfreebsd-softupdates.diff
index 275445b296..37521f133e 100644
--- a/debian/patches/debian/kfreebsd-softupdates.diff
+++ b/debian/patches/debian/kfreebsd-softupdates.diff
@@ -16,7 +16,7 @@ Patch-Name: debian/kfreebsd-softupdates.diff
  1 file changed, 1 insertion(+)
 
 diff --git a/t/op/stat.t b/t/op/stat.t
-index 637a9025f..0a7f971af 100644
+index 637a9025f1..0a7f971af5 100644
 --- a/t/op/stat.t
 +++ b/t/op/stat.t
 @@ -96,6 +96,7 @@ sleep 3 if $funky_FAT_timestamps;
diff --git a/debian/patches/debian/ld_run_path.diff b/debian/patches/debian/ld_run_path.diff
index f56972f38f..7a2db41a10 100644
--- a/debian/patches/debian/ld_run_path.diff
+++ b/debian/patches/debian/ld_run_path.diff
@@ -9,7 +9,7 @@ Patch-Name: debian/ld_run_path.diff
  1 file changed, 3 insertions(+)
 
 diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist/Kid.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist/Kid.pm
-index 93183a379..63eecc127 100644
+index 93183a3792..63eecc127c 100644
 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist/Kid.pm
 +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist/Kid.pm
 @@ -56,6 +56,9 @@ sub _unix_os2_ext {
diff --git a/debian/patches/debian/libnet_config_path.diff b/debian/patches/debian/libnet_config_path.diff
index 607218f09c..2d5bf98120 100644
--- a/debian/patches/debian/libnet_config_path.diff
+++ b/debian/patches/debian/libnet_config_path.diff
@@ -10,7 +10,7 @@ Patch-Name: debian/libnet_config_path.diff
  1 file changed, 3 insertions(+), 4 deletions(-)
 
 diff --git a/cpan/libnet/lib/Net/Config.pm b/cpan/libnet/lib/Net/Config.pm
-index 3e4ab0a03..295a33397 100644
+index 3e4ab0a03b..295a33397d 100644
 --- a/cpan/libnet/lib/Net/Config.pm
 +++ b/cpan/libnet/lib/Net/Config.pm
 @@ -74,9 +74,8 @@ my %nc = (
diff --git a/debian/patches/debian/libperl_embed_doc.diff b/debian/patches/debian/libperl_embed_doc.diff
index c2761480f4..5dcb329f66 100644
--- a/debian/patches/debian/libperl_embed_doc.diff
+++ b/debian/patches/debian/libperl_embed_doc.diff
@@ -11,7 +11,7 @@ Patch-Name: debian/libperl_embed_doc.diff
  1 file changed, 3 insertions(+)
 
 diff --git a/lib/ExtUtils/Embed.pm b/lib/ExtUtils/Embed.pm
-index 9305b5dc1..c5e42e123 100644
+index 9305b5dc13..c5e42e123c 100644
 --- a/lib/ExtUtils/Embed.pm
 +++ b/lib/ExtUtils/Embed.pm
 @@ -296,6 +296,9 @@ and extensions in your C/C++ applications.
diff --git a/debian/patches/debian/makemaker-manext.diff b/debian/patches/debian/makemaker-manext.diff
index 3420b2d0be..1a12fa1577 100644
--- a/debian/patches/debian/makemaker-manext.diff
+++ b/debian/patches/debian/makemaker-manext.diff
@@ -15,7 +15,7 @@ Bug-Debian: https://bugs.debian.org/247370
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Any.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Any.pm
-index 7679dc415..b13c74857 100644
+index 7679dc415a..b13c74857c 100644
 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Any.pm
 +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Any.pm
 @@ -928,7 +928,7 @@ END
diff --git a/debian/patches/debian/makemaker-pasthru.diff b/debian/patches/debian/makemaker-pasthru.diff
index 67a775218a..3062186275 100644
--- a/debian/patches/debian/makemaker-pasthru.diff
+++ b/debian/patches/debian/makemaker-pasthru.diff
@@ -16,7 +16,7 @@ Patch-Name: debian/makemaker-pasthru.diff
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm
-index ff7bf2a2f..80f95ab99 100644
+index ff7bf2a2fa..80f95ab997 100644
 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm
 +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm
 @@ -2794,7 +2794,7 @@ sub pasthru {
diff --git a/debian/patches/debian/mod_paths.diff b/debian/patches/debian/mod_paths.diff
index 80aa0a8731..6c8d5d5884 100644
--- a/debian/patches/debian/mod_paths.diff
+++ b/debian/patches/debian/mod_paths.diff
@@ -22,7 +22,7 @@ Patch-Name: debian/mod_paths.diff
  1 file changed, 58 insertions(+)
 
 diff --git a/perl.c b/perl.c
-index 6197ea08d..1e543e716 100644
+index 6197ea08d5..1e543e7163 100644
 --- a/perl.c
 +++ b/perl.c
 @@ -4483,6 +4483,11 @@ S_init_perllib(pTHX)
diff --git a/debian/patches/debian/no_packlist_perllocal.diff b/debian/patches/debian/no_packlist_perllocal.diff
index a7e8e1cfde..deaf0c77e6 100644
--- a/debian/patches/debian/no_packlist_perllocal.diff
+++ b/debian/patches/debian/no_packlist_perllocal.diff
@@ -5,25 +5,25 @@ Subject: Don't install .packlist or perllocal.pod for perl or vendor
 
 Patch-Name: debian/no_packlist_perllocal.diff
 ---
- cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm | 35 +++----------------------
+ .../lib/ExtUtils/MM_Unix.pm                   | 35 ++-----------------
  1 file changed, 3 insertions(+), 32 deletions(-)
 
 diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm
-index 01e42d2d6..ff7bf2a2f 100644
+index 01e42d2d67..ff7bf2a2fa 100644
 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm
 +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm
-@@ -2123,11 +2123,6 @@ pure_perl_install :: all
+@@ -2122,11 +2122,6 @@ pure_perl_install :: all
+ 	$(NOECHO) umask 022; $(MOD_INSTALL) \
  };
  
-     push @m,
+-    push @m,
 -q{		read "}.$self->catfile('$(PERL_ARCHLIB)','auto','$(FULLEXT)','.packlist').q{" \
 -		write "}.$self->catfile('$(DESTINSTALLARCHLIB)','auto','$(FULLEXT)','.packlist').q{" \
 -} unless $self->{NO_PACKLIST};
 -
--    push @m,
+     push @m,
  q{		"$(INST_LIB)" "$(DESTINSTALLPRIVLIB)" \
  		"$(INST_ARCHLIB)" "$(DESTINSTALLARCHLIB)" \
- 		"$(INST_BIN)" "$(DESTINSTALLBIN)" \
 @@ -2159,10 +2154,6 @@ q{		"$(INST_LIB)" "$(DESTINSTALLSITELIB)" \
  pure_vendor_install :: all
  	$(NOECHO) umask 022; $(MOD_INSTALL) \
diff --git a/debian/patches/debian/patchlevel.diff b/debian/patches/debian/patchlevel.diff
index 61f865cbc9..4888a13117 100644
--- a/debian/patches/debian/patchlevel.diff
+++ b/debian/patches/debian/patchlevel.diff
@@ -15,7 +15,7 @@ Patch-Name: debian/patchlevel.diff
  1 file changed, 3 insertions(+)
 
 diff --git a/patchlevel.h b/patchlevel.h
-index 0d8ab183f..8a5c0c995 100644
+index 0d8ab183f3..8a5c0c9953 100644
 --- a/patchlevel.h
 +++ b/patchlevel.h
 @@ -137,6 +137,9 @@ static const char * const local_patches[] = {
diff --git a/debian/patches/debian/perl5db-x-terminal-emulator.patch b/debian/patches/debian/perl5db-x-terminal-emulator.patch
index 043b5a0440..fb9f510d65 100644
--- a/debian/patches/debian/perl5db-x-terminal-emulator.patch
+++ b/debian/patches/debian/perl5db-x-terminal-emulator.patch
@@ -15,7 +15,7 @@ Patch-Name: debian/perl5db-x-terminal-emulator.patch
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/lib/perl5db.pl b/lib/perl5db.pl
-index 6dae6b0f5..5e79381a8 100644
+index 6dae6b0f5c..5e79381a8a 100644
 --- a/lib/perl5db.pl
 +++ b/lib/perl5db.pl
 @@ -6984,7 +6984,7 @@ properly set up.
diff --git a/debian/patches/debian/perlivp.diff b/debian/patches/debian/perlivp.diff
index b28d076fe2..24c80a0f0b 100644
--- a/debian/patches/debian/perlivp.diff
+++ b/debian/patches/debian/perlivp.diff
@@ -26,7 +26,7 @@ Patch-Name: debian/perlivp.diff
  1 file changed, 1 insertion(+)
 
 diff --git a/utils/perlivp.PL b/utils/perlivp.PL
-index e5229133f..696a44e0f 100644
+index e5229133f4..696a44e0fe 100644
 --- a/utils/perlivp.PL
 +++ b/utils/perlivp.PL
 @@ -155,6 +155,7 @@ my $INC_total = 0;
diff --git a/debian/patches/debian/prune_libs.diff b/debian/patches/debian/prune_libs.diff
index 7f88ea4f89..fee12887cb 100644
--- a/debian/patches/debian/prune_libs.diff
+++ b/debian/patches/debian/prune_libs.diff
@@ -14,7 +14,7 @@ Patch-Name: debian/prune_libs.diff
  1 file changed, 2 insertions(+), 3 deletions(-)
 
 diff --git a/Configure b/Configure
-index 5a353d6de..a00df640e 100755
+index 5a353d6de4..a00df640e4 100755
 --- a/Configure
 +++ b/Configure
 @@ -1479,8 +1479,7 @@ archname=''
diff --git a/debian/patches/debian/regen-skip.diff b/debian/patches/debian/regen-skip.diff
index dd46d6995f..4af5353d0a 100644
--- a/debian/patches/debian/regen-skip.diff
+++ b/debian/patches/debian/regen-skip.diff
@@ -13,7 +13,7 @@ Patch-Name: debian/regen-skip.diff
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/regen/lib_cleanup.pl b/regen/lib_cleanup.pl
-index c9d6e434b..fece1ed5e 100644
+index c9d6e434bd..fece1ed5e0 100644
 --- a/regen/lib_cleanup.pl
 +++ b/regen/lib_cleanup.pl
 @@ -159,7 +159,7 @@ foreach ('win32/Makefile', 'win32/makefile.mk') {
diff --git a/debian/patches/debian/skip-kfreebsd-crash.diff b/debian/patches/debian/skip-kfreebsd-crash.diff
index 8f74978075..ab29f16dd9 100644
--- a/debian/patches/debian/skip-kfreebsd-crash.diff
+++ b/debian/patches/debian/skip-kfreebsd-crash.diff
@@ -17,7 +17,7 @@ Patch-Name: debian/skip-kfreebsd-crash.diff
  1 file changed, 4 insertions(+)
 
 diff --git a/t/op/threads.t b/t/op/threads.t
-index 123ad27e3..e12bf584d 100644
+index 123ad27e3a..e12bf584d6 100644
 --- a/t/op/threads.t
 +++ b/t/op/threads.t
 @@ -376,6 +376,9 @@ EOF
diff --git a/debian/patches/debian/skip-upstream-git-tests.diff b/debian/patches/debian/skip-upstream-git-tests.diff
index a945117030..09bb5641ae 100644
--- a/debian/patches/debian/skip-upstream-git-tests.diff
+++ b/debian/patches/debian/skip-upstream-git-tests.diff
@@ -14,7 +14,7 @@ Patch-Name: debian/skip-upstream-git-tests.diff
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/t/test.pl b/t/test.pl
-index 84475ea3e..acff745e9 100644
+index 84475ea3ee..acff745e93 100644
 --- a/t/test.pl
 +++ b/t/test.pl
 @@ -174,7 +174,7 @@ sub skip_all_without_unicode_tables { # (but only under miniperl)
diff --git a/debian/patches/debian/squelch-locale-warnings.diff b/debian/patches/debian/squelch-locale-warnings.diff
index eb034593ce..f9f26ae22c 100644
--- a/debian/patches/debian/squelch-locale-warnings.diff
+++ b/debian/patches/debian/squelch-locale-warnings.diff
@@ -20,7 +20,7 @@ Patch-Name: debian/squelch-locale-warnings.diff
  2 files changed, 12 insertions(+), 1 deletion(-)
 
 diff --git a/locale.c b/locale.c
-index bf8713a66..d43ad160b 100644
+index bf8713a665..d43ad160be 100644
 --- a/locale.c
 +++ b/locale.c
 @@ -760,7 +760,10 @@ Perl_init_i18nl10n(pTHX_ int printwarn)
@@ -36,7 +36,7 @@ index bf8713a66..d43ad160b 100644
                                      /* disallow with "" or "0" */
                                      *bad_lang_use_once
 diff --git a/pod/perllocale.pod b/pod/perllocale.pod
-index 018f91623..59b4efc2d 100644
+index 018f916231..59b4efc2d3 100644
 --- a/pod/perllocale.pod
 +++ b/pod/perllocale.pod
 @@ -1209,6 +1209,14 @@ B<NOTE>: C<PERL_BADLANG> only gives you a way to hide the warning message.
diff --git a/debian/patches/debian/writable_site_dirs.diff b/debian/patches/debian/writable_site_dirs.diff
index 1cb6359859..d9fef6070c 100644
--- a/debian/patches/debian/writable_site_dirs.diff
+++ b/debian/patches/debian/writable_site_dirs.diff
@@ -11,7 +11,7 @@ Patch-Name: debian/writable_site_dirs.diff
  1 file changed, 3 insertions(+), 3 deletions(-)
 
 diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm
-index 1f4542e9d..9af9458d7 100644
+index 1f4542e9da..9af9458d75 100644
 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm
 +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm
 @@ -2139,7 +2139,7 @@ q{		"$(INST_LIB)" "$(DESTINSTALLPRIVLIB)" \
diff --git a/debian/patches/fixes/CVE-2017-12837.diff b/debian/patches/fixes/CVE-2017-12837.diff
index 6aee7729c7..71cee531b1 100644
--- a/debian/patches/fixes/CVE-2017-12837.diff
+++ b/debian/patches/fixes/CVE-2017-12837.diff
@@ -14,7 +14,7 @@ Patch-Name: fixes/CVE-2017-12837.diff
  1 file changed, 1 insertion(+)
 
 diff --git a/regcomp.c b/regcomp.c
-index be6cb96a7..77f4d3f46 100644
+index be6cb96a70..77f4d3f469 100644
 --- a/regcomp.c
 +++ b/regcomp.c
 @@ -13018,6 +13018,7 @@ S_regatom(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth)
diff --git a/debian/patches/fixes/CVE-2017-12883.diff b/debian/patches/fixes/CVE-2017-12883.diff
index 81d99fadbe..c826bb6a0a 100644
--- a/debian/patches/fixes/CVE-2017-12883.diff
+++ b/debian/patches/fixes/CVE-2017-12883.diff
@@ -20,7 +20,7 @@ Patch-Name: fixes/CVE-2017-12883.diff
  1 file changed, 4 insertions(+), 2 deletions(-)
 
 diff --git a/regcomp.c b/regcomp.c
-index 77f4d3f46..29b1ffe7c 100644
+index 77f4d3f469..29b1ffe7c5 100644
 --- a/regcomp.c
 +++ b/regcomp.c
 @@ -11918,14 +11918,16 @@ S_grok_bslash_N(pTHX_ RExC_state_t *pRExC_state,
diff --git a/debian/patches/fixes/CVE-2018-12015-Archive-Tar-directory-traversal.diff b/debian/patches/fixes/CVE-2018-12015-Archive-Tar-directory-traversal.diff
index e508cefc4e..f34cb8d359 100644
--- a/debian/patches/fixes/CVE-2018-12015-Archive-Tar-directory-traversal.diff
+++ b/debian/patches/fixes/CVE-2018-12015-Archive-Tar-directory-traversal.diff
@@ -20,7 +20,7 @@ Patch-Name: fixes/CVE-2018-12015-Archive-Tar-directory-traversal.diff
  2 files changed, 15 insertions(+), 1 deletion(-)
 
 diff --git a/cpan/Archive-Tar/lib/Archive/Tar.pm b/cpan/Archive-Tar/lib/Archive/Tar.pm
-index 6a047a32d..d110bd7bd 100644
+index 6a047a32d6..d110bd7bd8 100644
 --- a/cpan/Archive-Tar/lib/Archive/Tar.pm
 +++ b/cpan/Archive-Tar/lib/Archive/Tar.pm
 @@ -845,6 +845,20 @@ sub _extract_file {
@@ -45,7 +45,7 @@ index 6a047a32d..d110bd7bd 100644
          my $fh = IO::File->new;
          $fh->open( '>' . $full ) or (
 diff --git a/t/porting/customized.dat b/t/porting/customized.dat
-index 5d0a25529..5aed9c2ce 100644
+index 5d0a255298..5aed9c2ce2 100644
 --- a/t/porting/customized.dat
 +++ b/t/porting/customized.dat
 @@ -1,7 +1,7 @@
diff --git a/debian/patches/fixes/CVE-2018-18311.diff b/debian/patches/fixes/CVE-2018-18311.diff
index 3bbaf97e40..577e1e5f09 100644
--- a/debian/patches/fixes/CVE-2018-18311.diff
+++ b/debian/patches/fixes/CVE-2018-18311.diff
@@ -24,11 +24,11 @@ whitespace changes only]
 Origin: upstream
 Patch-Name: fixes/CVE-2018-18311.diff
 ---
- util.c | 76 ++++++++++++++++++++++++++++++++++++++++++++++--------------------
+ util.c | 76 ++++++++++++++++++++++++++++++++++++++++------------------
  1 file changed, 53 insertions(+), 23 deletions(-)
 
 diff --git a/util.c b/util.c
-index f1315045f..22068529d 100644
+index f1315045fa..22068529db 100644
 --- a/util.c
 +++ b/util.c
 @@ -2143,8 +2143,40 @@ Perl_new_warnings_bitfield(pTHX_ STRLEN *buffer, const char *const bits,
diff --git a/debian/patches/fixes/CVE-2018-18312.diff b/debian/patches/fixes/CVE-2018-18312.diff
index f09eca22a0..eb8cf6c2d0 100644
Binary files a/debian/patches/fixes/CVE-2018-18312.diff and b/debian/patches/fixes/CVE-2018-18312.diff differ
diff --git a/debian/patches/fixes/CVE-2018-18313.diff b/debian/patches/fixes/CVE-2018-18313.diff
index 1fca9d6031..5bc4ee6c5e 100644
--- a/debian/patches/fixes/CVE-2018-18313.diff
+++ b/debian/patches/fixes/CVE-2018-18313.diff
@@ -15,7 +15,7 @@ Patch-Name: fixes/CVE-2018-18313.diff
  1 file changed, 6 insertions(+), 4 deletions(-)
 
 diff --git a/regcomp.c b/regcomp.c
-index d283e3ca6..2a7700c5a 100644
+index d283e3ca65..2a7700c5a4 100644
 --- a/regcomp.c
 +++ b/regcomp.c
 @@ -11779,7 +11779,7 @@ S_grok_bslash_N(pTHX_ RExC_state_t *pRExC_state,
diff --git a/debian/patches/fixes/CVE-2018-18314.diff b/debian/patches/fixes/CVE-2018-18314.diff
index 8268c3f2ab..d3425ffd0a 100644
--- a/debian/patches/fixes/CVE-2018-18314.diff
+++ b/debian/patches/fixes/CVE-2018-18314.diff
@@ -25,7 +25,7 @@ Patch-Name: fixes/CVE-2018-18314.diff
  6 files changed, 68 insertions(+), 32 deletions(-)
 
 diff --git a/pod/perldiag.pod b/pod/perldiag.pod
-index 78aeb164e..11467a1a1 100644
+index 78aeb164e3..11467a1a12 100644
 --- a/pod/perldiag.pod
 +++ b/pod/perldiag.pod
 @@ -5775,7 +5775,7 @@ yourself.
@@ -70,7 +70,7 @@ index 78aeb164e..11467a1a1 100644
  marked by S<<-- HERE> in m/%s/
  
 diff --git a/pod/perlrecharclass.pod b/pod/perlrecharclass.pod
-index 7f5a4ef27..920c19af3 100644
+index 7f5a4ef273..920c19af33 100644
 --- a/pod/perlrecharclass.pod
 +++ b/pod/perlrecharclass.pod
 @@ -1101,8 +1101,8 @@ hence both of the following work:
@@ -85,7 +85,7 @@ index 7f5a4ef27..920c19af3 100644
  just three limitations:
  
 diff --git a/regcomp.c b/regcomp.c
-index 2a7700c5a..ab2c236ec 100644
+index 2a7700c5a4..ab2c236ec2 100644
 --- a/regcomp.c
 +++ b/regcomp.c
 @@ -14608,8 +14608,9 @@ S_handle_regex_sets(pTHX_ RExC_state_t *pRExC_state, SV** return_invlist,
@@ -160,7 +160,7 @@ index 2a7700c5a..ab2c236ec 100644
                      RExC_flags = save_flags;
                      goto handle_operand;
 diff --git a/t/lib/warnings/regcomp b/t/lib/warnings/regcomp
-index 08cb27b00..367276d0f 100644
+index 08cb27b00f..367276d0fc 100644
 --- a/t/lib/warnings/regcomp
 +++ b/t/lib/warnings/regcomp
 @@ -59,21 +59,21 @@ Unmatched [ in regex; marked by <-- HERE in m/abc[ <-- HERE fi[.00./ at - line
@@ -189,7 +189,7 @@ index 08cb27b00..367276d0f 100644
  # NAME [perl #126141]
  # OPTION fatal
 diff --git a/t/re/reg_mesg.t b/t/re/reg_mesg.t
-index 7c14281c6..8829e8121 100644
+index 7c14281c6b..8829e8121a 100644
 --- a/t/re/reg_mesg.t
 +++ b/t/re/reg_mesg.t
 @@ -202,8 +202,9 @@ my @death =
@@ -250,7 +250,7 @@ index 7c14281c6..8829e8121 100644
   '/\cネ/' => "Character following \"\\c\" must be printable ASCII",
   '/\b{ネ}/' => "'ネ' is an unknown bound type {#} m/\\b{ネ{#}}/",
 diff --git a/t/re/regex_sets.t b/t/re/regex_sets.t
-index cd5df00ed..7998cb4b4 100644
+index cd5df00ed0..7998cb4b46 100644
 --- a/t/re/regex_sets.t
 +++ b/t/re/regex_sets.t
 @@ -157,13 +157,13 @@ for my $char ("٠", "٥", "٩") {
diff --git a/debian/patches/fixes/CVE-2018-6797.diff b/debian/patches/fixes/CVE-2018-6797.diff
index 02c1277db4..0280ec6736 100644
--- a/debian/patches/fixes/CVE-2018-6797.diff
+++ b/debian/patches/fixes/CVE-2018-6797.diff
@@ -17,7 +17,7 @@ Patch-Name: fixes/CVE-2018-6797.diff
  2 files changed, 16 insertions(+)
 
 diff --git a/regcomp.c b/regcomp.c
-index 29b1ffe7c..1b84be0b4 100644
+index 29b1ffe7c5..1b84be0b45 100644
 --- a/regcomp.c
 +++ b/regcomp.c
 @@ -13319,6 +13319,18 @@ S_regatom(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth)
@@ -40,7 +40,7 @@ index 29b1ffe7c..1b84be0b4 100644
                              maybe_exactfu = FALSE;
                          }
 diff --git a/t/re/pat_advanced.t b/t/re/pat_advanced.t
-index 913e84662..1c11e446e 100644
+index 913e84662f..1c11e446e1 100644
 --- a/t/re/pat_advanced.t
 +++ b/t/re/pat_advanced.t
 @@ -2369,6 +2369,10 @@ EOF
diff --git a/debian/patches/fixes/CVE-2018-6798/pt1.diff b/debian/patches/fixes/CVE-2018-6798/pt1.diff
index e11b029a21..3950ee4046 100644
--- a/debian/patches/fixes/CVE-2018-6798/pt1.diff
+++ b/debian/patches/fixes/CVE-2018-6798/pt1.diff
@@ -19,7 +19,7 @@ Patch-Name: fixes/CVE-2018-6798/pt1.diff
  2 files changed, 23 insertions(+), 13 deletions(-)
 
 diff --git a/regexec.c b/regexec.c
-index 4cea7d280..faacd85c1 100644
+index 4cea7d2801..faacd85c11 100644
 --- a/regexec.c
 +++ b/regexec.c
 @@ -1471,7 +1471,9 @@ Perl_re_intuit_start(pTHX_
@@ -108,7 +108,7 @@ index 4cea7d280..faacd85c1 100644
  			    foldlen -= len;
  			}
 diff --git a/t/lib/warnings/regexec b/t/lib/warnings/regexec
-index 900dd6ee7..6635142de 100644
+index 900dd6ee7f..6635142dea 100644
 --- a/t/lib/warnings/regexec
 +++ b/t/lib/warnings/regexec
 @@ -260,3 +260,10 @@ setlocale(&POSIX::LC_CTYPE, $utf8_locale);
diff --git a/debian/patches/fixes/CVE-2018-6798/pt2.diff b/debian/patches/fixes/CVE-2018-6798/pt2.diff
index adaecf5fb5..1a39489be0 100644
--- a/debian/patches/fixes/CVE-2018-6798/pt2.diff
+++ b/debian/patches/fixes/CVE-2018-6798/pt2.diff
@@ -16,7 +16,7 @@ Patch-Name: fixes/CVE-2018-6798/pt2.diff
  2 files changed, 11 insertions(+), 4 deletions(-)
 
 diff --git a/regexec.c b/regexec.c
-index faacd85c1..40a63a6fb 100644
+index faacd85c11..40a63a6fb4 100644
 --- a/regexec.c
 +++ b/regexec.c
 @@ -1456,7 +1456,7 @@ Perl_re_intuit_start(pTHX_
@@ -68,7 +68,7 @@ index faacd85c1..40a63a6fb 100644
              uvc = utf8n_to_uvchr( (const U8*) uscan, foldlen, &len, uniflags );     \
              foldlen -= len;                                                         \
 diff --git a/t/re/re_tests b/t/re/re_tests
-index 34ac94a21..caa068bbc 100644
+index 34ac94a213..caa068bbcc 100644
 --- a/t/re/re_tests
 +++ b/t/re/re_tests
 @@ -1966,6 +1966,7 @@ ab(?#Comment){2}c	abbc	y	$&	abbc
diff --git a/debian/patches/fixes/CVE-2018-6798/pt3.diff b/debian/patches/fixes/CVE-2018-6798/pt3.diff
index f7c3b1345f..ae94959d1e 100644
--- a/debian/patches/fixes/CVE-2018-6798/pt3.diff
+++ b/debian/patches/fixes/CVE-2018-6798/pt3.diff
@@ -17,7 +17,7 @@ Patch-Name: fixes/CVE-2018-6798/pt3.diff
  1 file changed, 3 deletions(-)
 
 diff --git a/t/lib/warnings/regexec b/t/lib/warnings/regexec
-index 6635142de..c370ddc3c 100644
+index 6635142dea..c370ddc3c7 100644
 --- a/t/lib/warnings/regexec
 +++ b/t/lib/warnings/regexec
 @@ -262,8 +262,5 @@ setlocale(&POSIX::LC_CTYPE, $utf8_locale);
diff --git a/debian/patches/fixes/CVE-2018-6913.diff b/debian/patches/fixes/CVE-2018-6913.diff
index 9c873ebf66..d5b241a15f 100644
--- a/debian/patches/fixes/CVE-2018-6913.diff
+++ b/debian/patches/fixes/CVE-2018-6913.diff
@@ -48,7 +48,7 @@ Patch-Name: fixes/CVE-2018-6913.diff
  2 files changed, 44 insertions(+), 5 deletions(-)
 
 diff --git a/pp_pack.c b/pp_pack.c
-index f6964c3f3..c0de5ab82 100644
+index f6964c3f30..c0de5ab82b 100644
 --- a/pp_pack.c
 +++ b/pp_pack.c
 @@ -358,11 +358,28 @@ STMT_START {							\
@@ -101,7 +101,7 @@ index f6964c3f3..c0de5ab82 100644
          }
  
 diff --git a/t/op/pack.t b/t/op/pack.t
-index a2da63689..a480c3ad7 100644
+index a2da63689b..a480c3ad7f 100644
 --- a/t/op/pack.t
 +++ b/t/op/pack.t
 @@ -12,7 +12,7 @@ my $no_endianness = $] > 5.009 ? '' :
diff --git a/debian/patches/fixes/CVE-2020-10543.diff b/debian/patches/fixes/CVE-2020-10543.diff
new file mode 100644
index 0000000000..a6c7005482
--- /dev/null
+++ b/debian/patches/fixes/CVE-2020-10543.diff
@@ -0,0 +1,32 @@
+From ab4568c2c2d8105475542bad77501a7edecdb4bc Mon Sep 17 00:00:00 2001
+From: John Lightsey <jd@cpanel.net>
+Date: Wed, 20 Nov 2019 20:02:45 -0600
+Subject: regcomp.c: Prevent integer overflow from nested regex quantifiers.
+
+(CVE-2020-10543) On 32bit systems the size calculations for nested regular
+expression quantifiers could overflow causing heap memory corruption.
+
+Bug-Debian: https://bugs.debian.org/962005
+Origin: upstream
+Patch-Name: fixes/CVE-2020-10543.diff
+---
+ regcomp.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/regcomp.c b/regcomp.c
+index ab2c236ec2..912e52e3e5 100644
+--- a/regcomp.c
++++ b/regcomp.c
+@@ -5065,6 +5065,12 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp,
+ 		    (void)ReREFCNT_inc(RExC_rx_sv);
+ 		}
+ 
++                if ( ( minnext > 0 && mincount >= SSize_t_MAX / minnext )
++                    || min >= SSize_t_MAX - minnext * mincount )
++                {
++                    FAIL("Regexp out of space");
++                }
++
+ 		min += minnext * mincount;
+ 		is_inf_internal |= deltanext == SSize_t_MAX
+                          || (maxcount == REG_INFTY && minnext + deltanext > 0);
diff --git a/debian/patches/fixes/CVE-2020-10878.diff b/debian/patches/fixes/CVE-2020-10878.diff
new file mode 100644
index 0000000000..59c2ddf097
--- /dev/null
+++ b/debian/patches/fixes/CVE-2020-10878.diff
@@ -0,0 +1,152 @@
+From dd76cadb99fb0216980e6571564713f8fbf88572 Mon Sep 17 00:00:00 2001
+From: Hugo van der Sanden <hv@crypt.org>
+Date: Tue, 18 Feb 2020 13:51:16 +0000
+Subject: study_chunk: extract rck_elide_nothing
+
+(CVE-2020-10878)
+
+[Backported to 5.24 by Dominic Hargreaves for Debian]
+
+Bug-Debian: https://bugs.debian.org/962005
+Origin: upstream
+Patch-Name: fixes/CVE-2020-10878.diff
+---
+ embed.fnc |  1 +
+ embed.h   |  1 +
+ proto.h   |  3 +++
+ regcomp.c | 70 ++++++++++++++++++++++++++++++++++---------------------
+ 4 files changed, 48 insertions(+), 27 deletions(-)
+
+diff --git a/embed.fnc b/embed.fnc
+index a64ffbac74..c4c08cb507 100644
+--- a/embed.fnc
++++ b/embed.fnc
+@@ -2243,6 +2243,7 @@ Es	|SSize_t|study_chunk	|NN RExC_state_t *pRExC_state \
+                                 |I32 stopparen|U32 recursed_depth \
+ 				|NULLOK regnode_ssc *and_withp \
+ 				|U32 flags|U32 depth
++Es	|void	|rck_elide_nothing|NN regnode *node
+ EsRn	|U32	|add_data	|NN RExC_state_t* const pRExC_state \
+ 				|NN const char* const s|const U32 n
+ rs	|void	|re_croak2	|bool utf8|NN const char* pat1|NN const char* pat2|...
+diff --git a/embed.h b/embed.h
+index 42c65b2eb0..9af1fc064e 100644
+--- a/embed.h
++++ b/embed.h
+@@ -1026,6 +1026,7 @@
+ #define output_or_return_posix_warnings(a,b,c)	S_output_or_return_posix_warnings(aTHX_ a,b,c)
+ #define parse_lparen_question_flags(a)	S_parse_lparen_question_flags(aTHX_ a)
+ #define populate_ANYOF_from_invlist(a,b)	S_populate_ANYOF_from_invlist(aTHX_ a,b)
++#define rck_elide_nothing(a)	S_rck_elide_nothing(aTHX_ a)
+ #define reg(a,b,c,d)		S_reg(aTHX_ a,b,c,d)
+ #define reg2Lanode(a,b,c,d)	S_reg2Lanode(aTHX_ a,b,c,d)
+ #define reg_node(a,b)		S_reg_node(aTHX_ a,b)
+diff --git a/proto.h b/proto.h
+index fb4ee29508..3d4e01295d 100644
+--- a/proto.h
++++ b/proto.h
+@@ -4821,6 +4821,9 @@ STATIC void	S_parse_lparen_question_flags(pTHX_ RExC_state_t *pRExC_state);
+ STATIC void	S_populate_ANYOF_from_invlist(pTHX_ regnode *node, SV** invlist_ptr);
+ #define PERL_ARGS_ASSERT_POPULATE_ANYOF_FROM_INVLIST	\
+ 	assert(node); assert(invlist_ptr)
++STATIC void	S_rck_elide_nothing(pTHX_ regnode *node);
++#define PERL_ARGS_ASSERT_RCK_ELIDE_NOTHING	\
++	assert(node)
+ PERL_STATIC_NO_RET void	S_re_croak2(pTHX_ bool utf8, const char* pat1, const char* pat2, ...)
+ 			__attribute__noreturn__;
+ #define PERL_ARGS_ASSERT_RE_CROAK2	\
+diff --git a/regcomp.c b/regcomp.c
+index 912e52e3e5..d3452fadc6 100644
+--- a/regcomp.c
++++ b/regcomp.c
+@@ -4165,28 +4165,10 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp,
+          */
+         JOIN_EXACT(scan,&min_subtract, &unfolded_multi_char, 0);
+ 
+-	/* Follow the next-chain of the current node and optimize
+-	   away all the NOTHINGs from it.  */
+-	if (OP(scan) != CURLYX) {
+-	    const int max = (reg_off_by_arg[OP(scan)]
+-		       ? I32_MAX
+-		       /* I32 may be smaller than U16 on CRAYs! */
+-		       : (I32_MAX < U16_MAX ? I32_MAX : U16_MAX));
+-	    int off = (reg_off_by_arg[OP(scan)] ? ARG(scan) : NEXT_OFF(scan));
+-	    int noff;
+-	    regnode *n = scan;
+-
+-	    /* Skip NOTHING and LONGJMP. */
+-	    while ((n = regnext(n))
+-		   && ((PL_regkind[OP(n)] == NOTHING && (noff = NEXT_OFF(n)))
+-		       || ((OP(n) == LONGJMP) && (noff = ARG(n))))
+-		   && off + noff < max)
+-		off += noff;
+-	    if (reg_off_by_arg[OP(scan)])
+-		ARG(scan) = off;
+-	    else
+-		NEXT_OFF(scan) = off;
+-	}
++        /* Follow the next-chain of the current node and optimize
++           away all the NOTHINGs from it.
++         */
++        rck_elide_nothing(scan);
+ 
+ 	/* The principal pseudo-switch.  Cannot be a switch, since we
+ 	   look into several different things.  */
+@@ -5302,11 +5284,7 @@ Perl_re_printf( aTHX_  "LHS=%"UVuf" RHS=%"UVuf"\n",
+ 		if (data && (fl & SF_HAS_EVAL))
+ 		    data->flags |= SF_HAS_EVAL;
+ 	      optimize_curly_tail:
+-		if (OP(oscan) != CURLYX) {
+-		    while (PL_regkind[OP(next = regnext(oscan))] == NOTHING
+-			   && NEXT_OFF(next))
+-			NEXT_OFF(oscan) += NEXT_OFF(next);
+-		}
++		rck_elide_nothing(oscan);
+ 		continue;
+ 
+ 	    default:
+@@ -6156,6 +6134,44 @@ S_pat_upgrade_to_utf8(pTHX_ RExC_state_t * const pRExC_state,
+     RExC_orig_utf8 = RExC_utf8 = 1;
+ }
+ 
++/* Follow the next-chain of the current node and optimize away
++   all the NOTHINGs from it.
++ */
++STATIC void
++S_rck_elide_nothing(pTHX_ regnode *node)
++{
++    dVAR;
++
++    PERL_ARGS_ASSERT_RCK_ELIDE_NOTHING;
++
++    if (OP(node) != CURLYX) {
++        const int max = (reg_off_by_arg[OP(node)]
++                        ? I32_MAX
++                          /* I32 may be smaller than U16 on CRAYs! */
++                        : (I32_MAX < U16_MAX ? I32_MAX : U16_MAX));
++        int off = (reg_off_by_arg[OP(node)] ? ARG(node) : NEXT_OFF(node));
++        int noff;
++        regnode *n = node;
++
++        /* Skip NOTHING and LONGJMP. */
++        while (
++            (n = regnext(n))
++            && (
++                (PL_regkind[OP(n)] == NOTHING && (noff = NEXT_OFF(n)))
++                || ((OP(n) == LONGJMP) && (noff = ARG(n)))
++            )
++            && off + noff < max
++        ) {
++            off += noff;
++        }
++        if (reg_off_by_arg[OP(node)])
++            ARG(node) = off;
++        else
++            NEXT_OFF(node) = off;
++    }
++    return;
++}
++
+ 
+ 
+ /* S_concat_pat(): concatenate a list of args to the pattern string pat,
diff --git a/debian/patches/fixes/CVE-2020-12723.diff b/debian/patches/fixes/CVE-2020-12723.diff
new file mode 100644
index 0000000000..eb9a99557a
--- /dev/null
+++ b/debian/patches/fixes/CVE-2020-12723.diff
@@ -0,0 +1,281 @@
+From db48e20bb0034a7dca003c8477913fe35657dff8 Mon Sep 17 00:00:00 2001
+From: Hugo van der Sanden <hv@crypt.org>
+Date: Sat, 11 Apr 2020 14:10:24 +0100
+Subject: study_chunk: avoid mutating regexp program within GOSUB
+
+gh16947 and gh17743: studying GOSUB may restudy in an inner call
+(via a mix of recursion and enframing) something that an outer call
+is in the middle of looking at.  Let the outer frame deal with it.
+
+(CVE-2020-12723)
+
+[Backported to 5.24 by Dominic Hargreaves for Debian]
+
+Bug-Debian: https://bugs.debian.org/962005
+Origin: upstream
+Patch-Name: fixes/CVE-2020-12723.diff
+---
+ embed.fnc  |  2 +-
+ embed.h    |  2 +-
+ proto.h    |  2 +-
+ regcomp.c  | 48 ++++++++++++++++++++++++++++++++----------------
+ t/re/pat.t | 26 +++++++++++++++++++++++++-
+ 5 files changed, 60 insertions(+), 20 deletions(-)
+
+diff --git a/embed.fnc b/embed.fnc
+index c4c08cb507..2edd180504 100644
+--- a/embed.fnc
++++ b/embed.fnc
+@@ -2242,7 +2242,7 @@ Es	|SSize_t|study_chunk	|NN RExC_state_t *pRExC_state \
+ 				|NULLOK struct scan_data_t *data \
+                                 |I32 stopparen|U32 recursed_depth \
+ 				|NULLOK regnode_ssc *and_withp \
+-				|U32 flags|U32 depth
++				|U32 flags|U32 depth|bool was_mutate_ok
+ Es	|void	|rck_elide_nothing|NN regnode *node
+ EsRn	|U32	|add_data	|NN RExC_state_t* const pRExC_state \
+ 				|NN const char* const s|const U32 n
+diff --git a/embed.h b/embed.h
+index 9af1fc064e..abf07d2b90 100644
+--- a/embed.h
++++ b/embed.h
+@@ -1057,7 +1057,7 @@
+ #define ssc_is_cp_posixl_init	S_ssc_is_cp_posixl_init
+ #define ssc_or(a,b,c)		S_ssc_or(aTHX_ a,b,c)
+ #define ssc_union(a,b,c)	S_ssc_union(aTHX_ a,b,c)
+-#define study_chunk(a,b,c,d,e,f,g,h,i,j,k)	S_study_chunk(aTHX_ a,b,c,d,e,f,g,h,i,j,k)
++#define study_chunk(a,b,c,d,e,f,g,h,i,j,k,l)	S_study_chunk(aTHX_ a,b,c,d,e,f,g,h,i,j,k,l)
+ #  endif
+ #  if defined(PERL_IN_REGCOMP_C) || defined (PERL_IN_DUMP_C)
+ #define _invlist_dump(a,b,c,d)	Perl__invlist_dump(aTHX_ a,b,c,d)
+diff --git a/proto.h b/proto.h
+index 3d4e01295d..bb73098af4 100644
+--- a/proto.h
++++ b/proto.h
+@@ -4923,7 +4923,7 @@ STATIC void	S_ssc_or(pTHX_ const RExC_state_t *pRExC_state, regnode_ssc *ssc, co
+ PERL_STATIC_INLINE void	S_ssc_union(pTHX_ regnode_ssc *ssc, SV* const invlist, const bool invert_2nd);
+ #define PERL_ARGS_ASSERT_SSC_UNION	\
+ 	assert(ssc); assert(invlist)
+-STATIC SSize_t	S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp, SSize_t *minlenp, SSize_t *deltap, regnode *last, struct scan_data_t *data, I32 stopparen, U32 recursed_depth, regnode_ssc *and_withp, U32 flags, U32 depth);
++STATIC SSize_t	S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp, SSize_t *minlenp, SSize_t *deltap, regnode *last, struct scan_data_t *data, I32 stopparen, U32 recursed_depth, regnode_ssc *and_withp, U32 flags, U32 depth, bool was_mutate_ok);
+ #define PERL_ARGS_ASSERT_STUDY_CHUNK	\
+ 	assert(pRExC_state); assert(scanp); assert(minlenp); assert(deltap); assert(last)
+ #endif
+diff --git a/regcomp.c b/regcomp.c
+index d3452fadc6..28857eab70 100644
+--- a/regcomp.c
++++ b/regcomp.c
+@@ -119,6 +119,7 @@ typedef struct scan_frame {
+     U32 prev_recursed_depth;
+     I32 stopparen;              /* what stopparen do we use */
+     U32 is_top_frame;           /* what flags do we use? */
++    bool in_gosub;              /* this or an outer frame is for GOSUB */
+ 
+     struct scan_frame *this_prev_frame; /* this previous frame */
+     struct scan_frame *prev_frame;      /* previous frame */
+@@ -4077,7 +4078,7 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp,
+ 			I32 stopparen,
+                         U32 recursed_depth,
+ 			regnode_ssc *and_withp,
+-			U32 flags, U32 depth)
++			U32 flags, U32 depth, bool was_mutate_ok)
+ 			/* scanp: Start here (read-write). */
+ 			/* deltap: Write maxlen-minlen here. */
+ 			/* last: Stop before this one. */
+@@ -4153,6 +4154,10 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp,
+                                    node length to get a real minimum (because
+                                    the folded version may be shorter) */
+ 	bool unfolded_multi_char = FALSE;
++        /* avoid mutating ops if we are anywhere within the recursed or
++         * enframed handling for a GOSUB: the outermost level will handle it.
++         */
++        bool mutate_ok = was_mutate_ok && !(frame && frame->in_gosub);
+ 	/* Peephole optimizer: */
+         DEBUG_STUDYDATA("Peep:", data, depth);
+         DEBUG_PEEP("Peep", scan, depth);
+@@ -4163,7 +4168,8 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp,
+          * parsing code, as each (?:..) is handled by a different invocation of
+          * reg() -- Yves
+          */
+-        JOIN_EXACT(scan,&min_subtract, &unfolded_multi_char, 0);
++        if (mutate_ok)
++            JOIN_EXACT(scan,&min_subtract, &unfolded_multi_char, 0);
+ 
+         /* Follow the next-chain of the current node and optimize
+            away all the NOTHINGs from it.
+@@ -4194,7 +4200,7 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp,
+              * NOTE we dont use the return here! */
+             (void)study_chunk(pRExC_state, &scan, &minlen,
+                               &deltanext, next, &data_fake, stopparen,
+-                              recursed_depth, NULL, f, depth+1);
++                              recursed_depth, NULL, f, depth+1, mutate_ok);
+ 
+             scan = next;
+         } else
+@@ -4261,7 +4267,8 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp,
+ 		    /* we suppose the run is continuous, last=next...*/
+ 		    minnext = study_chunk(pRExC_state, &scan, minlenp,
+                                       &deltanext, next, &data_fake, stopparen,
+-                                      recursed_depth, NULL, f,depth+1);
++                                      recursed_depth, NULL, f, depth+1,
++                                      mutate_ok);
+ 
+ 		    if (min1 > minnext)
+ 			min1 = minnext;
+@@ -4328,9 +4335,10 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp,
+ 		    }
+ 		}
+ 
+-                if (PERL_ENABLE_TRIE_OPTIMISATION &&
+-                        OP( startbranch ) == BRANCH )
+-                {
++                if (PERL_ENABLE_TRIE_OPTIMISATION
++                    && OP(startbranch) == BRANCH
++                    && mutate_ok
++                ) {
+ 		/* demq.
+ 
+                    Assuming this was/is a branch we are dealing with: 'scan'
+@@ -4781,6 +4789,9 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp,
+                 newframe->stopparen = stopparen;
+                 newframe->prev_recursed_depth = recursed_depth;
+                 newframe->this_prev_frame= frame;
++                newframe->in_gosub = (
++                    (frame && frame->in_gosub) || OP(scan) == GOSUB
++                );
+ 
+                 DEBUG_STUDYDATA("frame-new:",data,depth);
+                 DEBUG_PEEP("fnew", scan, depth);
+@@ -4999,7 +5010,7 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp,
+                                   (mincount == 0
+                                    ? (f & ~SCF_DO_SUBSTR)
+                                    : f)
+-                                  ,depth+1);
++                                  , depth+1, mutate_ok);
+ 
+ 		if (flags & SCF_DO_STCLASS)
+ 		    data->start_class = oclass;
+@@ -5067,7 +5078,9 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp,
+ 		if (  OP(oscan) == CURLYX && data
+ 		      && data->flags & SF_IN_PAR
+ 		      && !(data->flags & SF_HAS_EVAL)
+-		      && !deltanext && minnext == 1 ) {
++		      && !deltanext && minnext == 1
++                      && mutate_ok
++                ) {
+ 		    /* Try to optimize to CURLYN.  */
+ 		    regnode *nxt = NEXTOPER(oscan) + EXTRA_STEP_2ARGS;
+ 		    regnode * const nxt1 = nxt;
+@@ -5113,10 +5126,10 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp,
+ 		      && !(data->flags & SF_HAS_EVAL)
+ 		      && !deltanext	/* atom is fixed width */
+ 		      && minnext != 0	/* CURLYM can't handle zero width */
+-
+                          /* Nor characters whose fold at run-time may be
+                           * multi-character */
+                       && ! (RExC_seen & REG_UNFOLDED_MULTI_SEEN)
++                      && mutate_ok
+ 		) {
+ 		    /* XXXX How to optimize if data == 0? */
+ 		    /* Optimize to a simpler form.  */
+@@ -5163,7 +5176,8 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp,
+ #endif
+ 			/* Optimize again: */
+ 			study_chunk(pRExC_state, &nxt1, minlenp, &deltanext, nxt,
+-                                    NULL, stopparen, recursed_depth, NULL, 0,depth+1);
++                                    NULL, stopparen, recursed_depth, NULL, 0,
++                                    depth+1, mutate_ok);
+ 		    }
+ 		    else
+ 			oscan->flags = 0;
+@@ -5544,7 +5558,8 @@ Perl_re_printf( aTHX_  "LHS=%"UVuf" RHS=%"UVuf"\n",
+                 nscan = NEXTOPER(NEXTOPER(scan));
+                 minnext = study_chunk(pRExC_state, &nscan, minlenp, &deltanext,
+                                       last, &data_fake, stopparen,
+-                                      recursed_depth, NULL, f, depth+1);
++                                      recursed_depth, NULL, f, depth+1,
++                                      mutate_ok);
+                 if (scan->flags) {
+                     if (deltanext) {
+ 			FAIL("Variable length lookbehind not implemented");
+@@ -5633,7 +5648,7 @@ Perl_re_printf( aTHX_  "LHS=%"UVuf" RHS=%"UVuf"\n",
+                 *minnextp = study_chunk(pRExC_state, &nscan, minnextp,
+                                         &deltanext, last, &data_fake,
+                                         stopparen, recursed_depth, NULL,
+-                                        f,depth+1);
++                                        f, depth+1, mutate_ok);
+                 if (scan->flags) {
+                     if (deltanext) {
+ 			FAIL("Variable length lookbehind not implemented");
+@@ -5793,7 +5808,8 @@ Perl_re_printf( aTHX_  "LHS=%"UVuf" RHS=%"UVuf"\n",
+                            branches even though they arent otherwise used. */
+                         minnext = study_chunk(pRExC_state, &scan, minlenp,
+                             &deltanext, (regnode *)nextbranch, &data_fake,
+-                            stopparen, recursed_depth, NULL, f,depth+1);
++                            stopparen, recursed_depth, NULL, f, depth+1,
++                            mutate_ok);
+                     }
+                     if (nextbranch && PL_regkind[OP(nextbranch)]==BRANCH)
+                         nextbranch= regnext((regnode*)nextbranch);
+@@ -7480,7 +7496,7 @@ Perl_re_op_compile(pTHX_ SV ** const patternp, int pat_count,
+             &data, -1, 0, NULL,
+             SCF_DO_SUBSTR | SCF_WHILEM_VISITED_POS | stclass_flag
+                           | (restudied ? SCF_TRIE_DOING_RESTUDY : 0),
+-            0);
++            0, TRUE);
+ 
+ 
+         CHECK_RESTUDY_GOTO_butfirst(LEAVE_with_name("study_chunk"));
+@@ -7626,7 +7642,7 @@ Perl_re_op_compile(pTHX_ SV ** const patternp, int pat_count,
+             SCF_DO_STCLASS_AND|SCF_WHILEM_VISITED_POS|(restudied
+                                                       ? SCF_TRIE_DOING_RESTUDY
+                                                       : 0),
+-            0);
++            0, TRUE);
+ 
+         CHECK_RESTUDY_GOTO_butfirst(NOOP);
+ 
+diff --git a/t/re/pat.t b/t/re/pat.t
+index f32e5299f7..225d73e166 100644
+--- a/t/re/pat.t
++++ b/t/re/pat.t
+@@ -23,7 +23,7 @@ BEGIN {
+     skip_all_without_unicode_tables();
+ }
+ 
+-plan tests => 790;  # Update this when adding/deleting tests.
++plan tests => 794;  # Update this when adding/deleting tests.
+ 
+ run_tests() unless caller;
+ 
+@@ -1769,6 +1769,30 @@ EOP
+         ok(scalar($text !~ m{(~*=[a-z]=)}g), "RT #131575");
+     }
+ 
++    # gh16947: test regexp corruption (GOSUB)
++    {
++        fresh_perl_is(q{
++            'xy' =~ /x(?0)|x(?|y|y)/ && print 'ok'
++        }, 'ok', {}, 'gh16947: test regexp corruption (GOSUB)');
++    }
++    # gh16947: test fix doesn't break SUSPEND
++    {
++        fresh_perl_is(q{ 'sx' =~ m{ss++}i; print 'ok' },
++                'ok', {}, "gh16947: test fix doesn't break SUSPEND");
++    }
++
++    # gh17743: more regexp corruption via GOSUB
++    {
++        fresh_perl_is(q{
++            "0" =~ /((0(?0)|000(?|0000|0000)(?0))|)/; print "ok"
++        }, 'ok', {}, 'gh17743: test regexp corruption (1)');
++
++        fresh_perl_is(q{
++            "000000000000" =~ /(0(())(0((?0)())|000(?|\x{ef}\x{bf}\x{bd}|\x{ef}\x{bf}\x{bd}))|)/;
++            print "ok"
++        }, 'ok', {}, 'gh17743: test regexp corruption (2)');
++    }
++
+ } # End of sub run_tests
+ 
+ 1;
diff --git a/debian/patches/fixes/autodie-scope.diff b/debian/patches/fixes/autodie-scope.diff
index a2efa48d96..b2349f3511 100644
--- a/debian/patches/fixes/autodie-scope.diff
+++ b/debian/patches/fixes/autodie-scope.diff
@@ -23,7 +23,7 @@ Patch-Name: fixes/autodie-scope.diff
  create mode 100755 cpan/autodie/t/no-default.t
 
 diff --git a/cpan/autodie/lib/Fatal.pm b/cpan/autodie/lib/Fatal.pm
-index 16e174347..2058abdab 100644
+index 16e1743474..2058abdab0 100644
 --- a/cpan/autodie/lib/Fatal.pm
 +++ b/cpan/autodie/lib/Fatal.pm
 @@ -580,7 +580,12 @@ sub unimport {
@@ -42,7 +42,7 @@ index 16e174347..2058abdab 100644
      }
 diff --git a/cpan/autodie/t/no-all.t b/cpan/autodie/t/no-all.t
 new file mode 100755
-index 000000000..1a503f68b
+index 0000000000..1a503f68be
 --- /dev/null
 +++ b/cpan/autodie/t/no-all.t
 @@ -0,0 +1,22 @@
@@ -70,7 +70,7 @@ index 000000000..1a503f68b
 +1;
 diff --git a/cpan/autodie/t/no-default.t b/cpan/autodie/t/no-default.t
 new file mode 100755
-index 000000000..44d2acf27
+index 0000000000..44d2acf27a
 --- /dev/null
 +++ b/cpan/autodie/t/no-default.t
 @@ -0,0 +1,23 @@
diff --git a/debian/patches/fixes/cpan_web_link.diff b/debian/patches/fixes/cpan_web_link.diff
index fa25e0fcd6..c5c0872feb 100644
--- a/debian/patches/fixes/cpan_web_link.diff
+++ b/debian/patches/fixes/cpan_web_link.diff
@@ -11,7 +11,7 @@ Patch-Name: fixes/cpan_web_link.diff
  1 file changed, 3 insertions(+)
 
 diff --git a/cpan/CPAN/lib/CPAN.pm b/cpan/CPAN/lib/CPAN.pm
-index 25bf3494a..6d11629e4 100644
+index 25bf3494a8..6d11629e40 100644
 --- a/cpan/CPAN/lib/CPAN.pm
 +++ b/cpan/CPAN/lib/CPAN.pm
 @@ -3950,6 +3950,9 @@ your operating system) then typing C<cpan> in a console window will
diff --git a/debian/patches/fixes/crosscompile-no-targethost.diff b/debian/patches/fixes/crosscompile-no-targethost.diff
index 7ef0e071c5..4b54ef136d 100644
--- a/debian/patches/fixes/crosscompile-no-targethost.diff
+++ b/debian/patches/fixes/crosscompile-no-targethost.diff
@@ -21,7 +21,7 @@ Patch-Name: fixes/crosscompile-no-targethost.diff
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/Configure b/Configure
-index a00df640e..42f7c21da 100755
+index a00df640e4..42f7c21da7 100755
 --- a/Configure
 +++ b/Configure
 @@ -2972,7 +2972,7 @@ $define|true|[yY]*)
diff --git a/debian/patches/fixes/document_makemaker_ccflags.diff b/debian/patches/fixes/document_makemaker_ccflags.diff
index f799b1e769..4f083390d7 100644
--- a/debian/patches/fixes/document_makemaker_ccflags.diff
+++ b/debian/patches/fixes/document_makemaker_ccflags.diff
@@ -15,7 +15,7 @@ Patch-Name: fixes/document_makemaker_ccflags.diff
  1 file changed, 4 insertions(+)
 
 diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker.pm
-index 42b174fe3..5a9fce22b 100644
+index 42b174fe34..5a9fce22b1 100644
 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker.pm
 +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker.pm
 @@ -1771,6 +1771,10 @@ currently used by MakeMaker but may be handy in Makefile.PLs.
diff --git a/debian/patches/fixes/extutils-parsexs-reproducibility.diff b/debian/patches/fixes/extutils-parsexs-reproducibility.diff
index be90dc0357..d0235c144d 100644
--- a/debian/patches/fixes/extutils-parsexs-reproducibility.diff
+++ b/debian/patches/fixes/extutils-parsexs-reproducibility.diff
@@ -12,7 +12,7 @@ Patch-Name: fixes/extutils-parsexs-reproducibility.diff
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm b/dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm
-index 32d74e18e..8c7a6631a 100644
+index 32d74e18e8..8c7a6631a9 100644
 --- a/dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm
 +++ b/dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm
 @@ -686,7 +686,7 @@ EOF
diff --git a/debian/patches/fixes/extutils_file_path_compat.diff b/debian/patches/fixes/extutils_file_path_compat.diff
index f2a69e4acd..bb054f77bb 100644
--- a/debian/patches/fixes/extutils_file_path_compat.diff
+++ b/debian/patches/fixes/extutils_file_path_compat.diff
@@ -19,7 +19,7 @@ Patch-Name: fixes/extutils_file_path_compat.diff
  1 file changed, 7 insertions(+), 6 deletions(-)
 
 diff --git a/cpan/ExtUtils-MakeMaker/t/eu_command.t b/cpan/ExtUtils-MakeMaker/t/eu_command.t
-index 269aa5c9a..32a6f59dc 100644
+index 269aa5c9a4..32a6f59dca 100644
 --- a/cpan/ExtUtils-MakeMaker/t/eu_command.t
 +++ b/cpan/ExtUtils-MakeMaker/t/eu_command.t
 @@ -151,20 +151,21 @@ BEGIN {
diff --git a/debian/patches/fixes/extutils_makemaker_reproducible.diff b/debian/patches/fixes/extutils_makemaker_reproducible.diff
index 5a5f727616..3d1d377bb0 100644
--- a/debian/patches/fixes/extutils_makemaker_reproducible.diff
+++ b/debian/patches/fixes/extutils_makemaker_reproducible.diff
@@ -12,7 +12,7 @@ Patch-Name: fixes/extutils_makemaker_reproducible.diff
  2 files changed, 3 insertions(+), 2 deletions(-)
 
 diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Command/MM.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Command/MM.pm
-index b4385fc8c..b76f2a425 100644
+index b4385fc8c6..b76f2a4251 100644
 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Command/MM.pm
 +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Command/MM.pm
 @@ -213,7 +213,8 @@ sub perllocal_install {
@@ -26,7 +26,7 @@ index b4385fc8c..b76f2a425 100644
  
   =over 4
 diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm
-index cf4d3e9e3..65cf05af1 100644
+index cf4d3e9e33..65cf05af1e 100644
 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm
 +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm
 @@ -3682,7 +3682,7 @@ Obsolete, deprecated method. Not used since Version 5.21.
diff --git a/debian/patches/fixes/fbm-instr-crash.diff b/debian/patches/fixes/fbm-instr-crash.diff
index 30e733ccd9..9dfc4fbbd3 100644
--- a/debian/patches/fixes/fbm-instr-crash.diff
+++ b/debian/patches/fixes/fbm-instr-crash.diff
@@ -25,7 +25,7 @@ Patch-Name: fixes/fbm-instr-crash.diff
  3 files changed, 25 insertions(+), 7 deletions(-)
 
 diff --git a/regexec.c b/regexec.c
-index cdaa95cce..4cea7d280 100644
+index cdaa95cce5..4cea7d2801 100644
 --- a/regexec.c
 +++ b/regexec.c
 @@ -127,13 +127,16 @@ static const char* const non_utf8_target_but_utf8_required
@@ -62,7 +62,7 @@ index cdaa95cce..4cea7d280 100644
          if (!start_point)
              goto fail_finish;
 diff --git a/t/re/pat.t b/t/re/pat.t
-index 8652bf65e..f32e5299f 100644
+index 8652bf65e0..f32e5299f7 100644
 --- a/t/re/pat.t
 +++ b/t/re/pat.t
 @@ -23,7 +23,7 @@ BEGIN {
@@ -93,7 +93,7 @@ index 8652bf65e..f32e5299f 100644
  
  1;
 diff --git a/util.c b/util.c
-index 89c44e735..f1315045f 100644
+index 89c44e735d..f1315045fa 100644
 --- a/util.c
 +++ b/util.c
 @@ -806,6 +806,8 @@ Perl_fbm_instr(pTHX_ unsigned char *big, unsigned char *bigend, SV *littlestr, U
diff --git a/debian/patches/fixes/file_path_chmod_race.diff b/debian/patches/fixes/file_path_chmod_race.diff
index fef19dd5fb..b7d433a4c3 100644
--- a/debian/patches/fixes/file_path_chmod_race.diff
+++ b/debian/patches/fixes/file_path_chmod_race.diff
@@ -16,12 +16,12 @@ Bug: https://rt.cpan.org/Public/Bug/Display.html?id=121951
 Bug-Debian: https://bugs.debian.org/863870
 Patch-Name: fixes/file_path_chmod_race.diff
 ---
- cpan/File-Path/lib/File/Path.pm | 39 +++++++++++++++++++++++++--------------
- cpan/File-Path/t/Path.t         | 40 ++++++++++++++++++++++++++--------------
+ cpan/File-Path/lib/File/Path.pm | 39 ++++++++++++++++++++------------
+ cpan/File-Path/t/Path.t         | 40 +++++++++++++++++++++------------
  2 files changed, 51 insertions(+), 28 deletions(-)
 
 diff --git a/cpan/File-Path/lib/File/Path.pm b/cpan/File-Path/lib/File/Path.pm
-index 034da1e57..a824cc8b7 100644
+index 034da1e578..a824cc8b77 100644
 --- a/cpan/File-Path/lib/File/Path.pm
 +++ b/cpan/File-Path/lib/File/Path.pm
 @@ -354,21 +354,32 @@ sub _rmtree {
@@ -72,7 +72,7 @@ index 034da1e57..a824cc8b7 100644
                      next ROOT_DIR;
                  }
 diff --git a/cpan/File-Path/t/Path.t b/cpan/File-Path/t/Path.t
-index ff52fd69e..956ca09e7 100644
+index ff52fd69e3..956ca09e7b 100644
 --- a/cpan/File-Path/t/Path.t
 +++ b/cpan/File-Path/t/Path.t
 @@ -3,7 +3,7 @@
diff --git a/debian/patches/fixes/file_path_hurd_errno.diff b/debian/patches/fixes/file_path_hurd_errno.diff
index f10082e470..b9901e60a4 100644
--- a/debian/patches/fixes/file_path_hurd_errno.diff
+++ b/debian/patches/fixes/file_path_hurd_errno.diff
@@ -9,7 +9,7 @@ Patch-Name: fixes/file_path_hurd_errno.diff
  1 file changed, 2 insertions(+), 1 deletion(-)
 
 diff --git a/cpan/File-Path/t/Path.t b/cpan/File-Path/t/Path.t
-index 5644f57a5..ff52fd69e 100644
+index 5644f57a51..ff52fd69e3 100644
 --- a/cpan/File-Path/t/Path.t
 +++ b/cpan/File-Path/t/Path.t
 @@ -8,6 +8,7 @@ use Config;
diff --git a/debian/patches/fixes/getopt-long-1.diff b/debian/patches/fixes/getopt-long-1.diff
index aab7c5b6e7..b597daabd2 100644
--- a/debian/patches/fixes/getopt-long-1.diff
+++ b/debian/patches/fixes/getopt-long-1.diff
@@ -16,7 +16,7 @@ Patch-Name: fixes/getopt-long-1.diff
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/cpan/Getopt-Long/lib/Getopt/Long.pm b/cpan/Getopt-Long/lib/Getopt/Long.pm
-index fdc96bd20..631912bf9 100644
+index fdc96bd20c..631912bf91 100644
 --- a/cpan/Getopt-Long/lib/Getopt/Long.pm
 +++ b/cpan/Getopt-Long/lib/Getopt/Long.pm
 @@ -1112,7 +1112,7 @@ sub FindOption ($$$$$) {
diff --git a/debian/patches/fixes/getopt-long-2.diff b/debian/patches/fixes/getopt-long-2.diff
index 51138b5866..49b465fb3a 100644
--- a/debian/patches/fixes/getopt-long-2.diff
+++ b/debian/patches/fixes/getopt-long-2.diff
@@ -15,7 +15,7 @@ Patch-Name: fixes/getopt-long-2.diff
  1 file changed, 15 insertions(+), 4 deletions(-)
 
 diff --git a/cpan/Getopt-Long/lib/Getopt/Long.pm b/cpan/Getopt-Long/lib/Getopt/Long.pm
-index 631912bf9..68f090bee 100644
+index 631912bf91..68f090bee7 100644
 --- a/cpan/Getopt-Long/lib/Getopt/Long.pm
 +++ b/cpan/Getopt-Long/lib/Getopt/Long.pm
 @@ -1110,9 +1110,17 @@ sub FindOption ($$$$$) {
diff --git a/debian/patches/fixes/getopt-long-3.diff b/debian/patches/fixes/getopt-long-3.diff
index a6b6e6970c..9a352a3431 100644
--- a/debian/patches/fixes/getopt-long-3.diff
+++ b/debian/patches/fixes/getopt-long-3.diff
@@ -19,7 +19,7 @@ Patch-Name: fixes/getopt-long-3.diff
  1 file changed, 7 insertions(+), 2 deletions(-)
 
 diff --git a/cpan/Getopt-Long/lib/Getopt/Long.pm b/cpan/Getopt-Long/lib/Getopt/Long.pm
-index 68f090bee..9992578aa 100644
+index 68f090bee7..9992578aa8 100644
 --- a/cpan/Getopt-Long/lib/Getopt/Long.pm
 +++ b/cpan/Getopt-Long/lib/Getopt/Long.pm
 @@ -1120,8 +1120,13 @@ sub FindOption ($$$$$) {
diff --git a/debian/patches/fixes/getopt-long-4.diff b/debian/patches/fixes/getopt-long-4.diff
index 4209845dfd..05d4a7e41e 100644
--- a/debian/patches/fixes/getopt-long-4.diff
+++ b/debian/patches/fixes/getopt-long-4.diff
@@ -12,7 +12,7 @@ Patch-Name: fixes/getopt-long-4.diff
  1 file changed, 6 insertions(+)
 
 diff --git a/cpan/Getopt-Long/lib/Getopt/Long.pm b/cpan/Getopt-Long/lib/Getopt/Long.pm
-index 9992578aa..e71fee8d8 100644
+index 9992578aa8..e71fee8d83 100644
 --- a/cpan/Getopt-Long/lib/Getopt/Long.pm
 +++ b/cpan/Getopt-Long/lib/Getopt/Long.pm
 @@ -1121,6 +1121,12 @@ sub FindOption ($$$$$) {
diff --git a/debian/patches/fixes/hurd_hints.diff b/debian/patches/fixes/hurd_hints.diff
index ce4c833ed1..9cc07fad7c 100644
--- a/debian/patches/fixes/hurd_hints.diff
+++ b/debian/patches/fixes/hurd_hints.diff
@@ -16,7 +16,7 @@ Patch-Name: fixes/hurd_hints.diff
  1 file changed, 29 insertions(+), 4 deletions(-)
 
 diff --git a/hints/gnu.sh b/hints/gnu.sh
-index fe251cbc9..8ec947018 100644
+index fe251cbc90..8ec9470183 100644
 --- a/hints/gnu.sh
 +++ b/hints/gnu.sh
 @@ -1,6 +1,5 @@
diff --git a/debian/patches/fixes/hurd_sigaction.diff b/debian/patches/fixes/hurd_sigaction.diff
index b2595ba12f..741673ffad 100644
--- a/debian/patches/fixes/hurd_sigaction.diff
+++ b/debian/patches/fixes/hurd_sigaction.diff
@@ -16,7 +16,7 @@ Patch-Name: fixes/hurd_sigaction.diff
  1 file changed, 3 insertions(+), 1 deletion(-)
 
 diff --git a/ext/POSIX/t/sigaction.t b/ext/POSIX/t/sigaction.t
-index d19341c24..bce3b7661 100644
+index d19341c246..bce3b76615 100644
 --- a/ext/POSIX/t/sigaction.t
 +++ b/ext/POSIX/t/sigaction.t
 @@ -202,7 +202,9 @@ SKIP: {
diff --git a/debian/patches/fixes/io-socket-ip-nov4.diff b/debian/patches/fixes/io-socket-ip-nov4.diff
new file mode 100644
index 0000000000..4284019c5f
--- /dev/null
+++ b/debian/patches/fixes/io-socket-ip-nov4.diff
@@ -0,0 +1,266 @@
+From e5a5e4056884afc8bf630675094fad92e409a30b Mon Sep 17 00:00:00 2001
+From: Dominic Hargreaves <dom@earth.li>
+Date: Wed, 3 Jun 2020 22:38:09 +0100
+Subject: Fix test failures in IO::Socket::IP with an IPv6-only host
+
+This can be tested with:
+
+    # unshare -n
+    # ip li set lo up
+    # ip li add dummy0 type dummy
+    # ip li set dummy0 up
+
+Thanks to Julien Cristau and Niko Tyni for contributing the basis
+of the patch and test instructions.
+
+[Backported to 5.24 with minor changes]
+
+Bug-Debian: https://bugs.debian.org/962019
+Forwarded: https://rt.cpan.org/Ticket/Display.html?id=132760
+Patch-Name: fixes/io-socket-ip-nov4.diff
+---
+ cpan/IO-Socket-IP/t/01local-client-v4.t     | 4 +++-
+ cpan/IO-Socket-IP/t/02local-server-v4.t     | 3 ++-
+ cpan/IO-Socket-IP/t/03local-cross-v4.t      | 3 +++
+ cpan/IO-Socket-IP/t/11sockopts.t            | 5 ++++-
+ cpan/IO-Socket-IP/t/18fdopen.t              | 3 ++-
+ cpan/IO-Socket-IP/t/20subclass.t            | 3 +++
+ cpan/IO-Socket-IP/t/21as-inet.t             | 3 +++
+ cpan/IO-Socket-IP/t/22timeout.t             | 3 +++
+ cpan/IO-Socket-IP/t/30nonblocking-connect.t | 4 +++-
+ 9 files changed, 26 insertions(+), 5 deletions(-)
+
+diff --git a/cpan/IO-Socket-IP/t/01local-client-v4.t b/cpan/IO-Socket-IP/t/01local-client-v4.t
+index 7ab7156993..f6aeac4c3b 100644
+--- a/cpan/IO-Socket-IP/t/01local-client-v4.t
++++ b/cpan/IO-Socket-IP/t/01local-client-v4.t
+@@ -8,7 +8,7 @@ use Test::More;
+ use IO::Socket::IP;
+ 
+ use IO::Socket::INET;
+-use Socket qw( inet_aton inet_ntoa pack_sockaddr_in unpack_sockaddr_in );
++use Socket qw( inet_aton inet_ntoa pack_sockaddr_in unpack_sockaddr_in AI_NUMERICHOST );
+ 
+ # Some odd locations like BSD jails might not like INADDR_LOOPBACK. We'll
+ # establish a baseline first to test against
+@@ -29,12 +29,14 @@ foreach my $socktype (qw( SOCK_STREAM SOCK_DGRAM )) {
+       LocalHost => "127.0.0.1",
+       Type      => Socket->$socktype,
+       Proto     => ( $socktype eq "SOCK_STREAM" ? "tcp" : "udp" ), # Because IO::Socket::INET is stupid and always presumes tcp
++      GetAddrInfoFlags => AI_NUMERICHOST,
+    ) or die "Cannot listen on PF_INET - $@";
+ 
+    my $socket = IO::Socket::IP->new(
+       PeerHost    => "127.0.0.1",
+       PeerService => $testserver->sockport,
+       Type        => Socket->$socktype,
++      GetAddrInfoFlags => AI_NUMERICHOST,
+    );
+ 
+    ok( defined $socket, "IO::Socket::IP->new constructs a $socktype socket" ) or
+diff --git a/cpan/IO-Socket-IP/t/02local-server-v4.t b/cpan/IO-Socket-IP/t/02local-server-v4.t
+index c0d349f573..fb711f08bd 100644
+--- a/cpan/IO-Socket-IP/t/02local-server-v4.t
++++ b/cpan/IO-Socket-IP/t/02local-server-v4.t
+@@ -8,7 +8,7 @@ use Test::More;
+ use IO::Socket::IP;
+ 
+ use IO::Socket::INET;
+-use Socket qw( inet_aton inet_ntoa pack_sockaddr_in unpack_sockaddr_in );
++use Socket qw( inet_aton inet_ntoa pack_sockaddr_in unpack_sockaddr_in AI_NUMERICHOST );
+ 
+ # Some odd locations like BSD jails might not like INADDR_LOOPBACK. We'll
+ # establish a baseline first to test against
+@@ -29,6 +29,7 @@ foreach my $socktype (qw( SOCK_STREAM SOCK_DGRAM )) {
+       LocalHost => "127.0.0.1",
+       LocalPort => "0",
+       Type      => Socket->$socktype,
++      GetAddrInfoFlags => AI_NUMERICHOST,
+    );
+ 
+    ok( defined $testserver, "IO::Socket::IP->new constructs a $socktype socket" ) or
+diff --git a/cpan/IO-Socket-IP/t/03local-cross-v4.t b/cpan/IO-Socket-IP/t/03local-cross-v4.t
+index 8cac72a95b..3e8174ee08 100644
+--- a/cpan/IO-Socket-IP/t/03local-cross-v4.t
++++ b/cpan/IO-Socket-IP/t/03local-cross-v4.t
+@@ -6,6 +6,7 @@ use warnings;
+ use Test::More;
+ 
+ use IO::Socket::IP;
++use Socket qw(AI_NUMERICHOST);
+ 
+ foreach my $socktype (qw( SOCK_STREAM SOCK_DGRAM )) {
+    my $testserver = IO::Socket::IP->new(
+@@ -13,12 +14,14 @@ foreach my $socktype (qw( SOCK_STREAM SOCK_DGRAM )) {
+       LocalHost => "127.0.0.1",
+       LocalPort => "0",
+       Type      => Socket->$socktype,
++      GetAddrInfoFlags => AI_NUMERICHOST,
+    ) or die "Cannot listen on PF_INET - $@";
+ 
+    my $socket = IO::Socket::IP->new(
+       PeerHost    => "127.0.0.1",
+       PeerService => $testserver->sockport,
+       Type        => Socket->$socktype,
++      GetAddrInfoFlags => AI_NUMERICHOST,
+    ) or die "Cannot connect on PF_INET - $@";
+ 
+    my $testclient = ( $socktype eq "SOCK_STREAM" ) ? 
+diff --git a/cpan/IO-Socket-IP/t/11sockopts.t b/cpan/IO-Socket-IP/t/11sockopts.t
+index 90f92ae7bd..856ff28f4e 100644
+--- a/cpan/IO-Socket-IP/t/11sockopts.t
++++ b/cpan/IO-Socket-IP/t/11sockopts.t
+@@ -8,7 +8,7 @@ use Test::More;
+ use IO::Socket::IP;
+ 
+ use Errno qw( EACCES );
+-use Socket qw( SOL_SOCKET SO_REUSEADDR SO_REUSEPORT SO_BROADCAST );
++use Socket qw( SOL_SOCKET SO_REUSEADDR SO_REUSEPORT SO_BROADCAST AI_NUMERICHOST);
+ 
+ TODO: {
+    local $TODO = "SO_REUSEADDR doesn't appear to work on cygwin smokers" if $^O eq "cygwin";
+@@ -21,6 +21,7 @@ TODO: {
+       Type      => SOCK_STREAM,
+       Listen    => 1,
+       ReuseAddr => 1,
++      GetAddrInfoFlags => AI_NUMERICHOST,
+    ) or die "Cannot socket() - $@";
+ 
+    ok( $sock->getsockopt( SOL_SOCKET, SO_REUSEADDR ), 'SO_REUSEADDR set' );
+@@ -39,6 +40,7 @@ SKIP: {
+       Type      => SOCK_STREAM,
+       Listen    => 1,
+       ReusePort => 1,
++      GetAddrInfoFlags => AI_NUMERICHOST,
+    ) or die "Cannot socket() - $@";
+ 
+    ok( $sock->getsockopt( SOL_SOCKET, SO_REUSEPORT ), 'SO_REUSEPORT set' );
+@@ -51,6 +53,7 @@ SKIP: {
+       LocalHost => "127.0.0.1",
+       Type      => SOCK_DGRAM,
+       Broadcast => 1,
++      GetAddrInfoFlags => AI_NUMERICHOST,
+    );
+    skip "Privileges required to set broadcast on datagram socket", 1 if !$sock and $! == EACCES;
+    die "Cannot socket() - $@" unless $sock;
+diff --git a/cpan/IO-Socket-IP/t/18fdopen.t b/cpan/IO-Socket-IP/t/18fdopen.t
+index 20cbe46d47..6843a2c3d2 100644
+--- a/cpan/IO-Socket-IP/t/18fdopen.t
++++ b/cpan/IO-Socket-IP/t/18fdopen.t
+@@ -6,12 +6,13 @@ use warnings;
+ use Test::More;
+ 
+ use IO::Socket::IP;
+-use Socket qw( SOCK_STREAM );
++use Socket qw( SOCK_STREAM AI_NUMERICHOST );
+ 
+ my $s1 = IO::Socket::IP->new(
+    LocalHost => "127.0.0.1",
+    Type      => SOCK_STREAM,
+    Listen    => 1,
++   GetAddrInfoFlags => AI_NUMERICHOST,
+ ) or die "Cannot listen on AF_INET - $@";
+ 
+ my $s2 = IO::Socket::IP->new;
+diff --git a/cpan/IO-Socket-IP/t/20subclass.t b/cpan/IO-Socket-IP/t/20subclass.t
+index 231bd52cab..fbc9cff23e 100644
+--- a/cpan/IO-Socket-IP/t/20subclass.t
++++ b/cpan/IO-Socket-IP/t/20subclass.t
+@@ -6,16 +6,19 @@ use warnings;
+ use Test::More;
+ 
+ use IO::Socket::IP;
++use Socket qw( AI_NUMERICHOST );
+ 
+ my $server = IO::Socket::IP->new(
+    Listen    => 1,
+    LocalHost => "127.0.0.1",
+    LocalPort => 0,
++   GetAddrInfoFlags => AI_NUMERICHOST,
+ ) or die "Cannot listen on PF_INET - $!";
+ 
+ my $client = IO::Socket::IP->new(
+    PeerHost => $server->sockhost,
+    PeerPort => $server->sockport,
++   GetAddrInfoFlags => AI_NUMERICHOST,
+ ) or die "Cannot connect on PF_INET - $!";
+ 
+ my $accepted = $server->accept( 'MySubclass' )
+diff --git a/cpan/IO-Socket-IP/t/21as-inet.t b/cpan/IO-Socket-IP/t/21as-inet.t
+index 2b8713d46f..fedb8be538 100644
+--- a/cpan/IO-Socket-IP/t/21as-inet.t
++++ b/cpan/IO-Socket-IP/t/21as-inet.t
+@@ -6,16 +6,19 @@ use warnings;
+ use Test::More;
+ 
+ use IO::Socket::IP;
++use Socket qw( AI_NUMERICHOST );
+ 
+ my $server = IO::Socket::IP->new(
+    Listen    => 1,
+    LocalHost => "127.0.0.1",
+    LocalPort => 0,
++   GetAddrInfoFlags => AI_NUMERICHOST,
+ ) or die "Cannot listen on PF_INET - $!";
+ 
+ my $client = IO::Socket::IP->new(
+    PeerHost => $server->sockhost,
+    PeerPort => $server->sockport,
++   GetAddrInfoFlags => AI_NUMERICHOST,
+ ) or die "Cannot connect on PF_INET - $!";
+ 
+ my $accepted = $server->accept
+diff --git a/cpan/IO-Socket-IP/t/22timeout.t b/cpan/IO-Socket-IP/t/22timeout.t
+index a4c28b3af0..c4a08f5d1f 100644
+--- a/cpan/IO-Socket-IP/t/22timeout.t
++++ b/cpan/IO-Socket-IP/t/22timeout.t
+@@ -6,17 +6,20 @@ use warnings;
+ use Test::More;
+ 
+ use IO::Socket::IP;
++use Socket qw( AI_NUMERICHOST );
+ 
+ my $server = IO::Socket::IP->new(
+    Listen    => 1,
+    LocalHost => "127.0.0.1",
+    LocalPort => 0,
++   GetAddrInfoFlags => AI_NUMERICHOST,
+ ) or die "Cannot listen on PF_INET - $!";
+ 
+ my $client = IO::Socket::IP->new(
+    PeerHost => $server->sockhost,
+    PeerPort => $server->sockport,
+    Timeout  => 0.1,
++   GetAddrInfoFlags => AI_NUMERICHOST,
+ ) or die "Cannot connect on PF_INET - $!";
+ 
+ ok( defined $client, 'client constructed with Timeout' );
+diff --git a/cpan/IO-Socket-IP/t/30nonblocking-connect.t b/cpan/IO-Socket-IP/t/30nonblocking-connect.t
+index 518bd2ebd8..ade8349354 100644
+--- a/cpan/IO-Socket-IP/t/30nonblocking-connect.t
++++ b/cpan/IO-Socket-IP/t/30nonblocking-connect.t
+@@ -8,7 +8,7 @@ use Test::More;
+ use IO::Socket::IP;
+ 
+ use IO::Socket::INET;
+-use Socket qw( inet_aton inet_ntoa pack_sockaddr_in unpack_sockaddr_in );
++use Socket qw( inet_aton inet_ntoa pack_sockaddr_in unpack_sockaddr_in AI_NUMERICHOST );
+ use Errno qw( EINPROGRESS EWOULDBLOCK );
+ 
+ # Some odd locations like BSD jails might not like INADDR_LOOPBACK. We'll
+@@ -27,6 +27,7 @@ my $testserver = IO::Socket::INET->new(
+    Listen    => 1,
+    LocalHost => "127.0.0.1",
+    Type      => SOCK_STREAM,
++   GetAddrInfoFlags => AI_NUMERICHOST,
+ ) or die "Cannot listen on PF_INET - $@";
+ 
+ my $socket = IO::Socket::IP->new(
+@@ -34,6 +35,7 @@ my $socket = IO::Socket::IP->new(
+    PeerService => $testserver->sockport,
+    Type        => SOCK_STREAM,
+    Blocking    => 0,
++   GetAddrInfoFlags => AI_NUMERICHOST,
+ );
+ 
+ ok( defined $socket, 'IO::Socket::IP->new( Blocking => 0 ) constructs a socket' ) or
diff --git a/debian/patches/fixes/list_assign_leak.diff b/debian/patches/fixes/list_assign_leak.diff
index 4297179ff5..332461d85f 100644
--- a/debian/patches/fixes/list_assign_leak.diff
+++ b/debian/patches/fixes/list_assign_leak.diff
@@ -58,7 +58,7 @@ Patch-Name: fixes/list_assign_leak.diff
  1 file changed, 2 insertions(+), 1 deletion(-)
 
 diff --git a/pp_hot.c b/pp_hot.c
-index d6cb1aa09..243f43a97 100644
+index d6cb1aa091..243f43a972 100644
 --- a/pp_hot.c
 +++ b/pp_hot.c
 @@ -1181,6 +1181,7 @@ S_aassign_copy_common(pTHX_ SV **firstlelem, SV **lastlelem,
diff --git a/debian/patches/fixes/longdblinf-randomness.diff b/debian/patches/fixes/longdblinf-randomness.diff
index 726404866c..c45c063b5c 100644
--- a/debian/patches/fixes/longdblinf-randomness.diff
+++ b/debian/patches/fixes/longdblinf-randomness.diff
@@ -18,7 +18,7 @@ Patch-Name: fixes/longdblinf-randomness.diff
  1 file changed, 6 insertions(+), 8 deletions(-)
 
 diff --git a/Configure b/Configure
-index 42f7c21da..bdb243640 100755
+index 42f7c21da7..bdb2436409 100755
 --- a/Configure
 +++ b/Configure
 @@ -20470,8 +20470,8 @@ $cat >try.c <<EOP
diff --git a/debian/patches/fixes/math_complex_doc_angle_units.diff b/debian/patches/fixes/math_complex_doc_angle_units.diff
index 92933e4bec..2e8ceacb91 100644
--- a/debian/patches/fixes/math_complex_doc_angle_units.diff
+++ b/debian/patches/fixes/math_complex_doc_angle_units.diff
@@ -11,7 +11,7 @@ Patch-Name: fixes/math_complex_doc_angle_units.diff
  1 file changed, 5 insertions(+)
 
 diff --git a/cpan/Math-Complex/lib/Math/Trig.pm b/cpan/Math-Complex/lib/Math/Trig.pm
-index acad31ff4..bc7ac780e 100644
+index acad31ff49..bc7ac780e9 100644
 --- a/cpan/Math-Complex/lib/Math/Trig.pm
 +++ b/cpan/Math-Complex/lib/Math/Trig.pm
 @@ -263,6 +263,11 @@ core Perl which defines only the C<sin()> and C<cos()>.  The constant
diff --git a/debian/patches/fixes/math_complex_doc_great_circle.diff b/debian/patches/fixes/math_complex_doc_great_circle.diff
index fede0687cb..483cd9acf5 100644
--- a/debian/patches/fixes/math_complex_doc_great_circle.diff
+++ b/debian/patches/fixes/math_complex_doc_great_circle.diff
@@ -11,7 +11,7 @@ Patch-Name: fixes/math_complex_doc_great_circle.diff
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/cpan/Math-Complex/lib/Math/Trig.pm b/cpan/Math-Complex/lib/Math/Trig.pm
-index 1d9612a41..efc2ff80a 100644
+index 1d9612a41c..efc2ff80ac 100644
 --- a/cpan/Math-Complex/lib/Math/Trig.pm
 +++ b/cpan/Math-Complex/lib/Math/Trig.pm
 @@ -608,7 +608,7 @@ or the midpoint if you know the end points:
diff --git a/debian/patches/fixes/math_complex_doc_see_also.diff b/debian/patches/fixes/math_complex_doc_see_also.diff
index 17fbd54b20..2e588ceb9e 100644
--- a/debian/patches/fixes/math_complex_doc_see_also.diff
+++ b/debian/patches/fixes/math_complex_doc_see_also.diff
@@ -11,7 +11,7 @@ Patch-Name: fixes/math_complex_doc_see_also.diff
  1 file changed, 2 insertions(+)
 
 diff --git a/cpan/Math-Complex/lib/Math/Trig.pm b/cpan/Math-Complex/lib/Math/Trig.pm
-index efc2ff80a..acad31ff4 100644
+index efc2ff80ac..acad31ff49 100644
 --- a/cpan/Math-Complex/lib/Math/Trig.pm
 +++ b/cpan/Math-Complex/lib/Math/Trig.pm
 @@ -743,6 +743,8 @@ an answer instead of giving a fatal runtime error.
diff --git a/debian/patches/fixes/memoize-pod.diff b/debian/patches/fixes/memoize-pod.diff
index 2114dea0e9..caa4bde151 100644
--- a/debian/patches/fixes/memoize-pod.diff
+++ b/debian/patches/fixes/memoize-pod.diff
@@ -11,7 +11,7 @@ Patch-Name: fixes/memoize-pod.diff
  1 file changed, 2 insertions(+), 2 deletions(-)
 
 diff --git a/cpan/Memoize/Memoize.pm b/cpan/Memoize/Memoize.pm
-index f4e6522d4..2f28b361f 100644
+index f4e6522d48..2f28b361f8 100644
 --- a/cpan/Memoize/Memoize.pm
 +++ b/cpan/Memoize/Memoize.pm
 @@ -752,6 +752,8 @@ cache that was populated by the first call.  C<complicated> ends up
diff --git a/debian/patches/fixes/memoize_storable_nstore.diff b/debian/patches/fixes/memoize_storable_nstore.diff
index 15435a210a..3d9d24d823 100644
--- a/debian/patches/fixes/memoize_storable_nstore.diff
+++ b/debian/patches/fixes/memoize_storable_nstore.diff
@@ -53,7 +53,7 @@ Patch-Name: fixes/memoize_storable_nstore.diff
  2 files changed, 21 insertions(+), 5 deletions(-)
 
 diff --git a/cpan/Memoize/Memoize/Storable.pm b/cpan/Memoize/Memoize/Storable.pm
-index 131479729..87876f227 100644
+index 1314797297..87876f227e 100644
 --- a/cpan/Memoize/Memoize/Storable.pm
 +++ b/cpan/Memoize/Memoize/Storable.pm
 @@ -55,7 +55,7 @@ sub DESTROY {
@@ -66,7 +66,7 @@ index 131479729..87876f227 100644
    } else {
      Storable::store($self->{H}, $self->{FILENAME});
 diff --git a/cpan/Memoize/t/tie_storable.t b/cpan/Memoize/t/tie_storable.t
-index de3b8dc26..a62423850 100644
+index de3b8dc26b..a62423850e 100644
 --- a/cpan/Memoize/t/tie_storable.t
 +++ b/cpan/Memoize/t/tie_storable.t
 @@ -31,18 +31,34 @@ if ($@) {
diff --git a/debian/patches/fixes/net_smtp_docs.diff b/debian/patches/fixes/net_smtp_docs.diff
index 968958b917..a5261838fb 100644
--- a/debian/patches/fixes/net_smtp_docs.diff
+++ b/debian/patches/fixes/net_smtp_docs.diff
@@ -12,7 +12,7 @@ Patch-Name: fixes/net_smtp_docs.diff
  1 file changed, 1 insertion(+)
 
 diff --git a/cpan/libnet/lib/Net/SMTP.pm b/cpan/libnet/lib/Net/SMTP.pm
-index 0130a2fd6..05dfbf941 100644
+index 0130a2fd64..05dfbf941b 100644
 --- a/cpan/libnet/lib/Net/SMTP.pm
 +++ b/cpan/libnet/lib/Net/SMTP.pm
 @@ -752,6 +752,7 @@ Net::SMTP will attempt to extract the address from the value passed.
diff --git a/debian/patches/fixes/nntp_docs.diff b/debian/patches/fixes/nntp_docs.diff
index 27dbc0df9e..f1b282280d 100644
--- a/debian/patches/fixes/nntp_docs.diff
+++ b/debian/patches/fixes/nntp_docs.diff
@@ -14,7 +14,7 @@ Patch-Name: fixes/nntp_docs.diff
  1 file changed, 3 insertions(+), 3 deletions(-)
 
 diff --git a/cpan/libnet/lib/Net/NNTP.pm b/cpan/libnet/lib/Net/NNTP.pm
-index 675b1e6a5..e043b3b76 100644
+index 675b1e6a5c..e043b3b763 100644
 --- a/cpan/libnet/lib/Net/NNTP.pm
 +++ b/cpan/libnet/lib/Net/NNTP.pm
 @@ -845,10 +845,10 @@ NNTP server, a value of zero will cause all IO operations to block.
diff --git a/debian/patches/fixes/ok-pod.diff b/debian/patches/fixes/ok-pod.diff
index fdd53f4f1d..9dcec63fb3 100644
--- a/debian/patches/fixes/ok-pod.diff
+++ b/debian/patches/fixes/ok-pod.diff
@@ -11,7 +11,7 @@ Patch-Name: fixes/ok-pod.diff
  1 file changed, 4 insertions(+)
 
 diff --git a/cpan/Test-Simple/lib/ok.pm b/cpan/Test-Simple/lib/ok.pm
-index 02726ac96..9dc9ea235 100644
+index 02726ac964..9dc9ea235b 100644
 --- a/cpan/Test-Simple/lib/ok.pm
 +++ b/cpan/Test-Simple/lib/ok.pm
 @@ -20,6 +20,10 @@ sub import {
diff --git a/debian/patches/fixes/perlbug-linewrap.diff b/debian/patches/fixes/perlbug-linewrap.diff
index 38cae2e262..906546f43b 100644
--- a/debian/patches/fixes/perlbug-linewrap.diff
+++ b/debian/patches/fixes/perlbug-linewrap.diff
@@ -32,7 +32,7 @@ Patch-Name: fixes/perlbug-linewrap.diff
  1 file changed, 12 insertions(+), 1 deletion(-)
 
 diff --git a/utils/perlbug.PL b/utils/perlbug.PL
-index 100bc022e..235313b6d 100644
+index 100bc022e8..235313b6dd 100644
 --- a/utils/perlbug.PL
 +++ b/utils/perlbug.PL
 @@ -77,6 +77,8 @@ BEGIN {
diff --git a/debian/patches/fixes/perlbug-refactor.diff b/debian/patches/fixes/perlbug-refactor.diff
index c61071895a..f2c290728d 100644
--- a/debian/patches/fixes/perlbug-refactor.diff
+++ b/debian/patches/fixes/perlbug-refactor.diff
@@ -16,7 +16,7 @@ Patch-Name: fixes/perlbug-refactor.diff
  1 file changed, 13 insertions(+), 12 deletions(-)
 
 diff --git a/utils/perlbug.PL b/utils/perlbug.PL
-index ae8c34305..100bc022e 100644
+index ae8c343052..100bc022e8 100644
 --- a/utils/perlbug.PL
 +++ b/utils/perlbug.PL
 @@ -835,10 +835,7 @@ EOF
diff --git a/debian/patches/fixes/perlfunc_inc_doc.diff b/debian/patches/fixes/perlfunc_inc_doc.diff
index 10384da68b..b4071a7277 100644
--- a/debian/patches/fixes/perlfunc_inc_doc.diff
+++ b/debian/patches/fixes/perlfunc_inc_doc.diff
@@ -12,7 +12,7 @@ Patch-Name: fixes/perlfunc_inc_doc.diff
  1 file changed, 19 insertions(+), 9 deletions(-)
 
 diff --git a/pod/perlfunc.pod b/pod/perlfunc.pod
-index e9c7038a9..09c9b6a3e 100644
+index e9c7038a9c..09c9b6a3ea 100644
 --- a/pod/perlfunc.pod
 +++ b/pod/perlfunc.pod
 @@ -1808,20 +1808,30 @@ X<do>
diff --git a/debian/patches/fixes/respect_umask.diff b/debian/patches/fixes/respect_umask.diff
index 73d472cc11..035ff27f10 100644
--- a/debian/patches/fixes/respect_umask.diff
+++ b/debian/patches/fixes/respect_umask.diff
@@ -8,12 +8,12 @@ site directories.
 
 Patch-Name: fixes/respect_umask.diff
 ---
- cpan/ExtUtils-Install/lib/ExtUtils/Install.pm   | 18 +++++++++---------
- cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm | 18 +++++++++---------
+ cpan/ExtUtils-Install/lib/ExtUtils/Install.pm  | 18 +++++++++---------
+ .../ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm | 18 +++++++++---------
  2 files changed, 18 insertions(+), 18 deletions(-)
 
 diff --git a/cpan/ExtUtils-Install/lib/ExtUtils/Install.pm b/cpan/ExtUtils-Install/lib/ExtUtils/Install.pm
-index 1e8ac4cd1..3e79121f3 100644
+index 1e8ac4cd12..3e79121f38 100644
 --- a/cpan/ExtUtils-Install/lib/ExtUtils/Install.pm
 +++ b/cpan/ExtUtils-Install/lib/ExtUtils/Install.pm
 @@ -451,7 +451,7 @@ sub _can_write_dir {
@@ -88,7 +88,7 @@ index 1e8ac4cd1..3e79121f3 100644
          if ($need_filtering) {
              run_filter($pm_filter, $from, $to);
 diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm
-index 009b18ee0..1f4542e9d 100644
+index 009b18ee08..1f4542e9da 100644
 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm
 +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm
 @@ -2119,7 +2119,7 @@ doc__install : doc_site_install
diff --git a/debian/patches/fixes/test-builder-warning.diff b/debian/patches/fixes/test-builder-warning.diff
index 137be9cdc2..4cfd4884eb 100644
--- a/debian/patches/fixes/test-builder-warning.diff
+++ b/debian/patches/fixes/test-builder-warning.diff
@@ -18,7 +18,7 @@ Patch-Name: fixes/test-builder-warning.diff
  1 file changed, 1 insertion(+)
 
 diff --git a/cpan/Test-Simple/lib/Test/Builder.pm b/cpan/Test-Simple/lib/Test/Builder.pm
-index a8e7bd95b..c1dba1c66 100644
+index a8e7bd95b1..c1dba1c66b 100644
 --- a/cpan/Test-Simple/lib/Test/Builder.pm
 +++ b/cpan/Test-Simple/lib/Test/Builder.pm
 @@ -2246,6 +2246,7 @@ sub find_TODO {
diff --git a/debian/patches/fixes/time-local-2020.diff b/debian/patches/fixes/time-local-2020.diff
index b5aa2bd2fc..38f8ba84f3 100644
--- a/debian/patches/fixes/time-local-2020.diff
+++ b/debian/patches/fixes/time-local-2020.diff
@@ -17,7 +17,7 @@ Patch-Name: fixes/time-local-2020.diff
  1 file changed, 5 insertions(+), 6 deletions(-)
 
 diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t
-index 472e71a2d..0a852a0f4 100644
+index 472e71a2df..0a852a0f45 100644
 --- a/cpan/Time-Local/t/Local.t
 +++ b/cpan/Time-Local/t/Local.t
 @@ -91,7 +91,7 @@ for (@time, @neg_time) {
diff --git a/debian/patches/fixes/time_piece_doc.diff b/debian/patches/fixes/time_piece_doc.diff
index 385c9dbfd6..0f4fbb0ded 100644
--- a/debian/patches/fixes/time_piece_doc.diff
+++ b/debian/patches/fixes/time_piece_doc.diff
@@ -14,7 +14,7 @@ Patch-Name: fixes/time_piece_doc.diff
  1 file changed, 2 insertions(+), 2 deletions(-)
 
 diff --git a/cpan/Time-Piece/Piece.pm b/cpan/Time-Piece/Piece.pm
-index 6dbf4d69c..d3b62ce5f 100644
+index 6dbf4d69c4..d3b62ce5fb 100644
 --- a/cpan/Time-Piece/Piece.pm
 +++ b/cpan/Time-Piece/Piece.pm
 @@ -783,8 +783,8 @@ days, weeks and years in that delta, using the Time::Seconds API.
diff --git a/debian/patches/series b/debian/patches/series
index 7b287d0df9..9c3b37d4e1 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -84,3 +84,7 @@ fixes/CVE-2018-18312.diff
 fixes/CVE-2018-18313.diff
 fixes/CVE-2018-18314.diff
 fixes/time-local-2020.diff
+fixes/CVE-2020-10543.diff
+fixes/CVE-2020-10878.diff
+fixes/CVE-2020-12723.diff
+fixes/io-socket-ip-nov4.diff
diff --git a/embed.fnc b/embed.fnc
index a64ffbac74..2edd180504 100644
--- a/embed.fnc
+++ b/embed.fnc
@@ -2242,7 +2242,8 @@ Es	|SSize_t|study_chunk	|NN RExC_state_t *pRExC_state \
 				|NULLOK struct scan_data_t *data \
                                 |I32 stopparen|U32 recursed_depth \
 				|NULLOK regnode_ssc *and_withp \
-				|U32 flags|U32 depth
+				|U32 flags|U32 depth|bool was_mutate_ok
+Es	|void	|rck_elide_nothing|NN regnode *node
 EsRn	|U32	|add_data	|NN RExC_state_t* const pRExC_state \
 				|NN const char* const s|const U32 n
 rs	|void	|re_croak2	|bool utf8|NN const char* pat1|NN const char* pat2|...
diff --git a/embed.h b/embed.h
index 42c65b2eb0..abf07d2b90 100644
--- a/embed.h
+++ b/embed.h
@@ -1026,6 +1026,7 @@
 #define output_or_return_posix_warnings(a,b,c)	S_output_or_return_posix_warnings(aTHX_ a,b,c)
 #define parse_lparen_question_flags(a)	S_parse_lparen_question_flags(aTHX_ a)
 #define populate_ANYOF_from_invlist(a,b)	S_populate_ANYOF_from_invlist(aTHX_ a,b)
+#define rck_elide_nothing(a)	S_rck_elide_nothing(aTHX_ a)
 #define reg(a,b,c,d)		S_reg(aTHX_ a,b,c,d)
 #define reg2Lanode(a,b,c,d)	S_reg2Lanode(aTHX_ a,b,c,d)
 #define reg_node(a,b)		S_reg_node(aTHX_ a,b)
@@ -1056,7 +1057,7 @@
 #define ssc_is_cp_posixl_init	S_ssc_is_cp_posixl_init
 #define ssc_or(a,b,c)		S_ssc_or(aTHX_ a,b,c)
 #define ssc_union(a,b,c)	S_ssc_union(aTHX_ a,b,c)
-#define study_chunk(a,b,c,d,e,f,g,h,i,j,k)	S_study_chunk(aTHX_ a,b,c,d,e,f,g,h,i,j,k)
+#define study_chunk(a,b,c,d,e,f,g,h,i,j,k,l)	S_study_chunk(aTHX_ a,b,c,d,e,f,g,h,i,j,k,l)
 #  endif
 #  if defined(PERL_IN_REGCOMP_C) || defined (PERL_IN_DUMP_C)
 #define _invlist_dump(a,b,c,d)	Perl__invlist_dump(aTHX_ a,b,c,d)
diff --git a/proto.h b/proto.h
index fb4ee29508..bb73098af4 100644
--- a/proto.h
+++ b/proto.h
@@ -4821,6 +4821,9 @@ STATIC void	S_parse_lparen_question_flags(pTHX_ RExC_state_t *pRExC_state);
 STATIC void	S_populate_ANYOF_from_invlist(pTHX_ regnode *node, SV** invlist_ptr);
 #define PERL_ARGS_ASSERT_POPULATE_ANYOF_FROM_INVLIST	\
 	assert(node); assert(invlist_ptr)
+STATIC void	S_rck_elide_nothing(pTHX_ regnode *node);
+#define PERL_ARGS_ASSERT_RCK_ELIDE_NOTHING	\
+	assert(node)
 PERL_STATIC_NO_RET void	S_re_croak2(pTHX_ bool utf8, const char* pat1, const char* pat2, ...)
 			__attribute__noreturn__;
 #define PERL_ARGS_ASSERT_RE_CROAK2	\
@@ -4920,7 +4923,7 @@ STATIC void	S_ssc_or(pTHX_ const RExC_state_t *pRExC_state, regnode_ssc *ssc, co
 PERL_STATIC_INLINE void	S_ssc_union(pTHX_ regnode_ssc *ssc, SV* const invlist, const bool invert_2nd);
 #define PERL_ARGS_ASSERT_SSC_UNION	\
 	assert(ssc); assert(invlist)
-STATIC SSize_t	S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp, SSize_t *minlenp, SSize_t *deltap, regnode *last, struct scan_data_t *data, I32 stopparen, U32 recursed_depth, regnode_ssc *and_withp, U32 flags, U32 depth);
+STATIC SSize_t	S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp, SSize_t *minlenp, SSize_t *deltap, regnode *last, struct scan_data_t *data, I32 stopparen, U32 recursed_depth, regnode_ssc *and_withp, U32 flags, U32 depth, bool was_mutate_ok);
 #define PERL_ARGS_ASSERT_STUDY_CHUNK	\
 	assert(pRExC_state); assert(scanp); assert(minlenp); assert(deltap); assert(last)
 #endif
diff --git a/regcomp.c b/regcomp.c
index ab2c236ec2..28857eab70 100644
--- a/regcomp.c
+++ b/regcomp.c
@@ -119,6 +119,7 @@ typedef struct scan_frame {
     U32 prev_recursed_depth;
     I32 stopparen;              /* what stopparen do we use */
     U32 is_top_frame;           /* what flags do we use? */
+    bool in_gosub;              /* this or an outer frame is for GOSUB */
 
     struct scan_frame *this_prev_frame; /* this previous frame */
     struct scan_frame *prev_frame;      /* previous frame */
@@ -4077,7 +4078,7 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp,
 			I32 stopparen,
                         U32 recursed_depth,
 			regnode_ssc *and_withp,
-			U32 flags, U32 depth)
+			U32 flags, U32 depth, bool was_mutate_ok)
 			/* scanp: Start here (read-write). */
 			/* deltap: Write maxlen-minlen here. */
 			/* last: Stop before this one. */
@@ -4153,6 +4154,10 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp,
                                    node length to get a real minimum (because
                                    the folded version may be shorter) */
 	bool unfolded_multi_char = FALSE;
+        /* avoid mutating ops if we are anywhere within the recursed or
+         * enframed handling for a GOSUB: the outermost level will handle it.
+         */
+        bool mutate_ok = was_mutate_ok && !(frame && frame->in_gosub);
 	/* Peephole optimizer: */
         DEBUG_STUDYDATA("Peep:", data, depth);
         DEBUG_PEEP("Peep", scan, depth);
@@ -4163,30 +4168,13 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp,
          * parsing code, as each (?:..) is handled by a different invocation of
          * reg() -- Yves
          */
-        JOIN_EXACT(scan,&min_subtract, &unfolded_multi_char, 0);
-
-	/* Follow the next-chain of the current node and optimize
-	   away all the NOTHINGs from it.  */
-	if (OP(scan) != CURLYX) {
-	    const int max = (reg_off_by_arg[OP(scan)]
-		       ? I32_MAX
-		       /* I32 may be smaller than U16 on CRAYs! */
-		       : (I32_MAX < U16_MAX ? I32_MAX : U16_MAX));
-	    int off = (reg_off_by_arg[OP(scan)] ? ARG(scan) : NEXT_OFF(scan));
-	    int noff;
-	    regnode *n = scan;
-
-	    /* Skip NOTHING and LONGJMP. */
-	    while ((n = regnext(n))
-		   && ((PL_regkind[OP(n)] == NOTHING && (noff = NEXT_OFF(n)))
-		       || ((OP(n) == LONGJMP) && (noff = ARG(n))))
-		   && off + noff < max)
-		off += noff;
-	    if (reg_off_by_arg[OP(scan)])
-		ARG(scan) = off;
-	    else
-		NEXT_OFF(scan) = off;
-	}
+        if (mutate_ok)
+            JOIN_EXACT(scan,&min_subtract, &unfolded_multi_char, 0);
+
+        /* Follow the next-chain of the current node and optimize
+           away all the NOTHINGs from it.
+         */
+        rck_elide_nothing(scan);
 
 	/* The principal pseudo-switch.  Cannot be a switch, since we
 	   look into several different things.  */
@@ -4212,7 +4200,7 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp,
              * NOTE we dont use the return here! */
             (void)study_chunk(pRExC_state, &scan, &minlen,
                               &deltanext, next, &data_fake, stopparen,
-                              recursed_depth, NULL, f, depth+1);
+                              recursed_depth, NULL, f, depth+1, mutate_ok);
 
             scan = next;
         } else
@@ -4279,7 +4267,8 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp,
 		    /* we suppose the run is continuous, last=next...*/
 		    minnext = study_chunk(pRExC_state, &scan, minlenp,
                                       &deltanext, next, &data_fake, stopparen,
-                                      recursed_depth, NULL, f,depth+1);
+                                      recursed_depth, NULL, f, depth+1,
+                                      mutate_ok);
 
 		    if (min1 > minnext)
 			min1 = minnext;
@@ -4346,9 +4335,10 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp,
 		    }
 		}
 
-                if (PERL_ENABLE_TRIE_OPTIMISATION &&
-                        OP( startbranch ) == BRANCH )
-                {
+                if (PERL_ENABLE_TRIE_OPTIMISATION
+                    && OP(startbranch) == BRANCH
+                    && mutate_ok
+                ) {
 		/* demq.
 
                    Assuming this was/is a branch we are dealing with: 'scan'
@@ -4799,6 +4789,9 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp,
                 newframe->stopparen = stopparen;
                 newframe->prev_recursed_depth = recursed_depth;
                 newframe->this_prev_frame= frame;
+                newframe->in_gosub = (
+                    (frame && frame->in_gosub) || OP(scan) == GOSUB
+                );
 
                 DEBUG_STUDYDATA("frame-new:",data,depth);
                 DEBUG_PEEP("fnew", scan, depth);
@@ -5017,7 +5010,7 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp,
                                   (mincount == 0
                                    ? (f & ~SCF_DO_SUBSTR)
                                    : f)
-                                  ,depth+1);
+                                  , depth+1, mutate_ok);
 
 		if (flags & SCF_DO_STCLASS)
 		    data->start_class = oclass;
@@ -5065,6 +5058,12 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp,
 		    (void)ReREFCNT_inc(RExC_rx_sv);
 		}
 
+                if ( ( minnext > 0 && mincount >= SSize_t_MAX / minnext )
+                    || min >= SSize_t_MAX - minnext * mincount )
+                {
+                    FAIL("Regexp out of space");
+                }
+
 		min += minnext * mincount;
 		is_inf_internal |= deltanext == SSize_t_MAX
                          || (maxcount == REG_INFTY && minnext + deltanext > 0);
@@ -5079,7 +5078,9 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp,
 		if (  OP(oscan) == CURLYX && data
 		      && data->flags & SF_IN_PAR
 		      && !(data->flags & SF_HAS_EVAL)
-		      && !deltanext && minnext == 1 ) {
+		      && !deltanext && minnext == 1
+                      && mutate_ok
+                ) {
 		    /* Try to optimize to CURLYN.  */
 		    regnode *nxt = NEXTOPER(oscan) + EXTRA_STEP_2ARGS;
 		    regnode * const nxt1 = nxt;
@@ -5125,10 +5126,10 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp,
 		      && !(data->flags & SF_HAS_EVAL)
 		      && !deltanext	/* atom is fixed width */
 		      && minnext != 0	/* CURLYM can't handle zero width */
-
                          /* Nor characters whose fold at run-time may be
                           * multi-character */
                       && ! (RExC_seen & REG_UNFOLDED_MULTI_SEEN)
+                      && mutate_ok
 		) {
 		    /* XXXX How to optimize if data == 0? */
 		    /* Optimize to a simpler form.  */
@@ -5175,7 +5176,8 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp,
 #endif
 			/* Optimize again: */
 			study_chunk(pRExC_state, &nxt1, minlenp, &deltanext, nxt,
-                                    NULL, stopparen, recursed_depth, NULL, 0,depth+1);
+                                    NULL, stopparen, recursed_depth, NULL, 0,
+                                    depth+1, mutate_ok);
 		    }
 		    else
 			oscan->flags = 0;
@@ -5296,11 +5298,7 @@ Perl_re_printf( aTHX_  "LHS=%"UVuf" RHS=%"UVuf"\n",
 		if (data && (fl & SF_HAS_EVAL))
 		    data->flags |= SF_HAS_EVAL;
 	      optimize_curly_tail:
-		if (OP(oscan) != CURLYX) {
-		    while (PL_regkind[OP(next = regnext(oscan))] == NOTHING
-			   && NEXT_OFF(next))
-			NEXT_OFF(oscan) += NEXT_OFF(next);
-		}
+		rck_elide_nothing(oscan);
 		continue;
 
 	    default:
@@ -5560,7 +5558,8 @@ Perl_re_printf( aTHX_  "LHS=%"UVuf" RHS=%"UVuf"\n",
                 nscan = NEXTOPER(NEXTOPER(scan));
                 minnext = study_chunk(pRExC_state, &nscan, minlenp, &deltanext,
                                       last, &data_fake, stopparen,
-                                      recursed_depth, NULL, f, depth+1);
+                                      recursed_depth, NULL, f, depth+1,
+                                      mutate_ok);
                 if (scan->flags) {
                     if (deltanext) {
 			FAIL("Variable length lookbehind not implemented");
@@ -5649,7 +5648,7 @@ Perl_re_printf( aTHX_  "LHS=%"UVuf" RHS=%"UVuf"\n",
                 *minnextp = study_chunk(pRExC_state, &nscan, minnextp,
                                         &deltanext, last, &data_fake,
                                         stopparen, recursed_depth, NULL,
-                                        f,depth+1);
+                                        f, depth+1, mutate_ok);
                 if (scan->flags) {
                     if (deltanext) {
 			FAIL("Variable length lookbehind not implemented");
@@ -5809,7 +5808,8 @@ Perl_re_printf( aTHX_  "LHS=%"UVuf" RHS=%"UVuf"\n",
                            branches even though they arent otherwise used. */
                         minnext = study_chunk(pRExC_state, &scan, minlenp,
                             &deltanext, (regnode *)nextbranch, &data_fake,
-                            stopparen, recursed_depth, NULL, f,depth+1);
+                            stopparen, recursed_depth, NULL, f, depth+1,
+                            mutate_ok);
                     }
                     if (nextbranch && PL_regkind[OP(nextbranch)]==BRANCH)
                         nextbranch= regnext((regnode*)nextbranch);
@@ -6150,6 +6150,44 @@ S_pat_upgrade_to_utf8(pTHX_ RExC_state_t * const pRExC_state,
     RExC_orig_utf8 = RExC_utf8 = 1;
 }
 
+/* Follow the next-chain of the current node and optimize away
+   all the NOTHINGs from it.
+ */
+STATIC void
+S_rck_elide_nothing(pTHX_ regnode *node)
+{
+    dVAR;
+
+    PERL_ARGS_ASSERT_RCK_ELIDE_NOTHING;
+
+    if (OP(node) != CURLYX) {
+        const int max = (reg_off_by_arg[OP(node)]
+                        ? I32_MAX
+                          /* I32 may be smaller than U16 on CRAYs! */
+                        : (I32_MAX < U16_MAX ? I32_MAX : U16_MAX));
+        int off = (reg_off_by_arg[OP(node)] ? ARG(node) : NEXT_OFF(node));
+        int noff;
+        regnode *n = node;
+
+        /* Skip NOTHING and LONGJMP. */
+        while (
+            (n = regnext(n))
+            && (
+                (PL_regkind[OP(n)] == NOTHING && (noff = NEXT_OFF(n)))
+                || ((OP(n) == LONGJMP) && (noff = ARG(n)))
+            )
+            && off + noff < max
+        ) {
+            off += noff;
+        }
+        if (reg_off_by_arg[OP(node)])
+            ARG(node) = off;
+        else
+            NEXT_OFF(node) = off;
+    }
+    return;
+}
+
 
 
 /* S_concat_pat(): concatenate a list of args to the pattern string pat,
@@ -7458,7 +7496,7 @@ Perl_re_op_compile(pTHX_ SV ** const patternp, int pat_count,
             &data, -1, 0, NULL,
             SCF_DO_SUBSTR | SCF_WHILEM_VISITED_POS | stclass_flag
                           | (restudied ? SCF_TRIE_DOING_RESTUDY : 0),
-            0);
+            0, TRUE);
 
 
         CHECK_RESTUDY_GOTO_butfirst(LEAVE_with_name("study_chunk"));
@@ -7604,7 +7642,7 @@ Perl_re_op_compile(pTHX_ SV ** const patternp, int pat_count,
             SCF_DO_STCLASS_AND|SCF_WHILEM_VISITED_POS|(restudied
                                                       ? SCF_TRIE_DOING_RESTUDY
                                                       : 0),
-            0);
+            0, TRUE);
 
         CHECK_RESTUDY_GOTO_butfirst(NOOP);
 
diff --git a/t/re/pat.t b/t/re/pat.t
index f32e5299f7..225d73e166 100644
--- a/t/re/pat.t
+++ b/t/re/pat.t
@@ -23,7 +23,7 @@ BEGIN {
     skip_all_without_unicode_tables();
 }
 
-plan tests => 790;  # Update this when adding/deleting tests.
+plan tests => 794;  # Update this when adding/deleting tests.
 
 run_tests() unless caller;
 
@@ -1769,6 +1769,30 @@ EOP
         ok(scalar($text !~ m{(~*=[a-z]=)}g), "RT #131575");
     }
 
+    # gh16947: test regexp corruption (GOSUB)
+    {
+        fresh_perl_is(q{
+            'xy' =~ /x(?0)|x(?|y|y)/ && print 'ok'
+        }, 'ok', {}, 'gh16947: test regexp corruption (GOSUB)');
+    }
+    # gh16947: test fix doesn't break SUSPEND
+    {
+        fresh_perl_is(q{ 'sx' =~ m{ss++}i; print 'ok' },
+                'ok', {}, "gh16947: test fix doesn't break SUSPEND");
+    }
+
+    # gh17743: more regexp corruption via GOSUB
+    {
+        fresh_perl_is(q{
+            "0" =~ /((0(?0)|000(?|0000|0000)(?0))|)/; print "ok"
+        }, 'ok', {}, 'gh17743: test regexp corruption (1)');
+
+        fresh_perl_is(q{
+            "000000000000" =~ /(0(())(0((?0)())|000(?|\x{ef}\x{bf}\x{bd}|\x{ef}\x{bf}\x{bd}))|)/;
+            print "ok"
+        }, 'ok', {}, 'gh17743: test regexp corruption (2)');
+    }
+
 } # End of sub run_tests
 
 1;

--- End Message ---
--- Begin Message ---
Package: release.debian.org
Version: 9.13

Hi,

All of these requests relate to updates that were included in today's
stretch point release.

Regards,

Adam

--- End Message ---

Reply to: