pkgsrc-Changes archive

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

CVS commit: [pkgsrc-2026Q2] pkgsrc/lang/perl5



Module Name:    pkgsrc
Committed By:   bsiegert
Date:           Sun Aug  9 19:00:15 UTC 2026

Modified Files:
        pkgsrc/lang/perl5 [pkgsrc-2026Q2]: Makefile Makefile.common distinfo
        pkgsrc/lang/perl5/patches [pkgsrc-2026Q2]:
            patch-cpan_Archive-Tar_lib_Archive_Tar.pm
            patch-cpan_Socket_Socket.xs patch-dist_Storable_Storable.xs
            patch-pp__pack.c patch-regcomp__study.c

Log Message:
Pullup ticket #7224 - requested by maya
lang/perl5: security fix

(via patch)

perl5: Update to 5.42.3

Updated for security fixes.
Remove local patches backporting security fixes.

Release notes:

Security
CVE-2026-8376 - Buffer overflow in Perl_study_chunk

Perl_study_chunk in regcomp_study.c checked the size of the joined substring buffer in characters rather than bytes. On 32-bit builds, this can lead to an integer overflow of the size of the buffer 
leading to out-of-bounds writes.
CVE-2026-57432 - Buffer overflow in S_measure_struct

If you call pack or unpack to operate on a structure whose computed size is too large to fit in memory, an integer overflow could happen that would result in a buffer overflow. This usually happens 
as a result of embedding a large number as the repeat count for an item.
CVE-2026-13221 - Regex trie 16-bit field overflow

The trie optimization in the regex engine could overflow in an alternation with more than ~65k branches. This could cause both false positives and false negatives on such regular expressions.

Modules and Pragmata
Updated Modules and Pragmata

    Archive::Tar has been upgraded from version 3.04 to 3.12.

    This fixes CVE-2026-9538, CVE-2026-42496, and CVE-2026-42497.

    Compress::Raw::Bzip2 has been upgraded from version 2.213 to 2.218.

    HTTP::Tiny has been upgraded from version 0.090 to 0.096.

    This fixes CVE-2026-7010 and CVE-2026-7017.

    IO::Compress has been upgraded from version 2.213 to 2.223.

    This fixes CVE-2025-15649, CVE-2026-48961, CVE-2026-48962, and CVE-2026-48959.

    Module::CoreList has been upgraded from version 5.20260329_42 to 5.20260802_42.

    Socket has been upgraded from version 2.038 to 2.041.

    This fixes CVE-2026-12087.

    Storable has been upgraded from version 3.37 to 3.37_01.

    This fixes CVE-2026-57433.


To generate a diff of this commit:
cvs rdiff -u -r1.294.2.1 -r1.294.2.2 pkgsrc/lang/perl5/Makefile
cvs rdiff -u -r1.53 -r1.53.2.1 pkgsrc/lang/perl5/Makefile.common
cvs rdiff -u -r1.199.2.1 -r1.199.2.2 pkgsrc/lang/perl5/distinfo
cvs rdiff -u -r1.1 -r1.1.4.1 \
    pkgsrc/lang/perl5/patches/patch-cpan_Archive-Tar_lib_Archive_Tar.pm
cvs rdiff -u -r1.3 -r1.3.2.1 \
    pkgsrc/lang/perl5/patches/patch-cpan_Socket_Socket.xs
cvs rdiff -u -r1.2.2.2 -r1.2.2.3 \
    pkgsrc/lang/perl5/patches/patch-dist_Storable_Storable.xs \
    pkgsrc/lang/perl5/patches/patch-pp__pack.c
cvs rdiff -u -r1.1.4.1 -r1.1.4.2 \
    pkgsrc/lang/perl5/patches/patch-regcomp__study.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: pkgsrc/lang/perl5/Makefile
diff -u pkgsrc/lang/perl5/Makefile:1.294.2.1 pkgsrc/lang/perl5/Makefile:1.294.2.2
--- pkgsrc/lang/perl5/Makefile:1.294.2.1        Thu Jul 16 21:08:19 2026
+++ pkgsrc/lang/perl5/Makefile  Sun Aug  9 19:00:14 2026
@@ -1,10 +1,9 @@
-# $NetBSD: Makefile,v 1.294.2.1 2026/07/16 21:08:19 maya Exp $
+# $NetBSD: Makefile,v 1.294.2.2 2026/08/09 19:00:14 bsiegert Exp $
 
 .include "license.mk"
 .include "Makefile.common"
 
 COMMENT=       Practical Extraction and Report Language
-PKGREVISION=   4
 
 CONFLICTS+=    perl-base-[0-9]* perl-thread-[0-9]*
 

Index: pkgsrc/lang/perl5/Makefile.common
diff -u pkgsrc/lang/perl5/Makefile.common:1.53 pkgsrc/lang/perl5/Makefile.common:1.53.2.1
--- pkgsrc/lang/perl5/Makefile.common:1.53      Mon Mar 30 08:57:15 2026
+++ pkgsrc/lang/perl5/Makefile.common   Sun Aug  9 19:00:14 2026
@@ -1,9 +1,9 @@
-# $NetBSD: Makefile.common,v 1.53 2026/03/30 08:57:15 wiz Exp $
+# $NetBSD: Makefile.common,v 1.53.2.1 2026/08/09 19:00:14 bsiegert Exp $
 #
 # used by lang/perl5/Makefile
 # used by databases/p5-gdbm/Makefile
 
-DISTNAME=      perl-5.42.2
+DISTNAME=      perl-5.42.3
 CATEGORIES=    lang devel perl5
 MASTER_SITES=  ${MASTER_SITE_PERL_CPAN:=../../authors/id/S/SH/SHAY/}
 DISTFILES+=    ${DISTNAME}${EXTRACT_SUFX}

Index: pkgsrc/lang/perl5/distinfo
diff -u pkgsrc/lang/perl5/distinfo:1.199.2.1 pkgsrc/lang/perl5/distinfo:1.199.2.2
--- pkgsrc/lang/perl5/distinfo:1.199.2.1        Thu Jul 16 21:08:19 2026
+++ pkgsrc/lang/perl5/distinfo  Sun Aug  9 19:00:14 2026
@@ -1,20 +1,15 @@
-$NetBSD: distinfo,v 1.199.2.1 2026/07/16 21:08:19 maya Exp $
+$NetBSD: distinfo,v 1.199.2.2 2026/08/09 19:00:14 bsiegert Exp $
 
-BLAKE2s (perl-5.42.2.tar.gz) = a2e271ef18aa3cadeed75cf6bf48cfc30b8a9f6675053194f285cd13d97e0791
-SHA512 (perl-5.42.2.tar.gz) = c17925b1146270310fbefd82a98bd94532b499a547f5be005ece204918bfc0034e473a97df643925625a940209f81a65acdd99857b3b18911461571230262c0f
-Size (perl-5.42.2.tar.gz) = 20609653 bytes
+BLAKE2s (perl-5.42.3.tar.gz) = 6461575e459c71899bbe8176e689925098d28cdb22df113a54d058421d360bdb
+SHA512 (perl-5.42.3.tar.gz) = 13f969fae53deb47abacbb49b6d7440eabe696bfd81ed33bb797077db72be1e8c2e9a03c68f5dc9a1551783f35131b52773725800fd67f0160ccd318ba1360ba
+Size (perl-5.42.3.tar.gz) = 20619668 bytes
 SHA1 (patch-Configure) = 7e04b70aefcb66399679582a2f2e95306cf1e47b
 SHA1 (patch-Makefile.SH) = 56203aea57c429a94760f039a978463b8859b0a9
-SHA1 (patch-cpan_Archive-Tar_lib_Archive_Tar.pm) = af896b3c8770d03c851fe1022ed1348857b1b4cc
 SHA1 (patch-cpan_ExtUtils-MakeMaker_lib_ExtUtils_MM__BeOS.pm) = 79e5aeccfa272ca5ec08bffc616d8053ae90ac51
 SHA1 (patch-cpan_ExtUtils-MakeMaker_lib_ExtUtils_MM__Unix.pm) = 996556f221eb0c75c316315462bf6cea6746e030
 SHA1 (patch-cpan_ExtUtils-MakeMaker_t_MM__BeOS.t) = 9b0e7ab85fdab4887b1754599a8879bd7d9f36cc
-SHA1 (patch-cpan_Socket_Socket.xs) = 50613ed2966eb389a6816504d339a2a26276b90f
-SHA1 (patch-dist_Storable_Storable.xs) = 0bc5f182965fe58b91e085119a89ec8ca7b45994
 SHA1 (patch-hints_cygwin.sh) = 5e2e7179336c9bc085bd2e83d22755a235ea1a4a
 SHA1 (patch-hints_linux.sh) = 4baa8f80695687abb53d4f4e1830cf86db5b2bf7
 SHA1 (patch-hints_netbsd.sh) = cb498170c18f1f429eed9be245cd1df24c7ad628
 SHA1 (patch-hints_solaris__2.sh) = 83b20650435ea3b62314af6059f3d82c3dd6b0a2
 SHA1 (patch-installperl) = b129d64cc17b898b44fe6282b8b1df36e342d0ef
-SHA1 (patch-pp__pack.c) = 7217920ed766b126ee3db7f928bdbb889c83d363
-SHA1 (patch-regcomp__study.c) = d9705946924b1f941c6e25c095f54824cee01155

Index: pkgsrc/lang/perl5/patches/patch-cpan_Archive-Tar_lib_Archive_Tar.pm
diff -u pkgsrc/lang/perl5/patches/patch-cpan_Archive-Tar_lib_Archive_Tar.pm:1.1 pkgsrc/lang/perl5/patches/patch-cpan_Archive-Tar_lib_Archive_Tar.pm:1.1.4.1
--- pkgsrc/lang/perl5/patches/patch-cpan_Archive-Tar_lib_Archive_Tar.pm:1.1     Wed May 27 22:35:30 2026
+++ pkgsrc/lang/perl5/patches/patch-cpan_Archive-Tar_lib_Archive_Tar.pm Sun Aug  9 19:00:15 2026
@@ -1,54 +0,0 @@
-$NetBSD: patch-cpan_Archive-Tar_lib_Archive_Tar.pm,v 1.1 2026/05/27 22:35:30 wiz Exp $
-
-Archive::Tar versions before 3.10 for Perl allow memory exhaustion via
-attacker controlled entry size field in tar header.
-https://github.com/jib/archive-tar-new/commit/f9af01426038e29d9578825a0cd3626946ab08c7.patch
-
---- cpan/Archive-Tar/lib/Archive/Tar.pm.orig   2026-01-18 16:32:21.000000000 +0000
-+++ cpan/Archive-Tar/lib/Archive/Tar.pm
-@@ -24,7 +24,7 @@ use vars qw[$DEBUG $error $VERSION $WARN $FOLLOW_SYMLI
- use vars qw[$DEBUG $error $VERSION $WARN $FOLLOW_SYMLINK $CHOWN $CHMOD
-             $DO_NOT_USE_PREFIX $HAS_PERLIO $HAS_IO_STRING $SAME_PERMISSIONS
-             $INSECURE_EXTRACT_MODE $ZERO_PAD_NUMBERS @ISA @EXPORT $RESOLVE_SYMLINK
--            $EXTRACT_BLOCK_SIZE
-+            $EXTRACT_BLOCK_SIZE $MAX_FILE_SIZE
-          ];
- 
- @ISA                    = qw[Exporter];
-@@ -41,6 +41,7 @@ $EXTRACT_BLOCK_SIZE     = 1024 * 1024 * 1024;
- $ZERO_PAD_NUMBERS       = 0;
- $RESOLVE_SYMLINK        = $ENV{'PERL5_AT_RESOLVE_SYMLINK'} || 'speed';
- $EXTRACT_BLOCK_SIZE     = 1024 * 1024 * 1024;
-+$MAX_FILE_SIZE          = 1024 * 1024 * 1024;
- 
- BEGIN {
-     use Config;
-@@ -444,6 +445,14 @@ sub _read_tar {
- 
-             my $block = BLOCK_SIZE->( $entry->size );
- 
-+            if ( $MAX_FILE_SIZE && $entry->size > $MAX_FILE_SIZE ) {
-+                $self->_error( qq[Entry '] . $entry->full_path .
-+                    qq[' declared size ] . $entry->size .
-+                    qq[ bytes exceeds \$Archive::Tar::MAX_FILE_SIZE ] .
-+                    qq[($MAX_FILE_SIZE); refusing to allocate] );
-+                next LOOP;
-+            }
-+
-             $data = $entry->get_content_by_ref;
- 
-           my $skip = 0;
-@@ -2186,6 +2195,13 @@ extraction may fail with an error.
- cannot be arbitrarily large since some operating systems limit the number of
- bytes that can be written in one call to C<write(2)>, so if this is too large,
- extraction may fail with an error.
-+
-+=head2 $Archive::Tar::MAX_FILE_SIZE
-+
-+This variable holds an upper bound on the per-entry declared size that
-+C<Archive::Tar> will accept when reading an archive. Entries whose header
-+claims a larger size are refused with an error before any read allocation.
-+Defaults to 1 GiB. Set to 0 to disable the cap.
- 
- =cut
- 

Index: pkgsrc/lang/perl5/patches/patch-cpan_Socket_Socket.xs
diff -u pkgsrc/lang/perl5/patches/patch-cpan_Socket_Socket.xs:1.3 pkgsrc/lang/perl5/patches/patch-cpan_Socket_Socket.xs:1.3.2.1
--- pkgsrc/lang/perl5/patches/patch-cpan_Socket_Socket.xs:1.3   Tue Jun 16 07:12:10 2026
+++ pkgsrc/lang/perl5/patches/patch-cpan_Socket_Socket.xs       Sun Aug  9 19:00:15 2026
@@ -1,144 +0,0 @@
-$NetBSD: patch-cpan_Socket_Socket.xs,v 1.3 2026/06/16 07:12:10 wiz Exp $
-
-Pull security fix from 2.041
-
-[BUGFIXES]
-* Fix reuse of `STRLEN len` variable in pack_ip_mreq_source()
-
-https://github.com/Perl/perl5/commit/de19a0b0ad1900fef976c5c1400bd8f11ec6c6cb.patch
-
---- cpan/Socket/Socket.xs.orig 2026-01-18 17:50:03.000000000 +0000
-+++ cpan/Socket/Socket.xs
-@@ -1272,26 +1272,35 @@ pack_ip_mreq(multiaddr, interface=&PL_sv_undef)
-         struct ip_mreq mreq;
-         char * multiaddrbytes;
-         char * interfacebytes;
--        STRLEN len;
--        if (DO_UTF8(multiaddr) && !sv_utf8_downgrade(multiaddr, 1))
--            croak("Wide character in %s", "Socket::pack_ip_mreq");
--        multiaddrbytes = SvPVbyte(multiaddr, len);
--        if (len != sizeof(mreq.imr_multiaddr))
--            croak("Bad arg length %s, length is %" UVuf ", should be %" UVuf,
--                    "Socket::pack_ip_mreq", (UV)len, (UV)sizeof(mreq.imr_multiaddr));
-+
-+        {
-+            if (DO_UTF8(multiaddr) && !sv_utf8_downgrade(multiaddr, 1))
-+                croak("Wide character in %s", "Socket::pack_ip_mreq");
-+
-+            STRLEN len;
-+            multiaddrbytes = SvPVbyte(multiaddr, len);
-+            if (len != sizeof(mreq.imr_multiaddr))
-+                croak("Bad arg length %s, length is %" UVuf ", should be %" UVuf,
-+                        "Socket::pack_ip_mreq", (UV)len, (UV)sizeof(mreq.imr_multiaddr));
-+        }
-+
-         Zero(&mreq, sizeof(mreq), char);
-         Copy(multiaddrbytes, &mreq.imr_multiaddr, sizeof(mreq.imr_multiaddr), char);
-         if(SvOK(interface)) {
-             if (DO_UTF8(interface) && !sv_utf8_downgrade(interface, 1))
-                 croak("Wide character in %s", "Socket::pack_ip_mreq");
-+
-+            STRLEN len;
-             interfacebytes = SvPVbyte(interface, len);
-             if (len != sizeof(mreq.imr_interface))
-                 croak("Bad arg length %s, length is %" UVuf ", should be %" UVuf,
-                         "Socket::pack_ip_mreq", (UV)len, (UV)sizeof(mreq.imr_interface));
-+
-             Copy(interfacebytes, &mreq.imr_interface, sizeof(mreq.imr_interface), char);
-         }
-         else
-             mreq.imr_interface.s_addr = INADDR_ANY;
-+
-         ST(0) = sv_2mortal(newSVpvn((char *)&mreq, sizeof(mreq)));
- #else
-         not_here("pack_ip_mreq");
-@@ -1331,25 +1340,38 @@ pack_ip_mreq_source(multiaddr, source, interface=&PL_s
-         char * multiaddrbytes;
-         char * sourcebytes;
-         char * interfacebytes;
--        STRLEN len;
--        if (DO_UTF8(multiaddr) && !sv_utf8_downgrade(multiaddr, 1))
--            croak("Wide character in %s", "Socket::pack_ip_mreq_source");
--        multiaddrbytes = SvPVbyte(multiaddr, len);
--        if (len != sizeof(mreq.imr_multiaddr))
--            croak("Bad arg length %s, length is %" UVuf ", should be %" UVuf,
--                    "Socket::pack_ip_mreq", (UV)len, (UV)sizeof(mreq.imr_multiaddr));
--        if (DO_UTF8(source) && !sv_utf8_downgrade(source, 1))
--            croak("Wide character in %s", "Socket::pack_ip_mreq_source");
--        if (len != sizeof(mreq.imr_sourceaddr))
--            croak("Bad arg length %s, length is %" UVuf ", should be %" UVuf,
--                    "Socket::pack_ip_mreq", (UV)len, (UV)sizeof(mreq.imr_sourceaddr));
--        sourcebytes = SvPVbyte(source, len);
-+
-+        {
-+            if (DO_UTF8(multiaddr) && !sv_utf8_downgrade(multiaddr, 1))
-+                croak("Wide character in %s", "Socket::pack_ip_mreq_source");
-+
-+            STRLEN len;
-+            multiaddrbytes = SvPVbyte(multiaddr, len);
-+            if (len != sizeof(mreq.imr_multiaddr))
-+                croak("Bad arg length %s, length is %" UVuf ", should be %" UVuf,
-+                        "Socket::pack_ip_mreq", (UV)len, (UV)sizeof(mreq.imr_multiaddr));
-+        }
-+
-+        {
-+            if (DO_UTF8(source) && !sv_utf8_downgrade(source, 1))
-+                croak("Wide character in %s", "Socket::pack_ip_mreq_source");
-+
-+            STRLEN len;
-+            sourcebytes = SvPVbyte(source, len);
-+            if (len != sizeof(mreq.imr_sourceaddr))
-+                croak("Bad arg length %s, length is %" UVuf ", should be %" UVuf,
-+                        "Socket::pack_ip_mreq", (UV)len, (UV)sizeof(mreq.imr_sourceaddr));
-+        }
-+
-         Zero(&mreq, sizeof(mreq), char);
-         Copy(multiaddrbytes, &mreq.imr_multiaddr, sizeof(mreq.imr_multiaddr), char);
-         Copy(sourcebytes, &mreq.imr_sourceaddr, sizeof(mreq.imr_sourceaddr), char);
-+
-         if(SvOK(interface)) {
-             if (DO_UTF8(interface) && !sv_utf8_downgrade(interface, 1))
-                 croak("Wide character in %s", "Socket::pack_ip_mreq");
-+
-+            STRLEN len;
-             interfacebytes = SvPVbyte(interface, len);
-             if (len != sizeof(mreq.imr_interface))
-                 croak("Bad arg length %s, length is %" UVuf ", should be %" UVuf,
-@@ -1358,6 +1380,7 @@ pack_ip_mreq_source(multiaddr, source, interface=&PL_s
-         }
-         else
-             mreq.imr_interface.s_addr = INADDR_ANY;
-+
-         ST(0) = sv_2mortal(newSVpvn((char *)&mreq, sizeof(mreq)));
- #else
-         PERL_UNUSED_VAR(multiaddr);
-@@ -1398,16 +1421,22 @@ pack_ipv6_mreq(multiaddr, ifindex)
- #ifdef HAS_IPV6_MREQ
-         struct ipv6_mreq mreq;
-         char * multiaddrbytes;
--        STRLEN len;
--        if (DO_UTF8(multiaddr) && !sv_utf8_downgrade(multiaddr, 1))
--            croak("Wide character in %s", "Socket::pack_ipv6_mreq");
--        multiaddrbytes = SvPVbyte(multiaddr, len);
--        if (len != sizeof(mreq.ipv6mr_multiaddr))
--            croak("Bad arg length %s, length is %" UVuf ", should be %" UVuf,
--                    "Socket::pack_ipv6_mreq", (UV)len, (UV)sizeof(mreq.ipv6mr_multiaddr));
-+
-+        {
-+            if (DO_UTF8(multiaddr) && !sv_utf8_downgrade(multiaddr, 1))
-+                croak("Wide character in %s", "Socket::pack_ipv6_mreq");
-+
-+            STRLEN len;
-+            multiaddrbytes = SvPVbyte(multiaddr, len);
-+            if (len != sizeof(mreq.ipv6mr_multiaddr))
-+                croak("Bad arg length %s, length is %" UVuf ", should be %" UVuf,
-+                        "Socket::pack_ipv6_mreq", (UV)len, (UV)sizeof(mreq.ipv6mr_multiaddr));
-+        }
-+
-         Zero(&mreq, sizeof(mreq), char);
-         Copy(multiaddrbytes, &mreq.ipv6mr_multiaddr, sizeof(mreq.ipv6mr_multiaddr), char);
-         mreq.ipv6mr_interface = ifindex;
-+
-         ST(0) = sv_2mortal(newSVpvn((char *)&mreq, sizeof(mreq)));
- #else
-         PERL_UNUSED_VAR(multiaddr);

Index: pkgsrc/lang/perl5/patches/patch-dist_Storable_Storable.xs
diff -u pkgsrc/lang/perl5/patches/patch-dist_Storable_Storable.xs:1.2.2.2 pkgsrc/lang/perl5/patches/patch-dist_Storable_Storable.xs:1.2.2.3
--- pkgsrc/lang/perl5/patches/patch-dist_Storable_Storable.xs:1.2.2.2   Thu Jul 16 21:08:19 2026
+++ pkgsrc/lang/perl5/patches/patch-dist_Storable_Storable.xs   Sun Aug  9 19:00:15 2026
@@ -1,20 +0,0 @@
-$NetBSD: patch-dist_Storable_Storable.xs,v 1.2.2.2 2026/07/16 21:08:19 maya Exp $
-
-Storable versions before 3.41 for Perl have a signed integer overflow
-when deserializing a crafted SX_HOOK record
-https://github.com/Perl/perl5/commit/e4f681784bcdeaa91ff02a2fa4cdcae5c46779d7.patch
-
---- dist/Storable/Storable.xs.orig     2026-01-18 17:50:04.000000000 +0000
-+++ dist/Storable/Storable.xs
-@@ -5035,7 +5035,10 @@ static SV *retrieve_hook_common(pTHX_ stcxt_t *cxt, co
-         }
-         else
-             GETMARK(len3);
--        if (len3) {
-+        if (len3 == I32_MAX)
-+            /* If len3 is exactly I32_MAX it will upset av_extend below */
-+            CROAK(("Invalid count of hook data items"));
-+        else if (len3) {
-             av = newAV();
-             av_extend(av, len3 + 1);    /* Leave room for [0] */
-             AvFILLp(av) = len3;         /* About to be filled anyway */
Index: pkgsrc/lang/perl5/patches/patch-pp__pack.c
diff -u pkgsrc/lang/perl5/patches/patch-pp__pack.c:1.2.2.2 pkgsrc/lang/perl5/patches/patch-pp__pack.c:1.2.2.3
--- pkgsrc/lang/perl5/patches/patch-pp__pack.c:1.2.2.2  Thu Jul 16 21:08:19 2026
+++ pkgsrc/lang/perl5/patches/patch-pp__pack.c  Sun Aug  9 19:00:15 2026
@@ -1,36 +0,0 @@
-$NetBSD: patch-pp__pack.c,v 1.2.2.2 2026/07/16 21:08:19 maya Exp $
-
-Perl versions through 5.43.10 have an integer overflow in
-S_measure_struct leading to an out-of-bounds heap read in pack and
-unpack
-https://github.com/Perl/perl5/commit/40754edc72dd3e513d758153c0e2f0215897740e.patch
-https://github.com/Perl/perl5/commit/5f7eb6bbbe0510964e3fb1d6bb691e5445913e55.patch
-
---- pp_pack.c.orig     2026-01-18 17:50:04.000000000 +0000
-+++ pp_pack.c
-@@ -513,12 +513,12 @@ S_measure_struct(pTHX_ tempsym_t* symptr)
-                 break;
-             case 'B':
-             case 'b':
--                len = (len + 7)/8;
-+                len = (len / 8) + !!(len % 8);
-                 size = 1;
-                 break;
-             case 'H':
-             case 'h':
--                len = (len + 1)/2;
-+                len = (len / 2) + !!(len % 2);
-                 size = 1;
-                 break;
- 
-@@ -528,6 +528,10 @@ S_measure_struct(pTHX_ tempsym_t* symptr)
-                 break;
-             }
-         }
-+        if ((size > 0) &&
-+                ((len > SSize_t_MAX / size) ||         /* detect overflow of len * size */
-+                 (len * size > SSize_t_MAX - total)))  /* detect overflow of total + len * size */
-+            croak("Pack template structure size is too large");
-         total += len * size;
-     }
-     return total;

Index: pkgsrc/lang/perl5/patches/patch-regcomp__study.c
diff -u pkgsrc/lang/perl5/patches/patch-regcomp__study.c:1.1.4.1 pkgsrc/lang/perl5/patches/patch-regcomp__study.c:1.1.4.2
--- pkgsrc/lang/perl5/patches/patch-regcomp__study.c:1.1.4.1    Thu Jul 16 21:08:19 2026
+++ pkgsrc/lang/perl5/patches/patch-regcomp__study.c    Sun Aug  9 19:00:15 2026
@@ -1,43 +0,0 @@
-$NetBSD: patch-regcomp__study.c,v 1.1.4.1 2026/07/16 21:08:19 maya Exp $
-
-Perl versions through 5.43.9 produce silently incorrect regular
-expression matches when an alternation of more than 65535 fixed string
-branches is compiled into a trie in Perl_study_chunk
-https://github.com/Perl/perl5/commit/03f74bbbd3a68350d926ee93d56ee4808c28c4c7.patch
-
-Perl/perl-security#147: test against the actual character lengths
-https://github.com/Perl/perl5/commit/5e7f119eb2bb1181be908701f22bf7068e722f1c
-
---- regcomp_study.c.orig       2026-01-18 17:50:04.000000000 +0000
-+++ regcomp_study.c
-@@ -1841,6 +1841,16 @@ Perl_study_chunk(pTHX_
-                             tail = regnext( tail );
-                         }
- 
-+                        /* The code below currently saves the difference from
-+                         * start to finish in a 16-bit field, causing
-+                         * GH #23388.  This defeats the design of batching
-+                         * tries into chunks that each fit.  khw thinks it is
-+                         * too late in the 5.44 cycle to relook at the design,
-+                         * so for now anyway, don't make a trie that would
-+                         * overflow */
-+                        if (tail - startbranch >= U16_MAX) {
-+                            continue;
-+                        }
- 
-                         DEBUG_TRIE_COMPILE_r({
-                             regprop(RExC_rx, RExC_mysv, tail, NULL, pRExC_state);
-@@ -2770,6 +2780,13 @@ Perl_study_chunk(pTHX_
-                                                (U8 *) SvEND(data->last_found))
-                                 - (U8*)s;
-                         l -= old;
-+
-+                        if (l > 0 &&
-+                            (mincount >= SSize_t_MAX / (SSize_t)l
-+                             || old > SSize_t_MAX - mincount * (SSize_t)l)) {
-+                            FAIL("Regexp out of space");
-+                        }
-+
-                         /* Get the added string: */
-                         last_str = newSVpvn_utf8(s  + old, l, UTF);
-                         last_chrs = UTF ? utf8_length((U8*)(s + old),



Home | Main Index | Thread Index | Old Index