Index: gnu/usr.bin/perl/Configure =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/Configure,v diff -u -p -a -u -p -r1.60 Configure --- gnu/usr.bin/perl/Configure 26 Dec 2025 22:15:22 -0000 1.60 +++ gnu/usr.bin/perl/Configure 29 Mar 2026 16:31:42 -0000 @@ -17502,6 +17502,8 @@ $rm_try esac esac +case "$perl_lc_all_separator$perl_lc_all_category_positions_init" in + "") : Check the syntax of LC_ALL when categories are set to different locales echo " " $echo "Checking the syntax of LC_ALL when categories are set to different locales..." >&4 @@ -17878,6 +17880,23 @@ $rm -f try try.* # and run without having to have a bunch more #ifdef's d_perl_lc_all_uses_name_value_pairs="$define" ;; +esac +;; + + *) # Has an lc_all definition passed-in + case "$perl_lc_all_separator" in + \"*\") ;; # Good, enclosed in "..." + *) echo "Adding enclosing double quotes to perl_lc_all_separator" >&4 + case "$perl_lc_all_separator" in + \"*) perl_lc_all_separator="$perl_lc_all_separator\"" ;; + *\") perl_lc_all_separator="\"$perl_lc_all_separator" ;; + *) perl_lc_all_separator="\"$perl_lc_all_separator\"" ;; + esac + esac + d_perl_lc_all_separator="$define" + d_perl_lc_all_category_positions_init="$define" + d_perl_lc_all_uses_name_value_pairs="$undef" + ;; esac : see if pipe2 exists Index: gnu/usr.bin/perl/INSTALL =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/INSTALL,v diff -u -p -a -u -p -r1.33 INSTALL --- gnu/usr.bin/perl/INSTALL 26 Dec 2025 22:14:12 -0000 1.33 +++ gnu/usr.bin/perl/INSTALL 29 Mar 2026 16:31:42 -0000 @@ -92,10 +92,10 @@ to F for more detaile =head3 Compatibility with earlier versions -B This version is not binary compatible with earlier versions -of Perl. If you have built extensions (i.e. modules that include C code) -using an earlier version of Perl, you will need to rebuild and reinstall -those extensions. +B This version is not binary compatible with versions of Perl +earlier than 5.42.0. If you have built extensions (i.e. modules that +include C code) using an earlier version of Perl, you will need to +rebuild and reinstall those extensions. Pure perl modules without XS or C code should continue to work fine without reinstallation. See the discussion below on @@ -751,7 +751,7 @@ The directories set up by Configure fall =item Directories for the perl distribution -By default, Configure will use the following directories for 5.42.0. +By default, Configure will use the following directories for 5.42.2. $version is the full perl version number, including subversion, e.g. 5.12.3, and $archname is a string like sun4-sunos, determined by Configure. The full definitions of all Configure @@ -2575,8 +2575,8 @@ L Perl modules having binary parts (meaning that a C compiler is used) will have to be recompiled to be -used with 5.42.0. If you find you do need to rebuild an extension with -5.42.0, you may safely do so without disturbing the older +used with 5.42.2. If you find you do need to rebuild an extension with +5.42.2, you may safely do so without disturbing the older installations. (See L<"Coexistence with earlier versions of perl 5"> above.) @@ -2704,15 +2704,15 @@ Firstly, the bare minimum to run this sc print("$f\n"); } -in Linux with perl-5.42.0 is as follows (under $Config{prefix}): +in Linux with perl-5.42.2 is as follows (under $Config{prefix}): ./bin/perl - ./lib/perl5/5.42.0/strict.pm - ./lib/perl5/5.42.0/warnings.pm - ./lib/perl5/5.42.0/i686-linux/File/Glob.pm - ./lib/perl5/5.42.0/feature.pm - ./lib/perl5/5.42.0/XSLoader.pm - ./lib/perl5/5.42.0/i686-linux/auto/File/Glob/Glob.so + ./lib/perl5/5.42.2/strict.pm + ./lib/perl5/5.42.2/warnings.pm + ./lib/perl5/5.42.2/i686-linux/File/Glob.pm + ./lib/perl5/5.42.2/feature.pm + ./lib/perl5/5.42.2/XSLoader.pm + ./lib/perl5/5.42.2/i686-linux/auto/File/Glob/Glob.so Secondly, for perl-5.10.1, the Debian perl-base package contains 591 files, (of which 510 are for lib/unicore) totaling about 3.5MB in its Index: gnu/usr.bin/perl/MANIFEST =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/MANIFEST,v diff -u -p -a -u -p -r1.78 MANIFEST --- gnu/usr.bin/perl/MANIFEST 26 Dec 2025 22:16:21 -0000 1.78 +++ gnu/usr.bin/perl/MANIFEST 29 Mar 2026 16:31:42 -0000 @@ -6373,9 +6373,13 @@ pod/perl5381delta.pod Perl changes in pod/perl5382delta.pod Perl changes in version 5.38.2 pod/perl5383delta.pod Perl changes in version 5.38.3 pod/perl5384delta.pod Perl changes in version 5.38.4 +pod/perl5385delta.pod Perl changes in version 5.38.5 pod/perl5400delta.pod Perl changes in version 5.40.0 pod/perl5401delta.pod Perl changes in version 5.40.1 pod/perl5402delta.pod Perl changes in version 5.40.2 +pod/perl5403delta.pod Perl changes in version 5.40.3 +pod/perl5420delta.pod Perl changes in version 5.42.0 +pod/perl5421delta.pod Perl changes in version 5.42.1 pod/perl561delta.pod Perl changes in version 5.6.1 pod/perl56delta.pod Perl changes in version 5.6 pod/perl581delta.pod Perl changes in version 5.8.1 @@ -6624,6 +6628,7 @@ t/class/construct.t See if class const t/class/destruct.t See if class destruction works t/class/field.t See if class field declarations work t/class/gh22169.t Test defining a class that previously failed to define +t/class/gh23511.t Test defining a reader after a strict 'vars' violation t/class/inherit.t See if class inheritance works t/class/method.t See if class method declarations work t/class/phasers.t See if class phaser blocks work Index: gnu/usr.bin/perl/META.json =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/META.json,v diff -u -p -a -u -p -r1.17 META.json --- gnu/usr.bin/perl/META.json 26 Dec 2025 22:14:12 -0000 1.17 +++ gnu/usr.bin/perl/META.json 29 Mar 2026 16:31:42 -0000 @@ -118,6 +118,6 @@ "url" : "https://github.com/Perl/perl5" } }, - "version" : "5.042000", + "version" : "5.042002", "x_serialization_backend" : "JSON::PP version 4.16" } Index: gnu/usr.bin/perl/META.yml =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/META.yml,v diff -u -p -a -u -p -r1.17 META.yml --- gnu/usr.bin/perl/META.yml 26 Dec 2025 22:14:12 -0000 1.17 +++ gnu/usr.bin/perl/META.yml 29 Mar 2026 16:31:42 -0000 @@ -105,5 +105,5 @@ resources: homepage: https://www.perl.org/ license: https://dev.perl.org/licenses/ repository: https://github.com/Perl/perl5 -version: '5.042000' +version: '5.042002' x_serialization_backend: 'CPAN::Meta::YAML version 0.020' Index: gnu/usr.bin/perl/Makefile.SH =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/Makefile.SH,v diff -u -p -a -u -p -r1.71 Makefile.SH --- gnu/usr.bin/perl/Makefile.SH 26 Dec 2025 22:16:21 -0000 1.71 +++ gnu/usr.bin/perl/Makefile.SH 29 Mar 2026 16:31:42 -0000 @@ -636,7 +636,7 @@ esac $spitshell >>$Makefile <<'!NO!SUBS!' -perltoc_pod_prereqs = extra.pods pod/perl5420delta.pod pod/perlapi.pod pod/perlintern.pod pod/perlmodlib.pod +perltoc_pod_prereqs = extra.pods pod/perl5422delta.pod pod/perlapi.pod pod/perlintern.pod pod/perlmodlib.pod generated_pods = pod/perltoc.pod $(perltoc_pod_prereqs) generated_headers = uudmap.h bitcount.h mg_data.h @@ -1143,9 +1143,9 @@ pod/perlintern.pod: $(MINIPERL_EXE) auto pod/perlmodlib.pod: $(MINIPERL_EXE) pod/perlmodlib.PL MANIFEST $(MINIPERL) pod/perlmodlib.PL -q -pod/perl5420delta.pod: pod/perldelta.pod - $(RMS) pod/perl5420delta.pod - $(LNS) perldelta.pod pod/perl5420delta.pod +pod/perl5422delta.pod: pod/perldelta.pod + $(RMS) pod/perl5422delta.pod + $(LNS) perldelta.pod pod/perl5422delta.pod extra.pods: $(MINIPERL_EXE) -@test ! -f extra.pods || rm -f `cat extra.pods` Index: gnu/usr.bin/perl/Makefile.bsd-wrapper1 =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/Makefile.bsd-wrapper1,v diff -u -p -a -u -p -r1.48 Makefile.bsd-wrapper1 --- gnu/usr.bin/perl/Makefile.bsd-wrapper1 26 Dec 2025 22:15:22 -0000 1.48 +++ gnu/usr.bin/perl/Makefile.bsd-wrapper1 29 Mar 2026 16:31:42 -0000 @@ -97,10 +97,14 @@ _quick3p= perl5382delta 1 pod/perl5382delta.pod \ perl5383delta 1 pod/perl5383delta.pod \ perl5384delta 1 pod/perl5384delta.pod \ + perl5385delta 1 pod/perl5385delta.pod \ perl5400delta 1 pod/perl5400delta.pod \ perl5401delta 1 pod/perl5401delta.pod \ perl5402delta 1 pod/perl5402delta.pod \ + perl5403delta 1 pod/perl5403delta.pod \ perl5420delta 1 pod/perl5420delta.pod \ + perl5421delta 1 pod/perl5421delta.pod \ + perl5422delta 1 pod/perl5422delta.pod \ perl561delta 1 pod/perl561delta.pod \ perl56delta 1 pod/perl56delta.pod \ perl581delta 1 pod/perl581delta.pod \ Index: gnu/usr.bin/perl/README =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/README,v diff -u -p -a -u -p -r1.26 README --- gnu/usr.bin/perl/README 26 Dec 2025 22:14:12 -0000 1.26 +++ gnu/usr.bin/perl/README 29 Mar 2026 16:31:42 -0000 @@ -1,4 +1,4 @@ -Perl is Copyright (C) 1993 - 2025 by Larry Wall and others. +Perl is Copyright (C) 1993 - 2026 by Larry Wall and others. All rights reserved. Index: gnu/usr.bin/perl/README.haiku =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/README.haiku,v diff -u -p -a -u -p -r1.17 README.haiku --- gnu/usr.bin/perl/README.haiku 26 Dec 2025 22:14:12 -0000 1.17 +++ gnu/usr.bin/perl/README.haiku 29 Mar 2026 16:31:42 -0000 @@ -24,9 +24,9 @@ The build procedure is completely standa Make perl executable and create a symlink for libperl: chmod a+x /boot/common/bin/perl - cd /boot/common/lib; ln -s perl5/5.42.0/BePC-haiku/CORE/libperl.so . + cd /boot/common/lib; ln -s perl5/5.42.2/BePC-haiku/CORE/libperl.so . -Replace C<5.42.0> with your respective version of Perl. +Replace C<5.42.2> with your respective version of Perl. =head1 KNOWN PROBLEMS Index: gnu/usr.bin/perl/README.macosx =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/README.macosx,v diff -u -p -a -u -p -r1.17 README.macosx --- gnu/usr.bin/perl/README.macosx 26 Dec 2025 22:14:12 -0000 1.17 +++ gnu/usr.bin/perl/README.macosx 29 Mar 2026 16:31:42 -0000 @@ -12,9 +12,9 @@ perlmacosx - Perl under Mac OS X This document briefly describes Perl under Mac OS X. - curl -O https://www.cpan.org/src/perl-5.42.0.tar.gz - tar -xzf perl-5.42.0.tar.gz - cd perl-5.42.0 + curl -O https://www.cpan.org/src/perl-5.42.2.tar.gz + tar -xzf perl-5.42.2.tar.gz + cd perl-5.42.2 ./Configure -des -Dprefix=/usr/local/ make make test @@ -22,7 +22,7 @@ This document briefly describes Perl und =head1 DESCRIPTION -The latest Perl release (5.42.0 as of this writing) builds without changes +The latest Perl release (5.42.2 as of this writing) builds without changes under all versions of Mac OS X from 10.3 "Panther" onwards. In order to build your own version of Perl you will need 'make', Index: gnu/usr.bin/perl/README.os2 =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/README.os2,v diff -u -p -a -u -p -r1.33 README.os2 --- gnu/usr.bin/perl/README.os2 26 Dec 2025 22:14:12 -0000 1.33 +++ gnu/usr.bin/perl/README.os2 29 Mar 2026 16:31:42 -0000 @@ -621,7 +621,7 @@ C in F, =item Additional Perl modules - unzip perl_ste.zip -d f:/perllib/lib/site_perl/5.42.0/ + unzip perl_ste.zip -d f:/perllib/lib/site_perl/5.42.2/ Same remark as above applies. Additionally, if this directory is not one of directories on @INC (and @INC is influenced by C), you Index: gnu/usr.bin/perl/README.vms =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/README.vms,v diff -u -p -a -u -p -r1.34 README.vms --- gnu/usr.bin/perl/README.vms 26 Dec 2025 22:14:12 -0000 1.34 +++ gnu/usr.bin/perl/README.vms 29 Mar 2026 16:31:42 -0000 @@ -139,11 +139,11 @@ You may need to set up a foreign symbol choice. Once you have done so, use a command like the following to unpack the archive: - vmstar -xvf perl-5^.42^.0.tar + vmstar -xvf perl-5^.42^.2.tar Then set default to the top-level source directory like so: - set default [.perl-5^.42^.0] + set default [.perl-5^.42^.2] and proceed with configuration as described in the next section. Index: gnu/usr.bin/perl/class.c =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/class.c,v diff -u -p -a -u -p -r1.1.1.3 class.c --- gnu/usr.bin/perl/class.c 26 Dec 2025 22:12:29 -0000 1.1.1.3 +++ gnu/usr.bin/perl/class.c 29 Mar 2026 16:31:42 -0000 @@ -1140,7 +1140,8 @@ apply_field_attribute_reader(pTHX_ PADNA OP *nameop = newSVOP(OP_CONST, 0, value); CV *cv = newATTRSUB(floor_ix, nameop, NULL, NULL, ops); - CvIsMETHOD_on(cv); + if (cv) + CvIsMETHOD_on(cv); } /* If '@_' is called "snail", then elements of it can be called "slugs"; i.e. @@ -1238,7 +1239,8 @@ apply_field_attribute_writer(pTHX_ PADNA OP *nameop = newSVOP(OP_CONST, 0, value); CV *cv = newATTRSUB(floor_ix, nameop, NULL, NULL, ops); - CvIsMETHOD_on(cv); + if (cv) + CvIsMETHOD_on(cv); } static struct { Index: gnu/usr.bin/perl/config.over =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/config.over,v diff -u -p -a -u -p -r1.23 config.over --- gnu/usr.bin/perl/config.over 3 Sep 2023 01:43:09 -0000 1.23 +++ gnu/usr.bin/perl/config.over 29 Mar 2026 16:31:42 -0000 @@ -69,4 +69,3 @@ ranlib='ranlib' # enabling syscall even if we don't have it d_syscall=define d_syscallproto=define - Index: gnu/usr.bin/perl/locale.c =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/locale.c,v diff -u -p -a -u -p -r1.13 locale.c --- gnu/usr.bin/perl/locale.c 26 Dec 2025 22:14:12 -0000 1.13 +++ gnu/usr.bin/perl/locale.c 29 Mar 2026 16:31:45 -0000 @@ -8143,11 +8143,12 @@ S_maybe_override_codeset(pTHX_ const cha /* =for apidoc_section $time -=for apidoc sv_strftime_tm -=for apidoc_item sv_strftime_ints +=for apidoc sv_strftime_ints +=for apidoc_item sv_strftime_tm =for apidoc_item my_strftime -These implement the libc strftime(). +These implement libc strftime(), overcoming various deficiencies it has; you +will come to regret sooner or later using it directly instead of these. On failure, they return NULL, and set C to C. @@ -8156,70 +8157,154 @@ handle the UTF-8ness of the current loca result. Only if the current C locale is a UTF-8 one (and S> is not in effect) will the result be marked as UTF-8. +For these, the caller assumes ownership of the returned SV with a reference +count of 1. + C is kept for backwards compatibility. Knowing if its result should be considered UTF-8 or not requires significant extra logic. Note that all three functions are always executed in the underlying C locale of the program, giving results based on that locale. -The functions differ as follows: +The stringified C parameter in all is the same as the system libc +C. The available conversion specifications vary by platform. These +days, every specification listed in the ANSI C99 standard should be usable +everywhere. These are C. + +But note that the B of some of the conversion specifiers are +non-portable. For example, the specifiers C change according +to the locale settings of the user, and both how to set locales (the +locale names) and what output to expect are not standardized. +The specifier C changes according to the timezone settings of the +user and the timezone computation rules of the operating system. +The C specifier is notoriously unportable since the names of +timezones are not standardized. Sticking to the numeric specifiers is the +safest route. -C takes a pointer to a filled-in S> parameter. It -ignores the values of the C and C fields in it. The other fields -give enough information to accurately calculate these values, and are used for -that purpose. - -The caller assumes ownership of the returned SV with a reference count of 1. - -C takes a bunch of integer parameters that together -completely define a given time. It calculates the S> to pass to -libc strftime(), and calls that function. +At the time of this writing, for example, C<%s> is not available on +Windows-like systems. -The value of C is used as follows: +The functions differ as follows: =over -=item 0 +=item * + +The C parameter and the return from C are S> +instead of the S> in the other two functions. This means the +UTF-8ness of the format and result are unspecified. The result MUST be +arranged to be FREED BY THE CALLER). -No daylight savings time is in effect +=item * -=item E0 +C and C take a bunch of integer parameters that +together completely define a given time. They calculate the S> +to pass to libc strftime(), and call that function. See below for the meaning +of the parameters. -Check if daylight savings time is in effect, and adjust the results -accordingly. +C takes a pointer to an already filled-in S> +parameter, so avoids that calculation. -=item E0 +=item * -This value is reserved for internal use by the L module for backwards -compatibility purposes. +C takes two extra parameters that are ignored, being kept only +for historical reasons. These are C and C. =back -The caller assumes ownership of the returned SV with a reference count of 1. +The C99 Standard calls for S> to contain at least these fields: -C is like C except that: + int tm_sec; // seconds after the minute — [0, 60] + int tm_min; // minutes after the hour — [0, 59] + int tm_hour; // hours since midnight — [0, 23] + int tm_mday; // day of the month — [1, 31] + int tm_mon; // months since January — [0, 11] + int tm_year; // years since 1900 + int tm_wday; // days since Sunday — [0, 6] + int tm_yday; // days since January 1 — [0, 365] + int tm_isdst; // Daylight Saving Time flag + +C and C are output only; the other fields give enough +information to accurately calculate these, and are internally used for that +purpose. + +The numbers enclosed in the square brackets above give the maximum legal +ranges for values in the corresponding field. Those ranges are restricted for +some inputs. For example, not all months have 31 days, but all hours have 60 +minutes. If you set a number that is outside the corresponding range, perl +and the libc functions will automatically normalize it to be inside the range, +adjusting other values as necessary. For example, specifying February 29, is +the same as saying March 1 for non-leap years; and using a minute value of 60 +will instead change that to a 0, and increment the hour, which in turn, if the +hour was 23, will roll it over to 0 it and increment the day, and so on. + +Each parameter to C and C populates the +similarly-named field in this structure. + +A value of 60 is legal for C, but only for those moments when an +official leap second has been declared. It is undefined behavior to use them +otherwise, and the behavior does vary depending on the implementation. +Some implementations take your word for it that this is a leap second, leaving +it as the 61st second of the given minute; some roll it over to be the 0th +second of the following minute; some treat it as 0. Some non-conforming +implementations always roll it over to the next minute, regardless of whether +an actual leap second is occurring or not. (And yes, it is a real problem +that different computers have a different conception of what the current time +is; you can search the internet for details.) + +There is no limit (outside the size of C) for the value of C, +but sufficiently negative values (for earlier than 1900) may have different +results on different systems and locales. Some libc implementations may know +when a given locale adopted the Greorian calendar, and adjust for that. +Others will not. (And some countries didn't adopt the Gregorian calendar +until after 1900.) Probably all implementations assume modern time zones go +back forever, before they were actually invented, starting in the last half of +the 19th century. + +The treatment of the C field has varied over previous Perl versions, +and has been buggy (both by perl and by some libc implementations), but is now +aligned, as best we can, with the POSIX Standard, as follows: =over -=item The C parameter and the return are S> instead of -S>. +=item C is 0 -This means the UTF-8ness of the result is unspecified. The result MUST be -arranged to be FREED BY THE CALLER). +The function is to assume that daylight savings time is not in effect. This +should now always work properly, as perl uses its own implementation in this +case, avoiding non-conforming libc ones. -=item The C parameter is ignored. +=item C is E0 -Daylight savings time is never considered to be in effect. +The function is to assume that daylight savings time is in effect, though some +underlying libc implementations treat this as a hint instead of a mandate. -=item It has extra parameters C and C that are ignored. +=item C is E0 -These exist only for historical reasons; the values for the corresponding -fields in S> are calculated from the other arguments. +The function is to itself try to calculate if daylight savings time is in +effect. More recent libc implementations are better at this than earlier +ones. =back -Note that all three functions are always executed in the underlying C -locale of the program, giving results based on that locale. +Some libc implementations have extra fields in S>. The two that +perl handles are: + + int tm_gmtoff; // Seconds East of UTC [%z] + const char * tm_zone; // Timezone abbreviation [%Z] + +These are both output only. Using the respective conversion specifications +(enclosed in the square brackets) in the C parameter is a portable way to +gain access to these values, working both on systems that have and don't have +these fields. + +Example, in the C locale: + + my_strftime( "%A, %B %d, %Y", 0, 0, 0, 12, 11, 95, 0, 0, -1 ); + +returns + + "Tuesday, December 12, 1995" + =cut */ @@ -8231,7 +8316,6 @@ Perl_my_strftime(pTHX_ const char *fmt, PERL_ARGS_ASSERT_MY_STRFTIME; PERL_UNUSED_ARG(wday); PERL_UNUSED_ARG(yday); - PERL_UNUSED_ARG(isdst); #ifdef USE_LOCALE_TIME const char * locale = querylocale_c(LC_TIME); @@ -8240,7 +8324,7 @@ Perl_my_strftime(pTHX_ const char *fmt, #endif struct tm mytm; - ints_to_tm(&mytm, locale, sec, min, hour, mday, mon, year, 0); + ints_to_tm(&mytm, locale, sec, min, hour, mday, mon, year, isdst); if (! strftime_tm(fmt, PL_scratch_langinfo, locale, &mytm)) { return NULL; } @@ -8260,15 +8344,8 @@ Perl_sv_strftime_ints(pTHX_ SV * fmt, in const char * locale = "C"; #endif - /* A negative 'isdst' triggers backwards compatibility mode for - * POSIX::strftime(), in which 0 is always passed to ints_to_tm() so that - * the possibility of daylight savings time is never considered, But, a 1 - * is eventually passed to libc strftime() so that it returns the results - * it always has for a non-zero 'isdst'. See GH #22351 */ struct tm mytm; - ints_to_tm(&mytm, locale, sec, min, hour, mday, mon, year, - MAX(0, isdst)); - mytm.tm_isdst = MIN(1, abs(isdst)); + ints_to_tm(&mytm, locale, sec, min, hour, mday, mon, year, isdst); return sv_strftime_common(fmt, locale, &mytm); } @@ -8352,20 +8429,22 @@ S_ints_to_tm(pTHX_ struct tm * mytm, mytm->tm_year = year; struct tm * which_tm = mytm; - struct tm aux_tm; #ifndef HAS_MKTIME mini_mktime(mytm); #else +# if defined(HAS_TM_TM_GMTOFF) || defined(HAS_TM_TM_ZONE) +# define ALWAYS_RUN_MKTIME + + struct tm aux_tm; + +# endif /* On platforms that have either of these two fields, we have to run the * libc mktime() in order to set them, as mini_mktime() doesn't deal with * them. [perl #18238] */ -# if defined(HAS_TM_TM_GMTOFF) || defined(HAS_TM_TM_ZONE) -# define ALWAYS_RUN_MKTIME -# endif /* When isdst is 0, it means to consider daylight savings time as never * being in effect. Many libc implementations of mktime() do not allow @@ -8374,44 +8453,52 @@ S_ints_to_tm(pTHX_ struct tm * mytm, if (isdst == 0) { mini_mktime(mytm); -# ifndef ALWAYS_RUN_MKTIME - - /* When we don't always need libc mktime(), we call it only when we didn't - * call mini_mktime() */ - } else { +# ifdef ALWAYS_RUN_MKTIME -# else /* Here will have to run libc mktime() in order to get the values of * some fields that mini_mktime doesn't populate. We don't want - * mktime's side effect of looking for dst, so we have to have a - * separate tm structure from which we copy just those fields into the - * returned structure. Initialize its values. mytm should now be a - * normalized version of the input. */ + * mktime's side effect of looking for dst (because isdst==0), so we + * have to have a separate tm structure from which we copy just those + * fields into the structure we return. Initialize its values, which + * have now been normalized by mini_mktime. */ aux_tm = *mytm; - aux_tm.tm_isdst = isdst; which_tm = &aux_tm; # endif + } + +# ifndef ALWAYS_RUN_MKTIME + + else { /* Don't run libc mktime if both: + 1) we ran mini_mktime above; and + 2) we don't have to always run libc mktime */ + +# endif + /* Here, we need to run libc mktime(), either because we want to take * dst into consideration, or because it calculates one or two fields - * that we need that mini_mktime() doesn't handle. - * - * Unlike mini_mktime(), it does consider the locale, so have to switch + * that we need that mini_mktime() doesn't handle. */ + which_tm->tm_isdst = isdst; + + /* Unlike mini_mktime(), it does consider the locale, so have to switch * to the correct one. */ const char * orig_TIME_locale = toggle_locale_c(LC_TIME, locale); MKTIME_LOCK; - /* which_tm points to an auxiliary copy if we ran mini_mktime(). + /* 'which_tm' points to an auxiliary copy if we ran mini_mktime(). * Otherwise it points to the passed-in one which now gets populated * directly. */ (void) mktime(which_tm); MKTIME_UNLOCK; restore_toggled_locale_c(LC_TIME, orig_TIME_locale); + +# ifndef ALWAYS_RUN_MKTIME + } -# if defined(HAS_TM_TM_GMTOFF) || defined(HAS_TM_TM_ZONE) +# else /* And use the saved libc values for tm_gmtoff and tm_zone if we used an * auxiliary struct to get them */ Index: gnu/usr.bin/perl/op.c =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/op.c,v diff -u -p -a -u -p -r1.32 op.c --- gnu/usr.bin/perl/op.c 10 Jan 2026 23:20:43 -0000 1.32 +++ gnu/usr.bin/perl/op.c 29 Mar 2026 16:31:45 -0000 @@ -3756,7 +3756,13 @@ Perl_doref(pTHX_ OP *o, I32 type, bool s break; case OP_COND_EXPR: + /* OP_COND_EXPR is the only op where we have to propagate + * context to *both* branches. Recurse on the first branch, + * then iterate on the second branch. + */ o = OpSIBLING(cUNOPo->op_first); + doref(o, type, set_op_ref); + o = OpSIBLING(o); continue; case OP_RV2SV: @@ -3829,22 +3835,12 @@ Perl_doref(pTHX_ OP *o, I32 type, bool s break; } /* switch */ - while (1) { - if (o == top_op) - return scalar(top_op); /* at top; no parents/siblings to try */ - if (OpHAS_SIBLING(o)) { - o = o->op_sibparent; - /* Normally skip all siblings and go straight to the parent; - * the only op that requires two children to be processed - * is OP_COND_EXPR */ - if (!OpHAS_SIBLING(o) - && o->op_sibparent->op_type == OP_COND_EXPR) - break; - continue; - } - o = o->op_sibparent; /* try parent's next sibling */ - } + /* whole tree has been scanned for ref stuff; now propagate + * scalar context */ + return scalar(top_op); + } /* while */ + } @@ -8341,6 +8337,7 @@ Perl_utilize(pTHX_ int aver, I32 floor, else { PL_hints &= ~HINT_ASCII_ENCODING; } + notify_parser_that_encoding_changed(); PL_prevailing_version = shortver; } Index: gnu/usr.bin/perl/patchlevel.h =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/patchlevel.h,v diff -u -p -a -u -p -r1.57 patchlevel.h --- gnu/usr.bin/perl/patchlevel.h 26 Dec 2025 22:14:12 -0000 1.57 +++ gnu/usr.bin/perl/patchlevel.h 29 Mar 2026 16:31:45 -0000 @@ -39,7 +39,7 @@ Instead use one of the version compariso #define PERL_REVISION 5 /* age */ #define PERL_VERSION 42 /* epoch */ -#define PERL_SUBVERSION 0 /* generation */ +#define PERL_SUBVERSION 2 /* generation */ /* The following numbers describe the earliest compatible version of Perl ("compatibility" here being defined as sufficient binary/API Index: gnu/usr.bin/perl/perl.c =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/perl.c,v diff -u -p -a -u -p -r1.51 perl.c --- gnu/usr.bin/perl/perl.c 26 Dec 2025 22:15:22 -0000 1.51 +++ gnu/usr.bin/perl/perl.c 29 Mar 2026 16:31:45 -0000 @@ -4,7 +4,7 @@ * Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 * 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 * 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023 - * 2024, 2025 + * 2024, 2025, 2026 * by Larry Wall and others * * You may distribute under the terms of either the GNU General Public @@ -4030,7 +4030,7 @@ S_minus_v(pTHX) #endif PerlIO_printf(PIO_stdout, - "\n\nCopyright 1987-2025, Larry Wall\n"); + "\n\nCopyright 1987-2026, Larry Wall\n"); #ifdef OS2 PerlIO_printf(PIO_stdout, "\n\nOS/2 port Copyright (c) 1990, 1991, Raymond Chen, Kai Uwe Rommel\n" Index: gnu/usr.bin/perl/Cross/config.sh-arm-linux =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/Cross/config.sh-arm-linux,v diff -u -p -a -u -p -r1.20 config.sh-arm-linux --- gnu/usr.bin/perl/Cross/config.sh-arm-linux 26 Dec 2025 22:14:13 -0000 1.20 +++ gnu/usr.bin/perl/Cross/config.sh-arm-linux 29 Mar 2026 16:31:42 -0000 @@ -35,8 +35,8 @@ api_subversion='0' api_version='42' api_versionstring='5.42.0' ar='ar' -archlib='/usr/lib/perl5/5.42.0/armv4l-linux' -archlibexp='/usr/lib/perl5/5.42.0/armv4l-linux' +archlib='/usr/lib/perl5/5.42.2/armv4l-linux' +archlibexp='/usr/lib/perl5/5.42.2/armv4l-linux' archname64='' archname='armv4l-linux' archobjs='' @@ -55,7 +55,7 @@ castflags='0' cat='cat' cc='cc' cccdlflags='-fpic' -ccdlflags='-rdynamic -Wl,-rpath,/usr/lib/perl5/5.42.0/armv4l-linux/CORE' +ccdlflags='-rdynamic -Wl,-rpath,/usr/lib/perl5/5.42.2/armv4l-linux/CORE' ccflags='-fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64' ccflags_uselargefiles='-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64' ccname='arm-linux-gcc' @@ -839,7 +839,7 @@ inc_version_list=' ' inc_version_list_init='0' incpath='' inews='' -installarchlib='./install_me_here/usr/lib/perl5/5.42.0/armv4l-linux' +installarchlib='./install_me_here/usr/lib/perl5/5.42.2/armv4l-linux' installbin='./install_me_here/usr/bin' installhtml1dir='' installhtml3dir='' @@ -847,13 +847,13 @@ installman1dir='./install_me_here/usr/sh installman3dir='./install_me_here/usr/share/man/man3' installprefix='./install_me_here/usr' installprefixexp='./install_me_here/usr' -installprivlib='./install_me_here/usr/lib/perl5/5.42.0' +installprivlib='./install_me_here/usr/lib/perl5/5.42.2' installscript='./install_me_here/usr/bin' -installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.42.0/armv4l-linux' +installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.42.2/armv4l-linux' installsitebin='./install_me_here/usr/bin' installsitehtml1dir='' installsitehtml3dir='' -installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.42.0' +installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.42.2' installsiteman1dir='./install_me_here/usr/share/man/man1' installsiteman3dir='./install_me_here/usr/share/man/man3' installsitescript='./install_me_here/usr/bin' @@ -990,8 +990,8 @@ pmake='' pr='' prefix='/usr' prefixexp='/usr' -privlib='/usr/lib/perl5/5.42.0' -privlibexp='/usr/lib/perl5/5.42.0' +privlib='/usr/lib/perl5/5.42.2' +privlibexp='/usr/lib/perl5/5.42.2' procselfexe='"/proc/self/exe"' prototype='define' ptrsize='4' @@ -1056,17 +1056,17 @@ sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 6, 17, 29, 31, 0' sig_size='68' signal_t='void' -sitearch='/usr/lib/perl5/site_perl/5.42.0/armv4l-linux' -sitearchexp='/usr/lib/perl5/site_perl/5.42.0/armv4l-linux' +sitearch='/usr/lib/perl5/site_perl/5.42.2/armv4l-linux' +sitearchexp='/usr/lib/perl5/site_perl/5.42.2/armv4l-linux' sitebin='/usr/bin' sitebinexp='/usr/bin' sitehtml1dir='' sitehtml1direxp='' sitehtml3dir='' sitehtml3direxp='' -sitelib='/usr/lib/perl5/site_perl/5.42.0' +sitelib='/usr/lib/perl5/site_perl/5.42.2' sitelib_stem='/usr/lib/perl5/site_perl' -sitelibexp='/usr/lib/perl5/site_perl/5.42.0' +sitelibexp='/usr/lib/perl5/site_perl/5.42.2' siteman1dir='/usr/share/man/man1' siteman1direxp='/usr/share/man/man1' siteman3dir='/usr/share/man/man3' @@ -1107,7 +1107,7 @@ stdio_stream_array='' strerror_r_proto='0' strings='/usr/include/string.h' submit='' -subversion='0' +subversion='2' sysman='/usr/share/man/man1' tail='' tar='' @@ -1202,8 +1202,8 @@ vendorprefix='' vendorprefixexp='' vendorscript='' vendorscriptexp='' -version='5.42.0' -version_patchlevel_string='version 42 subversion 0' +version='5.42.2' +version_patchlevel_string='version 42 subversion 2' versiononly='undef' vi='' xlibpth='/usr/lib/386 /lib/386' @@ -1218,7 +1218,7 @@ config_args='' config_argc=0 PERL_REVISION=5 PERL_VERSION=42 -PERL_SUBVERSION=0 +PERL_SUBVERSION=2 PERL_API_REVISION=5 PERL_API_VERSION=42 PERL_API_SUBVERSION=0 Index: gnu/usr.bin/perl/Cross/config.sh-arm-linux-n770 =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/Cross/config.sh-arm-linux-n770,v diff -u -p -a -u -p -r1.17 config.sh-arm-linux-n770 --- gnu/usr.bin/perl/Cross/config.sh-arm-linux-n770 26 Dec 2025 22:14:13 -0000 1.17 +++ gnu/usr.bin/perl/Cross/config.sh-arm-linux-n770 29 Mar 2026 16:31:42 -0000 @@ -35,8 +35,8 @@ api_subversion='0' api_version='42' api_versionstring='5.42.0' ar='ar' -archlib='/usr/lib/perl5/5.42.0/armv4l-linux' -archlibexp='/usr/lib/perl5/5.42.0/armv4l-linux' +archlib='/usr/lib/perl5/5.42.2/armv4l-linux' +archlibexp='/usr/lib/perl5/5.42.2/armv4l-linux' archname64='' archname='armv4l-linux' archobjs='' @@ -54,7 +54,7 @@ castflags='0' cat='cat' cc='arm-none-linux-gnueabi-gcc' cccdlflags='-fpic' -ccdlflags='-rdynamic -Wl,-rpath,/usr/lib/perl5/5.42.0/armv4l-linux/CORE' +ccdlflags='-rdynamic -Wl,-rpath,/usr/lib/perl5/5.42.2/armv4l-linux/CORE' ccflags='-fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64' ccflags_uselargefiles='-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64' ccname='arm-linux-gcc' @@ -837,7 +837,7 @@ inc_version_list=' ' inc_version_list_init='0' incpath='' inews='' -installarchlib='./install_me_here/usr/lib/perl5/5.42.0/armv4l-linux' +installarchlib='./install_me_here/usr/lib/perl5/5.42.2/armv4l-linux' installbin='./install_me_here/usr/bin' installhtml1dir='' installhtml3dir='' @@ -845,13 +845,13 @@ installman1dir='./install_me_here/usr/sh installman3dir='./install_me_here/usr/share/man/man3' installprefix='./install_me_here/usr' installprefixexp='./install_me_here/usr' -installprivlib='./install_me_here/usr/lib/perl5/5.42.0' +installprivlib='./install_me_here/usr/lib/perl5/5.42.2' installscript='./install_me_here/usr/bin' -installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.42.0/armv4l-linux' +installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.42.2/armv4l-linux' installsitebin='./install_me_here/usr/bin' installsitehtml1dir='' installsitehtml3dir='' -installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.42.0' +installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.42.2' installsiteman1dir='./install_me_here/usr/share/man/man1' installsiteman3dir='./install_me_here/usr/share/man/man3' installsitescript='./install_me_here/usr/bin' @@ -988,8 +988,8 @@ pmake='' pr='' prefix='/usr' prefixexp='/usr' -privlib='/usr/lib/perl5/5.42.0' -privlibexp='/usr/lib/perl5/5.42.0' +privlib='/usr/lib/perl5/5.42.2' +privlibexp='/usr/lib/perl5/5.42.2' procselfexe='"/proc/self/exe"' prototype='define' ptrsize='4' @@ -1054,17 +1054,17 @@ sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 6, 17, 29, 31, 0' sig_size='68' signal_t='void' -sitearch='/usr/lib/perl5/site_perl/5.42.0/armv4l-linux' -sitearchexp='/usr/lib/perl5/site_perl/5.42.0/armv4l-linux' +sitearch='/usr/lib/perl5/site_perl/5.42.2/armv4l-linux' +sitearchexp='/usr/lib/perl5/site_perl/5.42.2/armv4l-linux' sitebin='/usr/bin' sitebinexp='/usr/bin' sitehtml1dir='' sitehtml1direxp='' sitehtml3dir='' sitehtml3direxp='' -sitelib='/usr/lib/perl5/site_perl/5.42.0' +sitelib='/usr/lib/perl5/site_perl/5.42.2' sitelib_stem='/usr/lib/perl5/site_perl' -sitelibexp='/usr/lib/perl5/site_perl/5.42.0' +sitelibexp='/usr/lib/perl5/site_perl/5.42.2' siteman1dir='/usr/share/man/man1' siteman1direxp='/usr/share/man/man1' siteman3dir='/usr/share/man/man3' @@ -1105,7 +1105,7 @@ stdio_stream_array='' strerror_r_proto='0' strings='/usr/include/string.h' submit='' -subversion='0' +subversion='2' sysman='/usr/share/man/man1' tail='' tar='' @@ -1200,8 +1200,8 @@ vendorprefix='' vendorprefixexp='' vendorscript='' vendorscriptexp='' -version='5.42.0' -version_patchlevel_string='version 42 subversion 0' +version='5.42.2' +version_patchlevel_string='version 42 subversion 2' versiononly='undef' vi='' xlibpth='/usr/lib/386 /lib/386' @@ -1216,7 +1216,7 @@ config_args='' config_argc=0 PERL_REVISION=5 PERL_VERSION=42 -PERL_SUBVERSION=0 +PERL_SUBVERSION=2 PERL_API_REVISION=5 PERL_API_VERSION=42 PERL_API_SUBVERSION=0 Index: gnu/usr.bin/perl/Porting/Glossary =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/Porting/Glossary,v diff -u -p -a -u -p -r1.22 Glossary --- gnu/usr.bin/perl/Porting/Glossary 26 Dec 2025 22:14:13 -0000 1.22 +++ gnu/usr.bin/perl/Porting/Glossary 29 Mar 2026 16:31:42 -0000 @@ -4708,12 +4708,27 @@ perl_lc_all_category_positions_init (dis setlocale(LC_ALL, NULL) when not all categories are the same, on systems that use a positional notation. After element [0] is $lc_all_separator_init, then the category given by element [1], and so on. + For example, at the time this was written, the value in config.sh for + FreeBSD boxes is: + perl_lc_all_category_positions_init='{ 1, 2, 3, 4, 5, 6 }' + And the result of running this program + LC_ALL=C ./perl -Ilib -MPOSIX \ + -le 'setlocale(LC_MONETARY, "fr_FR.UTF-8"); \ + print setlocale(LC_ALL)' + is + C/C/fr_FR.UTF-8/C/C/C + This shows that the LC_MONETARY category on FreeBSD occupies the third + position in the string returned by querying LC_ALL. (See + perl_lc_all_separator for the source of the forward slash.) perl_lc_all_separator (disparate_lc_all.U): - This symbol, when defined, gives the substring used to separate - categories in the aggregated string returned by setlocale(LC_ALL, NULL) - when not all categories are in the same locale. This is for systems - that use a positional notation as opposed to 'name=value' pairs. + This symbol, when defined, gives the substring, enclosed in double + quotes, used to separate categories in the aggregated string returned + by setlocale(LC_ALL, NULL) when not all categories are in the same + locale. This is for systems that use a positional notation as opposed + to 'name=value' pairs. For example, at the time this was written, the + value in config.sh for FreeBSD boxes is: + perl_lc_all_separator='"/"' PERL_PATCHLEVEL (Oldsyms.U): This symbol reflects the patchlevel, if available. Will usually Index: gnu/usr.bin/perl/Porting/Maintainers.pl =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/Porting/Maintainers.pl,v diff -u -p -a -u -p -r1.30 Maintainers.pl --- gnu/usr.bin/perl/Porting/Maintainers.pl 26 Dec 2025 22:15:22 -0000 1.30 +++ gnu/usr.bin/perl/Porting/Maintainers.pl 29 Mar 2026 16:31:42 -0000 @@ -231,8 +231,8 @@ our %Modules = ( }, 'Compress::Raw::Zlib' => { - 'DISTRIBUTION' => 'PMQS/Compress-Raw-Zlib-2.213.tar.gz', - 'SYNCINFO' => 'jkeenan on Wed Aug 28 13:58:29 2024', + 'DISTRIBUTION' => 'PMQS/Compress-Raw-Zlib-2.222.tar.gz', + 'SYNCINFO' => 'jkeenan on Wed Mar 11 21:59:54 2026', 'FILES' => q[cpan/Compress-Raw-Zlib], 'EXCLUDED' => [ qr{^examples/}, @@ -240,7 +240,8 @@ our %Modules = ( qr{^t/meta}, qw( t/000prereq.t t/99pod.t - ), + SECURITY.md + ), ], }, @@ -249,9 +250,9 @@ our %Modules = ( 'SYNCINFO' => 'jkeenan on Fri Jan 17 14:43:53 2025', 'FILES' => q[cpan/Config-Perl-V], 'EXCLUDED' => [qw( - examples/show-v.pl - SECURITY.md - )], + examples/show-v.pl + SECURITY.md + )], }, 'constant' => { @@ -973,6 +974,11 @@ our %Modules = ( qw{.ChangeLog.swp}, qr{^\.github/} ], + + 'CUSTOMIZED' => [ + # Customized by 6ea7dace3401e25dcf8318146be82c03e07a6a72 + 'lib/Pod/Simple/HTMLLegacy.pm', + ], }, 'Pod::Usage' => { @@ -1312,6 +1318,9 @@ our %Modules = ( # only necessary with the CPAN release. 'CUSTOMIZED' => [ 'lib/version.pm', + + # Customized by ba04a9040af061424b6d6f0b1e888cd3ce4b3d9f + 'vutil.c', ], 'MAP' => { Index: gnu/usr.bin/perl/Porting/config.sh =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/Porting/config.sh,v diff -u -p -a -u -p -r1.20 config.sh --- gnu/usr.bin/perl/Porting/config.sh 26 Dec 2025 22:14:13 -0000 1.20 +++ gnu/usr.bin/perl/Porting/config.sh 29 Mar 2026 16:31:42 -0000 @@ -45,8 +45,8 @@ api_subversion='0' api_version='42' api_versionstring='5.42.0' ar='ar' -archlib='/pro/lib/perl5/5.42.0/x86_64-linux-thread-multi-quadmath' -archlibexp='/pro/lib/perl5/5.42.0/x86_64-linux-thread-multi-quadmath' +archlib='/pro/lib/perl5/5.42.2/x86_64-linux-thread-multi-quadmath' +archlibexp='/pro/lib/perl5/5.42.2/x86_64-linux-thread-multi-quadmath' archname64='' archname='x86_64-linux-thread-multi-quadmath' archobjs='' @@ -863,7 +863,7 @@ incpath='' incpth='/usr/lib64/gcc/x86_64-suse-linux/13/include /usr/local/include /usr/lib64/gcc/x86_64-suse-linux/13/include-fixed /usr/x86_64-suse-linux/include /usr/include' inews='' initialinstalllocation='/pro/bin' -installarchlib='/pro/lib/perl5/5.42.0/x86_64-linux-thread-multi-quadmath' +installarchlib='/pro/lib/perl5/5.42.2/x86_64-linux-thread-multi-quadmath' installbin='/pro/bin' installhtml1dir='' installhtml3dir='' @@ -871,13 +871,13 @@ installman1dir='/pro/local/man/man1' installman3dir='/pro/local/man/man3' installprefix='/pro' installprefixexp='/pro' -installprivlib='/pro/lib/perl5/5.42.0' +installprivlib='/pro/lib/perl5/5.42.2' installscript='/pro/bin' -installsitearch='/pro/lib/perl5/site_perl/5.42.0/x86_64-linux-thread-multi-quadmath' +installsitearch='/pro/lib/perl5/site_perl/5.42.2/x86_64-linux-thread-multi-quadmath' installsitebin='/pro/bin' installsitehtml1dir='' installsitehtml3dir='' -installsitelib='/pro/lib/perl5/site_perl/5.42.0' +installsitelib='/pro/lib/perl5/site_perl/5.42.2' installsiteman1dir='/pro/local/man/man1' installsiteman3dir='/pro/local/man/man3' installsitescript='/pro/bin' @@ -1005,7 +1005,7 @@ perl_static_inline='static __inline__' perl_thread_local='_Thread_local' perladmin='hmbrand@cpan.org' perllibs='-lpthread -ldl -lm -lcrypt -lutil -lc -lquadmath' -perlpath='/pro/bin/perl5.42.0' +perlpath='/pro/bin/perl5.42.2' pg='pg' phostname='hostname' pidtype='pid_t' @@ -1014,8 +1014,8 @@ pmake='' pr='' prefix='/pro' prefixexp='/pro' -privlib='/pro/lib/perl5/5.42.0' -privlibexp='/pro/lib/perl5/5.42.0' +privlib='/pro/lib/perl5/5.42.2' +privlibexp='/pro/lib/perl5/5.42.2' procselfexe='"/proc/self/exe"' ptrsize='8' quadkind='2' @@ -1080,17 +1080,17 @@ sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 6, 17, 29, 0' sig_size='68' signal_t='void' -sitearch='/pro/lib/perl5/site_perl/5.42.0/x86_64-linux-thread-multi-quadmath' -sitearchexp='/pro/lib/perl5/site_perl/5.42.0/x86_64-linux-thread-multi-quadmath' +sitearch='/pro/lib/perl5/site_perl/5.42.2/x86_64-linux-thread-multi-quadmath' +sitearchexp='/pro/lib/perl5/site_perl/5.42.2/x86_64-linux-thread-multi-quadmath' sitebin='/pro/bin' sitebinexp='/pro/bin' sitehtml1dir='' sitehtml1direxp='' sitehtml3dir='' sitehtml3direxp='' -sitelib='/pro/lib/perl5/site_perl/5.42.0' +sitelib='/pro/lib/perl5/site_perl/5.42.2' sitelib_stem='/pro/lib/perl5/site_perl' -sitelibexp='/pro/lib/perl5/site_perl/5.42.0' +sitelibexp='/pro/lib/perl5/site_perl/5.42.2' siteman1dir='/pro/local/man/man1' siteman1direxp='/pro/local/man/man1' siteman3dir='/pro/local/man/man3' @@ -1118,7 +1118,7 @@ st_dev_sign='1' st_dev_size='8' st_ino_sign='1' st_ino_size='8' -startperl='#!/pro/bin/perl5.42.0' +startperl='#!/pro/bin/perl5.42.2' startsh='#!/bin/sh' static_ext=' ' stdchar='char' @@ -1130,7 +1130,7 @@ stdio_ptr='((fp)->_ptr)' stdio_stream_array='' strerror_r_proto='REENTRANT_PROTO_B_IBW' submit='' -subversion='0' +subversion='2' sysman='/usr/share/man/man1' sysroot='' tail='' @@ -1233,8 +1233,8 @@ vendorprefix='' vendorprefixexp='' vendorscript='' vendorscriptexp='' -version='5.42.0' -version_patchlevel_string='version 42 subversion 0' +version='5.42.2' +version_patchlevel_string='version 42 subversion 2' versiononly='define' vi='' xlibpth='/usr/lib/386 /lib/386 /usr/lib64/gcc/x86_64-suse-linux/13 /usr/lib64/gcc/x86_64-suse-linux/13/../../../../lib64 /usr/lib64/gcc/x86_64-suse-linux/13/../../..' @@ -1245,7 +1245,7 @@ zcat='' zip='zip' PERL_REVISION=5 PERL_VERSION=42 -PERL_SUBVERSION=0 +PERL_SUBVERSION=2 PERL_API_REVISION=5 PERL_API_VERSION=42 PERL_API_SUBVERSION=0 Index: gnu/usr.bin/perl/Porting/config_H =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/Porting/config_H,v diff -u -p -a -u -p -r1.32 config_H --- gnu/usr.bin/perl/Porting/config_H 26 Dec 2025 22:14:13 -0000 1.32 +++ gnu/usr.bin/perl/Porting/config_H 29 Mar 2026 16:31:42 -0000 @@ -1239,8 +1239,8 @@ * This symbol contains the ~name expanded version of ARCHLIB, to be used * in programs that are not prepared to deal with ~ expansion at run-time. */ -#define ARCHLIB "/opt/perl/lib/5.42.0/x86_64-linux" /**/ -#define ARCHLIB_EXP "/opt/perl/lib/5.42.0/x86_64-linux" /**/ +#define ARCHLIB "/opt/perl/lib/5.42.2/x86_64-linux" /**/ +#define ARCHLIB_EXP "/opt/perl/lib/5.42.2/x86_64-linux" /**/ /* BIN: * This symbol holds the path of the bin directory where the package will @@ -1293,8 +1293,8 @@ * This symbol contains the ~name expanded version of PRIVLIB, to be used * in programs that are not prepared to deal with ~ expansion at run-time. */ -#define PRIVLIB "/opt/perl/lib/5.42.0" /**/ -#define PRIVLIB_EXP "/opt/perl/lib/5.42.0" /**/ +#define PRIVLIB "/opt/perl/lib/5.42.2" /**/ +#define PRIVLIB_EXP "/opt/perl/lib/5.42.2" /**/ /* SITEARCH: * This symbol contains the name of the private library for this package. @@ -1311,8 +1311,8 @@ * This symbol contains the ~name expanded version of SITEARCH, to be used * in programs that are not prepared to deal with ~ expansion at run-time. */ -#define SITEARCH "/opt/perl/lib/site_perl/5.42.0/x86_64-linux" /**/ -#define SITEARCH_EXP "/opt/perl/lib/site_perl/5.42.0/x86_64-linux" /**/ +#define SITEARCH "/opt/perl/lib/site_perl/5.42.2/x86_64-linux" /**/ +#define SITEARCH_EXP "/opt/perl/lib/site_perl/5.42.2/x86_64-linux" /**/ /* SITELIB: * This symbol contains the name of the private library for this package. @@ -1334,8 +1334,8 @@ * removed. The elements in inc_version_list (inc_version_list.U) can * be tacked onto this variable to generate a list of directories to search. */ -#define SITELIB "/opt/perl/lib/site_perl/5.42.0" /**/ -#define SITELIB_EXP "/opt/perl/lib/site_perl/5.42.0" /**/ +#define SITELIB "/opt/perl/lib/site_perl/5.42.2" /**/ +#define SITELIB_EXP "/opt/perl/lib/site_perl/5.42.2" /**/ #define SITELIB_STEM "/opt/perl/lib/site_perl" /**/ /* PERL_VENDORARCH: @@ -4109,7 +4109,7 @@ * script to make sure (one hopes) that it runs with perl and not * some shell. */ -#define STARTPERL "#!/opt/perl/bin/perl5.42.0" /**/ +#define STARTPERL "#!/opt/perl/bin/perl5.42.2" /**/ /* HAS_STDIO_STREAM_ARRAY: * This symbol, if defined, tells that there is an array Index: gnu/usr.bin/perl/Porting/epigraphs.pod =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/Porting/epigraphs.pod,v diff -u -p -a -u -p -r1.16 epigraphs.pod --- gnu/usr.bin/perl/Porting/epigraphs.pod 26 Dec 2025 22:14:13 -0000 1.16 +++ gnu/usr.bin/perl/Porting/epigraphs.pod 29 Mar 2026 16:31:42 -0000 @@ -17,6 +17,121 @@ Consult your favorite dictionary for det =head1 EPIGRAPHS +=head2 v5.43.9 - Mary Ann Evans (under pen name George Eliot), "Middlemarch", 1872 + +L + + "the growing good of the world is partly dependent on unhistoric acts; + and that things are not so ill with you and me as they might have been, + is half owing to the number who lived faithfully a hidden life" + +=head2 v5.43.8 - Raymond Chandler, "The Big Sleep" + +L + + "Would you have a Ben Hur, 1860, Third Edition, the one with the + duplicated line on page 116?" + +=head2 v5.43.7 - Vajra Chandrasekera, "The Saint of Bright Doors" + +L + +"When this door translates", Pipra says, pointing at it. "This side will be +either the front or the back of the bright door. If it's the back, the door +will vanish - we want to know what that looks like. Does it pop out of +existence? Does it make a noise? Is there a puff of air? A farting sound? + +=head2 v5.43.6 - Christopher Hitchens, "Mortality" + +L + +For me, to remember friendship is to recall those conversations that it +seemed a sin to break off: the ones that made the sacrifice of the +following day a trivial one. + +=head2 v5.43.5 - Jean Giono + +L + +He who despises himself will never be happy. + +=head2 v5.43.4 - Helen Keller 1903, quoting John Richard Green 1870 + +L + +Green, the historian, tells us that the world is moved along, not only +by the mighty shoves of its heroes, but also by the aggregate of the +tiny pushes of each honest worker; and that thought alone suffices to +guide me in this dark world and wide. + +=head2 v5.43.3 - Doc Brown, "Back to the Future" + +L + + Where we're going, we don't need roads. + +=head2 v5.43.2 - David Weber, "On Basilisk Station" + +L + + "The bigger the lie, apparently, the more likely the uninformed were to + accept it, simply because they couldn't believe any government would tell + such an absurd story unless it were true." + +=head2 v5.43.1 - Ed Conway, "Material World" + +L + + The water from the brine is evaporated in enormous hot vessels, + which leave the salt about the same consistency as wet sand. + After a run through another oven, what emerges are glistening + pure crystals of salt. I run my hands through the grains as + they emerge, surprised for a moment by how hot they are to touch. + 'This is ultra fine,' says Joe. 'It goes into Wotsits.' + +=head2 v5.42.2-RC1 - Edgar Allan Poe, "The Murders in the Rue Morgue" (in "Tales of Mystery and Imagination") + +L + +Whist has long been noted for its influence upon what is termed the +calculating power; and men of the highest order of intellect have been +known to take an apparently unaccountable delight in it, while eschewing +chess as frivolous. Beyond doubt there is nothing of a similar nature +so greatly tasking the faculty of analysis. The best chess player in +Christendom may be little more than the best player of chess; but +proficiency in whist implies capacity for success in all those more +important undertakings where mind struggles with mind. + +=head2 v5.42.1 - Andrew Benedict, "The Wall-to-Wall Grave" (in "Alfred Hitchcock presents: Stories my mother never told me, Part One") + +L + + 'There are worse crimes than murder,' said the small man in the grey +suit. 'And there are worse punishments than the electric chair.' +[...] + 'Civilization?' the little man questioned, as the bartender drew my +beer. 'What is it, anyway? It's a carefully cultivated myth. We are +just savages living in upholstered caves. Give any man sufficient +provocation and the barbarian will emerge.' + +=head2 v5.42.1-RC1 - "Saki" (H. H. Munro), "Sredni Vashtar" (in "Alfred Hitchcock presents: 'Stories they wouldn't let me do on TV'") + +L + +In the shed that evening there was an innovation in the worship of the +hutch-god. Conradin had been wont to chant his praises, tonight he +asked a boon. +"Do one thing for me, Sredni Vashtar." +The thing was not specified. As Sredni Vashtar was a god he must be +supposed to know. And choking back a sob as he looked at the other +empty corner Conradin went back to the world he so hated. + +=head2 v5.42.0 - Douglas Adams, "The Hitchhiker's Guide to the Galaxy" + +L + + "Forty-two," said Deep Thought, with infinite majesty and calm. + =head2 v5.42.0-RC3 - Bernard de Chartres L @@ -152,6 +267,49 @@ L + +To an anomalous species of terror I found him a bounden slave. "I shall +perish", said he, "I must perish in this deplorable folly. Thus, thus, +and not otherwise, shall I be lost. I dread the events of the future, +not in themselves, but in their results. I shudder at the thought of +any, even the most trivial, incident, which may operate upon this +intolerable agitation of soul. I have, indeed, no abhorrence of danger, +except in its absolute effect--in terror. In this unnerved, in this +pitiable, condition I feel that the period will sooner or later arrive +when I must abandon life and reason together, in some struggle with the +grim phantasm, FEAR." + +=head2 v5.40.3 - J. M. Roberts, "The Penguin History of Europe" + +L + +The Portuguese were already fairly familiar with oceanic waters when +Prince Henry began to mount a series of exploratory voyages in another +direction. [...] Henry died in 1460, but by then his countrymen were +ready to go on south. In 1473 they crossed the Equator and in 1487 +reached the Cape of Good Hope. Ahead lay the Indian Ocean; Arabs had +long traded across it and pilots were available. Beyond it lay even +richer sources of spices. In 1498 Vasco da Gama picked up an Omani +pilot on the east African coast and set off for Asia. In May he dropped +anchor off Calicut, on the west coast of India. For the first time, +Asia was in direct sea-communication with Europe. + +=head2 v5.40.3-RC1 - J. M. Roberts, "The Penguin History of Europe" + +L + +In 1522, thirty years after Columbus' landfall in the Bahamas, another +ship sailing west in the service of Spain completed the first voyage +round the world. It had set out under the command of a Portuguese, +Magellan, who had got as far as the Philippines, where he was killed. +By then he had discovered and sailed through the straits named after him +and with this voyage and its demonstration that the great oceans were +all interconnected, the prologue to the European age can be considered +over. + =head2 v5.40.2 - E. H. Gombrich, trans. Caroline Mustill, "A Little History of the World" L @@ -327,6 +485,35 @@ counterparts across the Atlantic were bu in a Civil War, they embarked on the construction of the Metropolitan Line knowing only one thing for certain - there was no way they were going to be able to run steam trains through it. + +=head2 v5.38.5 - J. M. Roberts, "The Penguin History of Europe" + +L + +In 1495 the first map showing [Columbus's] discoveries appeared, with +Cuba properly marked as an island and not (as Columbus had made his crew +swear it was) part of the Asian mainland. [...] A further important step +followed in 1502, when an Italian in a Portuguese vessel visiting the +coast of what is now Brazil struck southward to sail as far as the +river Plate. Amerigo Vespucci's second voyage demonstrated conclusively +that a whole continent lay to the south of the first great discoveries. +Five years later a German geographer named the new continent in his +honour - America - and the name was later applied to the northern +continent, too. Not until 1726, though, was it to be demonstrated for +certain that it was not joined to Asia in the region of the Bering +Straits. + +=head2 v5.38.5-RC1 - J. M. Roberts, "The Penguin History of Europe" + +L + +Columbus set sail in 1492 and after 69 days his three little ships made +a landfall in the Bahamas. A fortnight later he came to Cuba, which he +named Hispaniola, before returning to Spain. The following year he came +back to explore the islands known ever since as the West Indies (whose +name commemorates Columbus' tenacious belief that he had reached Asia). +His confident leap in the dark had changed world history. Without +knowing it he had discovered a new world. =head2 v5.38.4 - E. H. Gombrich, trans. Caroline Mustill, "A Little History of the World" Index: gnu/usr.bin/perl/Porting/perldelta_template.pod =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/Porting/perldelta_template.pod,v diff -u -p -a -u -p -r1.16 perldelta_template.pod --- gnu/usr.bin/perl/Porting/perldelta_template.pod 26 Dec 2025 22:14:13 -0000 1.16 +++ gnu/usr.bin/perl/Porting/perldelta_template.pod 29 Mar 2026 16:31:42 -0000 @@ -406,7 +406,7 @@ died, add a short obituary here. XXX Generate this with: - perl Porting/acknowledgements.pl v5.42.0..HEAD + perl Porting/acknowledgements.pl v5.42.2..HEAD =head1 Reporting Bugs Index: gnu/usr.bin/perl/Porting/release_managers_guide.pod =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/Porting/release_managers_guide.pod,v diff -u -p -a -u -p -r1.14 release_managers_guide.pod --- gnu/usr.bin/perl/Porting/release_managers_guide.pod 26 Dec 2025 22:14:13 -0000 1.14 +++ gnu/usr.bin/perl/Porting/release_managers_guide.pod 29 Mar 2026 16:31:42 -0000 @@ -3,7 +3,6 @@ =head1 NAME release_managers_guide - Releasing a new version of perl 5.x - Note that things change at each release, so there may be new things not covered here, or tools may need updating. @@ -102,6 +101,9 @@ key steps are missing. If you do use you needs to be taken when setting/pushing the tag and doing the merge (do B use a PR). +As you follow these steps, please record notes of anything that you found +to be unclear; improving this guide is an important part of releasing. + =head2 Release types =over 4 @@ -404,7 +406,7 @@ This comes down to: =head3 Monitor smoke tests for failures Similarly, monitor the smoking of core tests, and try to fix. See -L, L +L, L and L for a summary. See also L which has emailed raw reports. @@ -465,6 +467,20 @@ When doing a MAINT release, check that p Perl Steering Council and Core Team members, in case they have changed since the corresponding stable release has been shipped. +=for checklist skip MAINT BLEAD-POINT + +=head3 Merge BLEAD-POINT perldeltas + +When doing the first RC for BLEAD-FINAL, all perldeltas from the 5.X series +must be merged into F. The process starts with + + ./perl -Ilib Porting/merge-deltas.pl + +The resulting F will need to be edited. In particular, +lists will need to be merged. Sections which were describe changes which +were reverted will need to be removed. Some items may benefit from being +merged into a new summary. + =head3 Update perldelta Get perldelta in a mostly finished state. @@ -476,17 +492,15 @@ time can save you from having to work ou release process. Read F, and try to make sure that -every section it lists is, if necessary, populated and complete. Copy -edit the whole document. +every section it lists is, if necessary, populated and complete. You won't be able to automatically fill in the "Updated Modules" section until after L is updated (as described below in L). -=head3 Bump the version number +=for checklist skip BLEAD-POINT -Do not do this yet for a BLEAD-POINT release! You will do this at the end of -the release process (after building the final tarball, tagging etc). +=head3 Bump the version number Increase the version number (e.g. from 5.12.0 to 5.12.1). @@ -511,9 +525,9 @@ C<5.10.0>-type strings, some of which ne some of which need to be left unchanged. See below in L for more details. -For the first RC release leading up to a BLEAD-FINAL release, update the -description of which releases are now "officially" supported in -F. +For the first RC release leading up to a BLEAD-FINAL release, update +F: both the version support status table and the +description of which releases are now "officially" supported. When doing a BLEAD-POINT or BLEAD-FINAL release, also make sure the C constants in F are in sync with the version @@ -533,7 +547,7 @@ Test your changes: $ git clean -xdf # careful if you don't have local files to keep! $ ./Configure -des -Dusedevel $ make - $ make test + $ make test_harness Do note that at this stage, porting tests will fail. They will continue to fail until you've updated Module::CoreList, as described below. @@ -547,7 +561,7 @@ Commit your changes: $ git commit -a -m 'Bump the perl version in various places for 5.X.Y' At this point you may want to compare the commit with a previous bump to -see if they look similar. See commit f7cf42bb69 for an example of a +see if they look similar. See commit L for an example of a previous version bump. When the version number is bumped, you should also update Module::CoreList @@ -578,7 +592,10 @@ blead release, so you may find nothing t =head3 Update AUTHORS -The AUTHORS file can be updated by running F. +The AUTHORS file can be updated by running: + + $ perl Porting/updateAUTHORS.pl + This shouldn't really be necessary anymore, and in theory nothing should change as our CI should not pass if a commit would result in AUTHORS needing to change, but do it anyway to be sure. Make sure all your changes @@ -645,6 +662,18 @@ permissions aren't a problem, delete the This section describes the actions required to make a release that are performed near to, or on the actual release day. +=head3 Optimize your local setup + +You will be rebuilding perl quite often, so it makes sense to speed up +the building and testing by running it in parallel. For that, you can +optionally set the following environment variables to appropriate values +for your machine: + + export PERL_TEST_HARNESS_ASAP=1 + export HARNESS_OPTIONS=j8 + export TEST_JOBS=8 + export MAKEFLAGS=-j12 + =head3 Re-check earlier actions Review all the actions in the previous section, @@ -717,54 +746,32 @@ F with module version data for the new release -Note that if this is a MAINT release, you should run the following actions -from the maint branch, but commit the C changes in -I and subsequently cherry-pick any releases since the last -maint release and then your recent commit. XXX need a better example - -[ Note that the procedure for handling Module::CoreList in maint branches -is a bit complex, and the RMG currently don't describe a full and -workable approach. The main issue is keeping Module::CoreList -and its version number synchronised across all maint branches, blead and -CPAN, while having to bump its version number for every RC release. -See this brief p5p thread: - - Message-ID: <20130311174402.GZ2294@iabyn.com> - -If you can devise a workable system, feel free to try it out, and to -update the RMG accordingly! - -DAPM May 2013 ] +For BLEAD-POINT, RC and BLEAD-FINAL, run: -F uses www.cpan.org to verify information about dual-lived -modules on CPAN. It can use a full, local CPAN mirror and/or fall back -on HTTP::Tiny to fetch package metadata remotely. - -(If you'd prefer to have a full CPAN mirror, see -L) + $ ./perl -Ilib Porting/corelist.pl cpan -Change to your perl checkout, and if necessary, +Check those files over carefully: - $ make + $ git diff dist/Module-CoreList/lib/Module/CoreList.pm + $ git diff dist/Module-CoreList/lib/Module/CoreList/Utils.pm -Then, If you have a local CPAN mirror, run: +If you have a L, run: $ ./perl -Ilib Porting/corelist.pl ~/my-cpan-mirror -Otherwise, run: +For MAINT, the prodecure is not straightforward and implies to pick past +updates (e.g. from BLEAD-POINT) into the corelist. - $ ./perl -Ilib Porting/corelist.pl cpan - -This will chug for a while, possibly reporting various warnings about -badly-indexed CPAN modules unrelated to the modules actually in core. -Assuming all goes well, it will update -F and possibly -F. +In practice, you should run the previous actions +from the maint branch, but commit the C changes in +I and subsequently cherry-pick any releases since the last +maint release and then your recent commit. -Check those files over carefully: +The main issue is keeping Module::CoreList +and its version number synchronised across all maint branches, blead and +CPAN, while having to bump its version number for every RC release. - $ git diff dist/Module-CoreList/lib/Module/CoreList.pm - $ git diff dist/Module-CoreList/lib/Module/CoreList/Utils.pm +See L. =head4 Bump version in Module::CoreList F @@ -886,7 +893,7 @@ Then build a clean perl and do a full te $ git clean -dxf $ ./Configure -Dusedevel -des $ make - $ make test + $ make test_harness Once all tests pass, commit your changes. @@ -949,8 +956,6 @@ Be sure to commit your changes: =head3 Update patchlevel.h -I - Update F to add a C<-RC1>-or-whatever string; or, if this is a final release, remove it. For example: @@ -984,15 +989,21 @@ Build perl, then make sure it passes its # or if it's an odd-numbered version: $ ./Configure -des -Dusedevel -Dprefix=/tmp/perl-5.X.Y-pretest - $ make test install + $ make test ; make install + +For an odd-numbered version, perl will install itself as +C rather than +C. Check that the output of C and C are as expected, especially as regards version numbers, patch and/or RC levels, and @INC -paths. Note that as they have been built from a git working -directory, they will still identify themselves using git tags and -commits. (Note that for an odd-numbered version, perl will install -itself as C). C will identify itself as: +paths. + +Note that as they have been built from a git working directory, they +will still identify themselves using git tags and commits. + +C (or C) will identify itself as: This is perl 5, version X, subversion Y (v5.X.Y (v5.XX.Z-NNN-gdeadbeef)) @@ -1003,9 +1014,9 @@ Then delete the temporary installation. =head3 Create the release tag -Create the I tag identifying this release (e.g.): +Create the I tag identifying this release: - $ git tag v5.21.4 -m 'Perl 5.21.4' + $ git tag v5.X.Y -m 'Perl 5.X.Y' It is B important that from this point forward, you not push your git changes to the Perl master repository. If anything goes @@ -1122,11 +1133,19 @@ paths. Note that the results may be different without a F<.git/> directory, which is why you should test from the tarball. +=for checklist skip BLEAD-POINT + =head4 Run the Installation Verification Procedure utility $ bin/perlivp + ... + All tests successful. + $ + +=for checklist skip RC MAINT BLEAD-FINAL + +=head4 Run the Installation Verification Procedure utility - # Or, perhaps: $ bin/perlivp5.X.Y ... All tests successful. @@ -1154,15 +1173,24 @@ performing these actions: $ unset PERL5LIB PERL_MB_OPT PERL_LOCAL_LIB_ROOT PERL_MM_OPT +=for checklist skip BLEAD-POINT + =head4 Bootstrap the CPAN client Bootstrap the CPAN client on the clean install: $ bin/cpan - # Or, perhaps: +=for checklist skip RC MAINT BLEAD-FINAL + +=head4 Bootstrap the CPAN client + +Bootstrap the CPAN client on the clean install: + $ bin/cpan5.X.Y +=for checklist skip BLEAD-POINT + =head4 Install the Inline module with CPAN and test it Try installing a popular CPAN module that's reasonably complex and that @@ -1175,7 +1203,23 @@ Check that your perl can run this: $ bin/perl -lwe "use Inline C => q[int f() { return 42;}]; print f" 42 - $ + +=for checklist skip RC MAINT BLEAD-FINAL + +=head4 Install the Inline module with CPAN and test it + +Try installing a popular CPAN module that's reasonably complex and that +has dependencies; for example: + + CPAN> install Inline::C + CPAN> quit + +Check that your perl can run this: + + $ bin/perl5.X.Y -lwe "use Inline C => q[int f() { return 42;}]; print f" + 42 + +=for checklist skip BLEAD-POINT =head4 Make sure that perlbug works @@ -1193,7 +1237,28 @@ Test L with the following: Action (Send/Display/Edit/Subject/Save to File): f Name of file to save message in [perlbug.rep]: -and carefully examine the output (in F), especially +Then carefully examine the output (in F), especially +the "Locally applied patches" section. + +=for checklist skip RC MAINT BLEAD-FINAL + +=head4 Make sure that perlbug works + +Test L with the following: + + $ bin/perlbug5.X.Y + ... + Subject: test bug report + Local perl administrator [yourself]: + Editor [vi]: + Module: + Category [core]: + Severity [low]: + (edit report) + Action (Send/Display/Edit/Subject/Save to File): f + Name of file to save message in [perlbug.rep]: + +Then carefully examine the output (in F), especially the "Locally applied patches" section. =for checklist skip BLEAD-POINT @@ -1261,8 +1326,6 @@ which may be faster. =head3 Wait for indexing -I - Wait until you receive notification emails from the PAUSE indexer confirming that your uploads have been received. IMPORTANT -- you will probably get an email that indexing has failed, due to module permissions. @@ -1272,8 +1335,6 @@ This is considered normal. =head3 Disarm patchlevel.h -I - Disarm the F change; for example, static const char * const local_patches[] = { @@ -1330,26 +1391,23 @@ You can include the customary link to th message reaches the web-visible archives by looking for the X-List-Archive header in your message after receiving it back via perl5-porters. +=for checklist skip RC BLEAD-POINT + =head3 Update the link to the latest perl on perlweb -Submit a pull request to L. For a dev -release, update the link in F. For a stable -release, update F. +Submit a pull request to L to +update the link in F. =for checklist skip RC =head3 Release schedule -I - Tick the entry for your release in F. =for checklist skip RC =head3 Module::CoreList nagging -I - Remind the current maintainer of C to push a new release to CPAN. @@ -1357,8 +1415,6 @@ to CPAN. =head3 New perldelta -I - Create a new perldelta. =over 4 @@ -1370,7 +1426,8 @@ Confirm that you have a clean checkout w =item * Run: - perl Porting/new-perldelta.pl + + $ perl Porting/new-perldelta.pl =item * @@ -1378,13 +1435,24 @@ Run the C commands it outputs t =item * -Verify that the build still works, by running C<./Configure> and -C. (On Win32 use the appropriate make utility). +Verify that the build still works, by running: + + $ ./Configure + $ make test_porting + +(On Win32 use the appropriate make utility). =item * -If F spots errors in the new F, -run C<./perl -MTestInit t/porting/podcheck.t | less> for more detail. +Run: + + $ ./perl t/porting/podcheck.t + +If it spots errors in the new F, run: + + $ ./perl -MTestInit t/porting/podcheck.t | less + +It will give you more details. Skip to the end of its test output to see the options it offers you. =item * @@ -1399,11 +1467,15 @@ At this point you may want to compare th see if they look similar. See commit ba03bc34a4 for an example of a previous version bump. -=for checklist skip MAINT RC +=head3 Push commits + +Finally, push any commits done above. + + $ git push origin .... -=head3 Bump version +=for checklist skip BLEAD-POINT RC MAINT -I +=head3 Bump the feature bundles If this was a BLEAD-FINAL release (i.e. the first release of a new maint series, 5.x.0 where x is even), then bump the version in the blead branch @@ -1416,13 +1488,11 @@ marker); e.g. "5.14" => [qw(switch say state unicode_strings)], + "5.15" => [qw(switch say state unicode_strings)], -Run F to propagate the changes to F. +Run: -Then follow the section L to bump the version -in the remaining files and test and commit. + $ ./perl regen/feature.pl -If this was a BLEAD-POINT release, then just follow the section -L. +It will propagate the changes to F. After bumping the version, follow the section L to ensure all version number references are correct. @@ -1439,6 +1509,56 @@ reports to arise. (The opposite problem introduced later -- shouldn't arise for MAINT releases since they should, in theory, only contain bug fixes but never regressions.)) +=for checklist skip RC MAINT + +=head3 Bump the version number + +Increase the version number (e.g. from 5.12.0 to 5.12.1). + +There is a tool to semi-automate this process: + + $ ./perl -Ilib Porting/bump-perl-version -i 5.10.0 5.10.1 + +Remember that this tool is largely just grepping for '5.10.0' or whatever, +so it will generate false positives. Be careful not change text like +"this was fixed in 5.10.0"! + +Use git status and git diff to select changes you want to keep. + +Be particularly careful with F, which contains a mixture of +C<5.10.0>-type strings, some of which need bumping on every release, and +some of which need to be left unchanged. +See below in L for more details. + +After editing, you may need to regen opcodes: + + $ ./perl -Ilib regen/opcode.pl + +Test your changes: + + $ git clean -xdf # careful if you don't have local files to keep! + $ ./Configure -des -Dusedevel + $ make + $ make test_harness + +Do note that at this stage, porting tests will fail. They will continue +to fail until you've updated Module::CoreList, as described below. + +Commit your changes: + + $ git status + $ git diff + # Review the delta carefully + $ git commit -a -m 'Bump the perl version in various places for 5.X.Y' + +At this point you may want to compare the commit with a previous bump to +see if they look similar. See commit L for an example of a +previous version bump. + +When the version number is bumped, you should also update Module::CoreList +(as described in L) to reflect the new +version number. + =head3 Clean build and test Run a clean build and test to make sure nothing obvious is broken. This is @@ -1448,7 +1568,7 @@ executable built with the bumped version $ git clean -xdf $ ./Configure -des -Dusedevel $ make - $ make test + $ make test_harness In particular, F is intentionally exempted from podchecker tests, to avoid false positives about placeholder text. @@ -1476,18 +1596,10 @@ update its exceptions database. =back -=head3 Push commits - -Finally, push any commits done above. - - $ git push origin .... - =for checklist skip BLEAD-POINT MAINT RC =head3 Create maint branch -I - If this was a BLEAD-FINAL release (i.e. the first release of a new maint series, 5.x.0 where x is even), then create a new maint branch based on the commit tagged as the current release. @@ -1501,8 +1613,6 @@ Assuming you're using git 1.7.x or newer =head3 Copy perldelta.pod to blead -I - Copy the perldelta.pod for this release into blead; for example: $ cd ..../blead @@ -1567,13 +1677,13 @@ and F, run: - $ ./perl -Ilib Porting/corelist.pl cpan + $ ./perl -Ilib Porting/corelist.pl ~/my-cpan-mirror This will update F and F as it did before, @@ -1583,6 +1693,11 @@ but this time adding new sections for th Add the new $Module::CoreList::VERSION to F. + +=item * + +Replace date '????-??-??' per actual planned YYYY-MM-DD in +F. =item * Index: gnu/usr.bin/perl/Porting/release_schedule.pod =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/Porting/release_schedule.pod,v diff -u -p -a -u -p -r1.13 release_schedule.pod --- gnu/usr.bin/perl/Porting/release_schedule.pod 26 Dec 2025 22:14:13 -0000 1.13 +++ gnu/usr.bin/perl/Porting/release_schedule.pod 29 Mar 2026 16:31:42 -0000 @@ -11,22 +11,23 @@ release schedules for the next, current of Perl. Dates with two or more question marks will only be releases if deemed necessary by the Steering Council. +=head2 Perl 5.44 + + 2026-??-?? 5.44.0 + =head2 Perl 5.42 - 2025-??-?? 5.42.0 + 2025-07-02 5.42.0 ✓ Philippe Bruhat + 2026-03-08 5.42.1 ✓ Steve Hay + 2026-03-29 5.42.2 Steve Hay =head2 Perl 5.40 2024-06-09 5.40.0 ✓ Graham Knop 2025-01-18 5.40.1 ✓ Steve Hay 2025-04-13 5.40.2 ✓ Steve Hay - -=head2 Perl 5.38 - - 2023-07-01 5.38.0 ✓ Ricardo Signes - 2023-11-29 5.38.2 ✓ Paul Evans - 2025-01-18 5.38.3 ✓ Steve Hay - 2025-04-13 5.38.4 ✓ Steve Hay + 2025-08-03 5.40.3 ✓ Steve Hay + 2026-03-29 5.40.4 Steve Hay =head1 DEVELOPMENT RELEASE SCHEDULE @@ -42,25 +43,22 @@ When shipping a release, you should incl the next four releases. If a stable version of Perl is released, you should reset the version numbers to the next blead series. -=head2 Perl 5.41 +=head2 Perl 5.43 - 2024-06-10 5.41.0 ✓ Graham K (tag only) - 2024-06-20 5.41.1 ✓ Graham K - 2024-07-20 5.41.2 ✓ Karen Etheridge - 2024-08-20 5.41.3 ✓ Philippe Bruhat - 2024-09-20 5.41.4 ✓ Thibault Duponchelle - 2024-10-20 5.41.5 ✓ Richard Leach - 2024-11-20 5.41.6 ✓ Thibault Duponchelle - 2024-12-20 5.41.7 ✓ Max Maischein - 2025-01-20 5.41.8 ✓ Steve Hay - 2025-02-20 5.41.9 ✓ Richard Leach Contentious changes freeze - 2025-03-20 5.41.10 ✓ Lukas Mai User-visible changes to + 2025-07-04 5.43.0 ✓ Philippe Bruhat (tag only) + 2025-07-20 5.43.1 ✓ Richard Leach + 2025-08-20 5.43.2 ✓ Karen Etheridge + 2025-09-20 5.43.3 ✓ Thibault Duponchelle + 2025-10-22 5.43.4 ✓ Eric Herman + 2025-11-20 5.43.5 ✓ Thibault Duponchelle + 2025-12-20 5.43.6 ✓ Steve Hay + 2026-01-19 5.43.7 ✓ Max Maischein + 2026-02-20 5.43.8 ✓ Richard Leach Contentious changes freeze + 2026-03-20 5.43.9 ✓ Eric Herman User-visible changes to correctly functioning programs freeze - 2025-04-20 5.41.11 ✓ Karen Etheridge Full program freeze - 2025-04-21 5.41.12 ✓ Karen Etheridge - 2025-05-28 5.41.13 ✓ Philippe Bruhat - 2025-0?-?? 5.42.0 ? New perl! + 2026-04-20 5.43.10 Philippe Bruhat Full program freeze + 2026-05-20 5.44.0 New perl! =head1 VICTIMS @@ -81,6 +79,7 @@ consent of the Steering Council.) Florian Ragwitz Jesse Luehrs Jesse Vincent + Karen Etheridge Leon Brocard Matt Trout Matthew Horsfall @@ -92,6 +91,7 @@ consent of the Steering Council.) Stevan Little Steve Hay Tatsuhiko Miyagawa + Thibault Duponchelle Tony Cook Yves Orton Ævar Arnfjörð Bjarmason Index: gnu/usr.bin/perl/Porting/sync-with-cpan =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/Porting/sync-with-cpan,v diff -u -p -a -u -p -r1.9 sync-with-cpan --- gnu/usr.bin/perl/Porting/sync-with-cpan 26 Dec 2025 22:14:13 -0000 1.9 +++ gnu/usr.bin/perl/Porting/sync-with-cpan 29 Mar 2026 16:31:42 -0000 @@ -209,7 +209,7 @@ my $package_file = "$tmpdir/$package"; # my $type_dir = "cpan"; my @problematic = ( - # no current entries as of perl-5.42.0 (July 2025) + # no current entries as of perl-5.42.2 (March 2026) ); Index: gnu/usr.bin/perl/Porting/todo.pod =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/Porting/todo.pod,v diff -u -p -a -u -p -r1.15 todo.pod --- gnu/usr.bin/perl/Porting/todo.pod 26 Dec 2025 22:14:13 -0000 1.15 +++ gnu/usr.bin/perl/Porting/todo.pod 29 Mar 2026 16:31:42 -0000 @@ -1193,7 +1193,7 @@ Lmsg() ; $d->get_Strategy(); $d->get_Level(); - $d->get_BufSize(); + $d->get_Bufsize(); ($i, $status) = new Compress::Raw::Zlib::Inflate( [OPT] ) ; $status = $i->inflate($input, $output [, $eof]) ; @@ -638,7 +638,7 @@ Compress::Raw::Zlib - Low-Level Interfac $i->total_in() ; $i->total_out() ; $i->msg() ; - $d->get_BufSize(); + $d->get_Bufsize(); $crc = adler32($buffer [,$crc]) ; $crc = crc32($buffer [,$crc]) ; @@ -923,7 +923,7 @@ C, C and Returns the compression level being used. -=head2 B<$d-Eget_BufSize()> +=head2 B<$d-Eget_Bufsize()> Returns the buffer size used to carry out the compression. @@ -1215,7 +1215,7 @@ Returns the total number of bytes compre Returns the total number of uncompressed bytes output from inflate. -=head2 B<$d-Eget_BufSize()> +=head2 B<$d-Eget_Bufsize()> Returns the buffer size used to carry out the decompression. @@ -1318,7 +1318,7 @@ Refer to the I documentation for m Returns the version of the I library if this module has been built with the I library. If this module has been built with I in native mode, this function will return a empty string. If this module has been built with I in compat mode, this function will return the Izlib> API -verion that I is supporting. +version that I is supporting. =head2 my $version = Compress::Raw::Zlib::zlibng_version(); @@ -1637,7 +1637,7 @@ See the Changes file. =head1 COPYRIGHT AND LICENSE -Copyright (c) 2005-2024 Paul Marquess. All rights reserved. +Copyright (c) 2005-2026 Paul Marquess. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. Index: gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/t/01version.t =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/t/01version.t,v diff -u -p -a -u -p -r1.4 01version.t --- gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/t/01version.t 26 Dec 2025 22:14:13 -0000 1.4 +++ gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/t/01version.t 29 Mar 2026 16:31:42 -0000 @@ -33,7 +33,7 @@ SKIP: { # If running a github workflow that tests upstream zlib/zlib-ng, check we have the version requested - # Not github or not asking for explicit verson, so skip + # Not github or not asking for explicit version, so skip skip "Not github", 7 if ! (defined $ENV{GITHUB_ACTION} && defined $ENV{ZLIB_VERSION}) ; @@ -74,8 +74,15 @@ SKIP: '2.1.5' => '1.3.0.zlib-ng', '2.1.6' => '1.3.0.zlib-ng', '2.1.7' => '1.3.1.zlib-ng', + '2.1.8' => '1.3.1.zlib-ng', '2.2.0' => '1.3.1.zlib-ng', '2.2.1' => '1.3.1.zlib-ng', + '2.2.2' => '1.3.1.zlib-ng', + '2.2.3' => '1.3.1.zlib-ng', + '2.2.4' => '1.3.1.zlib-ng', + '2.2.5' => '1.3.1.zlib-ng', + '2.3.1' => '1.3.1.zlib-ng', + '2.3.2' => '1.3.1.zlib-ng', ); my $zv = Compress::Raw::Zlib::zlibng_version(); Index: gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/compress.c =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/compress.c,v diff -u -p -a -u -p -r1.6 compress.c --- gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/compress.c 28 Jan 2025 01:06:11 -0000 1.6 +++ gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/compress.c 29 Mar 2026 16:31:42 -0000 @@ -1,5 +1,5 @@ /* compress.c -- compress a memory buffer - * Copyright (C) 1995-2005, 2014, 2016 Jean-loup Gailly, Mark Adler + * Copyright (C) 1995-2026 Jean-loup Gailly, Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -18,13 +18,19 @@ compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_BUF_ERROR if there was not enough room in the output buffer, Z_STREAM_ERROR if the level parameter is invalid. + + The _z versions of the functions take size_t length arguments. */ -int ZEXPORT compress2(Bytef *dest, uLongf *destLen, const Bytef *source, - uLong sourceLen, int level) { +int ZEXPORT compress2_z(Bytef *dest, z_size_t *destLen, const Bytef *source, + z_size_t sourceLen, int level) { z_stream stream; int err; const uInt max = (uInt)-1; - uLong left; + z_size_t left; + + if ((sourceLen > 0 && source == NULL) || + destLen == NULL || (*destLen > 0 && dest == NULL)) + return Z_STREAM_ERROR; left = *destLen; *destLen = 0; @@ -43,23 +49,36 @@ int ZEXPORT compress2(Bytef *dest, uLong do { if (stream.avail_out == 0) { - stream.avail_out = left > (uLong)max ? max : (uInt)left; + stream.avail_out = left > (z_size_t)max ? max : (uInt)left; left -= stream.avail_out; } if (stream.avail_in == 0) { - stream.avail_in = sourceLen > (uLong)max ? max : (uInt)sourceLen; + stream.avail_in = sourceLen > (z_size_t)max ? max : + (uInt)sourceLen; sourceLen -= stream.avail_in; } err = deflate(&stream, sourceLen ? Z_NO_FLUSH : Z_FINISH); } while (err == Z_OK); - *destLen = stream.total_out; + *destLen = (z_size_t)(stream.next_out - dest); deflateEnd(&stream); return err == Z_STREAM_END ? Z_OK : err; } - +int ZEXPORT compress2(Bytef *dest, uLongf *destLen, const Bytef *source, + uLong sourceLen, int level) { + int ret; + z_size_t got = *destLen; + ret = compress2_z(dest, &got, source, sourceLen, level); + *destLen = (uLong)got; + return ret; +} /* =========================================================================== */ +int ZEXPORT compress_z(Bytef *dest, z_size_t *destLen, const Bytef *source, + z_size_t sourceLen) { + return compress2_z(dest, destLen, source, sourceLen, + Z_DEFAULT_COMPRESSION); +} int ZEXPORT compress(Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen) { return compress2(dest, destLen, source, sourceLen, Z_DEFAULT_COMPRESSION); @@ -69,7 +88,12 @@ int ZEXPORT compress(Bytef *dest, uLongf If the default memLevel or windowBits for deflateInit() is changed, then this function needs to be updated. */ +z_size_t ZEXPORT compressBound_z(z_size_t sourceLen) { + z_size_t bound = sourceLen + (sourceLen >> 12) + (sourceLen >> 14) + + (sourceLen >> 25) + 13; + return bound < sourceLen ? (z_size_t)-1 : bound; +} uLong ZEXPORT compressBound(uLong sourceLen) { - return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) + - (sourceLen >> 25) + 13; + z_size_t bound = compressBound_z(sourceLen); + return (uLong)bound != bound ? (uLong)-1 : (uLong)bound; } Index: gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/crc32.c =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/crc32.c,v diff -u -p -a -u -p -r1.8 crc32.c --- gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/crc32.c 28 Jan 2025 01:06:11 -0000 1.8 +++ gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/crc32.c 29 Mar 2026 16:31:42 -0000 @@ -1,5 +1,5 @@ /* crc32.c -- compute the CRC-32 of a data stream - * Copyright (C) 1995-2022 Mark Adler + * Copyright (C) 1995-2026 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h * * This interleaved implementation of a CRC makes use of pipelined multiple @@ -24,11 +24,18 @@ # include # ifndef DYNAMIC_CRC_TABLE # define DYNAMIC_CRC_TABLE -# endif /* !DYNAMIC_CRC_TABLE */ -#endif /* MAKECRCH */ +# endif +#endif +#ifdef DYNAMIC_CRC_TABLE +# define Z_ONCE +#endif #include "zutil.h" /* for Z_U4, Z_U8, z_crc_t, and FAR definitions */ +#ifdef HAVE_S390X_VX +# include "contrib/crc32vx/crc32_vx_hooks.h" +#endif + /* A CRC of a message is computed on N braids of words in the message, where each word consists of W bytes (4 or 8). If N is 3, for example, then three @@ -99,7 +106,8 @@ #endif /* If available, use the ARM processor CRC32 instruction. */ -#if defined(__aarch64__) && defined(__ARM_FEATURE_CRC32) && W == 8 +#if defined(__aarch64__) && defined(__ARM_FEATURE_CRC32) && \ + defined(W) && W == 8 # define ARMCRC32 #endif @@ -152,10 +160,10 @@ local z_word_t byte_swap(z_word_t word) Return a(x) multiplied by b(x) modulo p(x), where p(x) is the CRC polynomial, reflected. For speed, this requires that a not be zero. */ -local z_crc_t multmodp(z_crc_t a, z_crc_t b) { - z_crc_t m, p; +local uLong multmodp(uLong a, uLong b) { + uLong m, p; - m = (z_crc_t)1 << 31; + m = (uLong)1 << 31; p = 0; for (;;) { if (a & m) { @@ -171,12 +179,12 @@ local z_crc_t multmodp(z_crc_t a, z_crc_ /* Return x^(n * 2^k) modulo p(x). Requires that x2n_table[] has been - initialized. + initialized. n must not be negative. */ -local z_crc_t x2nmodp(z_off64_t n, unsigned k) { - z_crc_t p; +local uLong x2nmodp(z_off64_t n, unsigned k) { + uLong p; - p = (z_crc_t)1 << 31; /* x^0 == 1 */ + p = (uLong)1 << 31; /* x^0 == 1 */ while (n) { if (n & 1) p = multmodp(x2n_table[k & 31], p); @@ -204,83 +212,8 @@ local z_crc_t FAR crc_table[256]; local void write_table64(FILE *, const z_word_t FAR *, int); #endif /* MAKECRCH */ -/* - Define a once() function depending on the availability of atomics. If this is - compiled with DYNAMIC_CRC_TABLE defined, and if CRCs will be computed in - multiple threads, and if atomics are not available, then get_crc_table() must - be called to initialize the tables and must return before any threads are - allowed to compute or combine CRCs. - */ - -/* Definition of once functionality. */ -typedef struct once_s once_t; - -/* Check for the availability of atomics. */ -#if defined(__STDC__) && __STDC_VERSION__ >= 201112L && \ - !defined(__STDC_NO_ATOMICS__) - -#include - -/* Structure for once(), which must be initialized with ONCE_INIT. */ -struct once_s { - atomic_flag begun; - atomic_int done; -}; -#define ONCE_INIT {ATOMIC_FLAG_INIT, 0} - -/* - Run the provided init() function exactly once, even if multiple threads - invoke once() at the same time. The state must be a once_t initialized with - ONCE_INIT. - */ -local void once(once_t *state, void (*init)(void)) { - if (!atomic_load(&state->done)) { - if (atomic_flag_test_and_set(&state->begun)) - while (!atomic_load(&state->done)) - ; - else { - init(); - atomic_store(&state->done, 1); - } - } -} - -#else /* no atomics */ - -/* Structure for once(), which must be initialized with ONCE_INIT. */ -struct once_s { - volatile int begun; - volatile int done; -}; -#define ONCE_INIT {0, 0} - -/* Test and set. Alas, not atomic, but tries to minimize the period of - vulnerability. */ -local int test_and_set(int volatile *flag) { - int was; - - was = *flag; - *flag = 1; - return was; -} - -/* Run the provided init() function once. This is not thread-safe. */ -local void once(once_t *state, void (*init)(void)) { - if (!state->done) { - if (test_and_set(&state->begun)) - while (!state->done) - ; - else { - init(); - state->done = 1; - } - } -} - -#endif - /* State for once(). */ -local once_t made = ONCE_INIT; +local z_once_t made = Z_ONCE_INIT; /* Generate tables for a byte-wise 32-bit CRC calculation on the polynomial: @@ -326,7 +259,7 @@ local void make_crc_table(void) { p = (z_crc_t)1 << 30; /* x^1 */ x2n_table[0] = p; for (n = 1; n < 32; n++) - x2n_table[n] = p = multmodp(p, p); + x2n_table[n] = p = (z_crc_t)multmodp(p, p); #ifdef W /* initialize the braiding tables -- needs x2n_table[] */ @@ -529,11 +462,11 @@ local void braid(z_crc_t ltl[][256], z_w int k; z_crc_t i, p, q; for (k = 0; k < w; k++) { - p = x2nmodp((n * w + 3 - k) << 3, 0); + p = (z_crc_t)x2nmodp((n * w + 3 - k) << 3, 0); ltl[k][0] = 0; big[w - 1 - k][0] = 0; for (i = 1; i < 256; i++) { - ltl[k][i] = q = multmodp(i << 24, p); + ltl[k][i] = q = (z_crc_t)multmodp(i << 24, p); big[w - 1 - k][i] = byte_swap(q); } } @@ -548,7 +481,7 @@ local void braid(z_crc_t ltl[][256], z_w */ const z_crc_t FAR * ZEXPORT get_crc_table(void) { #ifdef DYNAMIC_CRC_TABLE - once(&made, make_crc_table); + z_once(&made, make_crc_table); #endif /* DYNAMIC_CRC_TABLE */ return (const z_crc_t FAR *)crc_table; } @@ -572,9 +505,8 @@ const z_crc_t FAR * ZEXPORT get_crc_tabl #define Z_BATCH_ZEROS 0xa10d3d0c /* computed from Z_BATCH = 3990 */ #define Z_BATCH_MIN 800 /* fewest words in a final batch */ -unsigned long ZEXPORT crc32_z(unsigned long crc, const unsigned char FAR *buf, - z_size_t len) { - z_crc_t val; +uLong ZEXPORT crc32_z(uLong crc, const unsigned char FAR *buf, z_size_t len) { + uLong val; z_word_t crc1, crc2; const z_word_t *word; z_word_t val0, val1, val2; @@ -585,7 +517,7 @@ unsigned long ZEXPORT crc32_z(unsigned l if (buf == Z_NULL) return 0; #ifdef DYNAMIC_CRC_TABLE - once(&made, make_crc_table); + z_once(&made, make_crc_table); #endif /* DYNAMIC_CRC_TABLE */ /* Pre-condition the CRC */ @@ -640,7 +572,7 @@ unsigned long ZEXPORT crc32_z(unsigned l } word += 3 * last; num -= 3 * last; - val = x2nmodp(last, 6); + val = x2nmodp((int)last, 6); crc = multmodp(val, crc) ^ crc1; crc = multmodp(val, crc) ^ crc2; } @@ -691,13 +623,12 @@ local z_word_t crc_word_big(z_word_t dat #endif /* ========================================================================= */ -unsigned long ZEXPORT crc32_z(unsigned long crc, const unsigned char FAR *buf, - z_size_t len) { +uLong ZEXPORT crc32_z(uLong crc, const unsigned char FAR *buf, z_size_t len) { /* Return initial CRC, if requested. */ if (buf == Z_NULL) return 0; #ifdef DYNAMIC_CRC_TABLE - once(&made, make_crc_table); + z_once(&made, make_crc_table); #endif /* DYNAMIC_CRC_TABLE */ /* Pre-condition the CRC */ @@ -1012,38 +943,41 @@ unsigned long ZEXPORT crc32_z(unsigned l #endif /* ========================================================================= */ -unsigned long ZEXPORT crc32(unsigned long crc, const unsigned char FAR *buf, - uInt len) { +uLong ZEXPORT crc32(uLong crc, const unsigned char FAR *buf, uInt len) { + #ifdef HAVE_S390X_VX + return crc32_z_hook(crc, buf, len); + #endif return crc32_z(crc, buf, len); } /* ========================================================================= */ -uLong ZEXPORT crc32_combine64(uLong crc1, uLong crc2, z_off64_t len2) { +uLong ZEXPORT crc32_combine_gen64(z_off64_t len2) { + if (len2 < 0) + return 0; #ifdef DYNAMIC_CRC_TABLE - once(&made, make_crc_table); + z_once(&made, make_crc_table); #endif /* DYNAMIC_CRC_TABLE */ - return multmodp(x2nmodp(len2, 3), crc1) ^ (crc2 & 0xffffffff); + return x2nmodp(len2, 3); } /* ========================================================================= */ -uLong ZEXPORT crc32_combine(uLong crc1, uLong crc2, z_off_t len2) { - return crc32_combine64(crc1, crc2, (z_off64_t)len2); +uLong ZEXPORT crc32_combine_gen(z_off_t len2) { + return crc32_combine_gen64((z_off64_t)len2); } /* ========================================================================= */ -uLong ZEXPORT crc32_combine_gen64(z_off64_t len2) { -#ifdef DYNAMIC_CRC_TABLE - once(&made, make_crc_table); -#endif /* DYNAMIC_CRC_TABLE */ - return x2nmodp(len2, 3); +uLong ZEXPORT crc32_combine_op(uLong crc1, uLong crc2, uLong op) { + if (op == 0) + return 0; + return multmodp(op, crc1 & 0xffffffff) ^ (crc2 & 0xffffffff); } /* ========================================================================= */ -uLong ZEXPORT crc32_combine_gen(z_off_t len2) { - return crc32_combine_gen64((z_off64_t)len2); +uLong ZEXPORT crc32_combine64(uLong crc1, uLong crc2, z_off64_t len2) { + return crc32_combine_op(crc1, crc2, crc32_combine_gen64(len2)); } /* ========================================================================= */ -uLong ZEXPORT crc32_combine_op(uLong crc1, uLong crc2, uLong op) { - return multmodp(op, crc1) ^ (crc2 & 0xffffffff); +uLong ZEXPORT crc32_combine(uLong crc1, uLong crc2, z_off_t len2) { + return crc32_combine64(crc1, crc2, (z_off64_t)len2); } Index: gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/deflate.c =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/deflate.c,v diff -u -p -a -u -p -r1.12 deflate.c --- gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/deflate.c 28 Jan 2025 01:06:11 -0000 1.12 +++ gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/deflate.c 29 Mar 2026 16:31:42 -0000 @@ -1,5 +1,5 @@ /* deflate.c -- compress data using the deflation algorithm - * Copyright (C) 1995-2024 Jean-loup Gailly and Mark Adler + * Copyright (C) 1995-2026 Jean-loup Gailly and Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -37,7 +37,7 @@ * REFERENCES * * Deutsch, L.P.,"DEFLATE Compressed Data Format Specification". - * Available in http://tools.ietf.org/html/rfc1951 + * Available at https://datatracker.ietf.org/doc/html/rfc1951 * * A description of the Rabin and Karp algorithm is given in the book * "Algorithms" by R. Sedgewick, Addison-Wesley, p252. @@ -52,7 +52,7 @@ #include "deflate.h" const char deflate_copyright[] = - " deflate 1.3.1 Copyright 1995-2024 Jean-loup Gailly and Mark Adler "; + " deflate 1.3.2 Copyright 1995-2026 Jean-loup Gailly and Mark Adler "; /* If you use the zlib library in a product, an acknowledgment is welcome in the documentation of your product. If for some reason you cannot @@ -170,8 +170,8 @@ local const config configuration_table[1 #define CLEAR_HASH(s) \ do { \ s->head[s->hash_size - 1] = NIL; \ - zmemzero((Bytef *)s->head, \ - (unsigned)(s->hash_size - 1)*sizeof(*s->head)); \ + zmemzero(s->head, (unsigned)(s->hash_size - 1)*sizeof(*s->head)); \ + s->slid = 0; \ } while (0) /* =========================================================================== @@ -195,8 +195,8 @@ local void slide_hash(deflate_state *s) m = *--p; *p = (Pos)(m >= wsize ? m - wsize : NIL); } while (--n); - n = wsize; #ifndef FASTEST + n = wsize; p = &s->prev[n]; do { m = *--p; @@ -206,6 +206,7 @@ local void slide_hash(deflate_state *s) */ } while (--n); #endif + s->slid = 1; } /* =========================================================================== @@ -259,7 +260,14 @@ local void fill_window(deflate_state *s) more = (unsigned)(s->window_size -(ulg)s->lookahead -(ulg)s->strstart); /* Deal with !@#$% 64K limit: */ +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable: 4127) +#endif if (sizeof(int) <= 2) { +#ifdef _MSC_VER +#pragma warning(pop) +#endif if (more == 0 && s->strstart == 0 && s->lookahead == 0) { more = wsize; @@ -431,6 +439,7 @@ int ZEXPORT deflateInit2_(z_streamp strm if (windowBits == 8) windowBits = 9; /* until 256-byte window bug fixed */ s = (deflate_state *) ZALLOC(strm, 1, sizeof(deflate_state)); if (s == Z_NULL) return Z_MEM_ERROR; + zmemzero(s, sizeof(deflate_state)); strm->state = (struct internal_state FAR *)s; s->strm = strm; s->status = INIT_STATE; /* to pass state test in deflateReset() */ @@ -712,10 +721,23 @@ int ZEXPORT deflateSetHeader(z_streamp s /* ========================================================================= */ int ZEXPORT deflatePending(z_streamp strm, unsigned *pending, int *bits) { if (deflateStateCheck(strm)) return Z_STREAM_ERROR; - if (pending != Z_NULL) - *pending = strm->state->pending; if (bits != Z_NULL) *bits = strm->state->bi_valid; + if (pending != Z_NULL) { + *pending = (unsigned)strm->state->pending; + if (*pending != strm->state->pending) { + *pending = (unsigned)-1; + return Z_BUF_ERROR; + } + } + return Z_OK; +} + +/* ========================================================================= */ +int ZEXPORT deflateUsed(z_streamp strm, int *bits) { + if (deflateStateCheck(strm)) return Z_STREAM_ERROR; + if (bits != Z_NULL) + *bits = strm->state->bi_used; return Z_OK; } @@ -831,28 +853,34 @@ int ZEXPORT deflateTune(z_streamp strm, * * Shifts are used to approximate divisions, for speed. */ -uLong ZEXPORT deflateBound(z_streamp strm, uLong sourceLen) { +z_size_t ZEXPORT deflateBound_z(z_streamp strm, z_size_t sourceLen) { deflate_state *s; - uLong fixedlen, storelen, wraplen; + z_size_t fixedlen, storelen, wraplen, bound; /* upper bound for fixed blocks with 9-bit literals and length 255 (memLevel == 2, which is the lowest that may not use stored blocks) -- ~13% overhead plus a small constant */ fixedlen = sourceLen + (sourceLen >> 3) + (sourceLen >> 8) + (sourceLen >> 9) + 4; + if (fixedlen < sourceLen) + fixedlen = (z_size_t)-1; /* upper bound for stored blocks with length 127 (memLevel == 1) -- ~4% overhead plus a small constant */ storelen = sourceLen + (sourceLen >> 5) + (sourceLen >> 7) + (sourceLen >> 11) + 7; + if (storelen < sourceLen) + storelen = (z_size_t)-1; - /* if can't get parameters, return larger bound plus a zlib wrapper */ - if (deflateStateCheck(strm)) - return (fixedlen > storelen ? fixedlen : storelen) + 6; + /* if can't get parameters, return larger bound plus a wrapper */ + if (deflateStateCheck(strm)) { + bound = fixedlen > storelen ? fixedlen : storelen; + return bound + 18 < bound ? (z_size_t)-1 : bound + 18; + } /* compute wrapper length */ s = strm->state; - switch (s->wrap) { + switch (s->wrap < 0 ? -s->wrap : s->wrap) { case 0: /* raw deflate */ wraplen = 0; break; @@ -882,18 +910,25 @@ uLong ZEXPORT deflateBound(z_streamp str break; #endif default: /* for compiler happiness */ - wraplen = 6; + wraplen = 18; } /* if not default parameters, return one of the conservative bounds */ - if (s->w_bits != 15 || s->hash_bits != 8 + 7) - return (s->w_bits <= s->hash_bits && s->level ? fixedlen : storelen) + - wraplen; + if (s->w_bits != 15 || s->hash_bits != 8 + 7) { + bound = s->w_bits <= s->hash_bits && s->level ? fixedlen : + storelen; + return bound + wraplen < bound ? (z_size_t)-1 : bound + wraplen; + } /* default settings: return tight bound for that case -- ~0.03% overhead plus a small constant */ - return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) + - (sourceLen >> 25) + 13 - 6 + wraplen; + bound = sourceLen + (sourceLen >> 12) + (sourceLen >> 14) + + (sourceLen >> 25) + 13 - 6 + wraplen; + return bound < sourceLen ? (z_size_t)-1 : bound; +} +uLong ZEXPORT deflateBound(z_streamp strm, uLong sourceLen) { + z_size_t bound = deflateBound_z(strm, sourceLen); + return (uLong)bound != bound ? (uLong)-1 : (uLong)bound; } /* ========================================================================= @@ -917,8 +952,8 @@ local void flush_pending(z_streamp strm) deflate_state *s = strm->state; _tr_flush_bits(s); - len = s->pending; - if (len > strm->avail_out) len = strm->avail_out; + len = s->pending > strm->avail_out ? strm->avail_out : + (unsigned)s->pending; if (len == 0) return; zmemcpy(strm->next_out, s->pending_out, len); @@ -938,8 +973,8 @@ local void flush_pending(z_streamp strm) #define HCRC_UPDATE(beg) \ do { \ if (s->gzhead->hcrc && s->pending > (beg)) \ - strm->adler = crc32(strm->adler, s->pending_buf + (beg), \ - s->pending - (beg)); \ + strm->adler = crc32_z(strm->adler, s->pending_buf + (beg), \ + s->pending - (beg)); \ } while (0) /* ========================================================================= */ @@ -1073,8 +1108,8 @@ int ZEXPORT deflate(z_streamp strm, int put_byte(s, (s->gzhead->extra_len >> 8) & 0xff); } if (s->gzhead->hcrc) - strm->adler = crc32(strm->adler, s->pending_buf, - s->pending); + strm->adler = crc32_z(strm->adler, s->pending_buf, + s->pending); s->gzindex = 0; s->status = EXTRA_STATE; } @@ -1082,9 +1117,9 @@ int ZEXPORT deflate(z_streamp strm, int if (s->status == EXTRA_STATE) { if (s->gzhead->extra != Z_NULL) { ulg beg = s->pending; /* start of bytes to update crc */ - uInt left = (s->gzhead->extra_len & 0xffff) - s->gzindex; + ulg left = (s->gzhead->extra_len & 0xffff) - s->gzindex; while (s->pending + left > s->pending_buf_size) { - uInt copy = s->pending_buf_size - s->pending; + ulg copy = s->pending_buf_size - s->pending; zmemcpy(s->pending_buf + s->pending, s->gzhead->extra + s->gzindex, copy); s->pending = s->pending_buf_size; @@ -1295,12 +1330,13 @@ int ZEXPORT deflateCopy(z_streamp dest, ss = source->state; - zmemcpy((voidpf)dest, (voidpf)source, sizeof(z_stream)); + zmemcpy(dest, source, sizeof(z_stream)); ds = (deflate_state *) ZALLOC(dest, 1, sizeof(deflate_state)); if (ds == Z_NULL) return Z_MEM_ERROR; + zmemzero(ds, sizeof(deflate_state)); dest->state = (struct internal_state FAR *) ds; - zmemcpy((voidpf)ds, (voidpf)ss, sizeof(deflate_state)); + zmemcpy(ds, ss, sizeof(deflate_state)); ds->strm = dest; ds->window = (Bytef *) ZALLOC(dest, ds->w_size, 2*sizeof(Byte)); @@ -1313,18 +1349,23 @@ int ZEXPORT deflateCopy(z_streamp dest, deflateEnd (dest); return Z_MEM_ERROR; } - /* following zmemcpy do not work for 16-bit MSDOS */ - zmemcpy(ds->window, ss->window, ds->w_size * 2 * sizeof(Byte)); - zmemcpy((voidpf)ds->prev, (voidpf)ss->prev, ds->w_size * sizeof(Pos)); - zmemcpy((voidpf)ds->head, (voidpf)ss->head, ds->hash_size * sizeof(Pos)); - zmemcpy(ds->pending_buf, ss->pending_buf, ds->lit_bufsize * LIT_BUFS); + /* following zmemcpy's do not work for 16-bit MSDOS */ + zmemcpy(ds->window, ss->window, ss->high_water); + zmemcpy(ds->prev, ss->prev, + (ss->slid || ss->strstart - ss->insert > ds->w_size ? ds->w_size : + ss->strstart - ss->insert) * sizeof(Pos)); + zmemcpy(ds->head, ss->head, ds->hash_size * sizeof(Pos)); ds->pending_out = ds->pending_buf + (ss->pending_out - ss->pending_buf); + zmemcpy(ds->pending_out, ss->pending_out, ss->pending); #ifdef LIT_MEM ds->d_buf = (ushf *)(ds->pending_buf + (ds->lit_bufsize << 1)); ds->l_buf = ds->pending_buf + (ds->lit_bufsize << 2); + zmemcpy(ds->d_buf, ss->d_buf, ss->sym_next * sizeof(ush)); + zmemcpy(ds->l_buf, ss->l_buf, ss->sym_next); #else ds->sym_buf = ds->pending_buf + ds->lit_bufsize; + zmemcpy(ds->sym_buf, ss->sym_buf, ss->sym_next); #endif ds->l_desc.dyn_tree = ds->dyn_ltree; @@ -1347,9 +1388,9 @@ int ZEXPORT deflateCopy(z_streamp dest, */ local uInt longest_match(deflate_state *s, IPos cur_match) { unsigned chain_length = s->max_chain_length;/* max hash chain length */ - register Bytef *scan = s->window + s->strstart; /* current string */ - register Bytef *match; /* matched string */ - register int len; /* length of current match */ + Bytef *scan = s->window + s->strstart; /* current string */ + Bytef *match; /* matched string */ + int len; /* length of current match */ int best_len = (int)s->prev_length; /* best match length so far */ int nice_match = s->nice_match; /* stop if match long enough */ IPos limit = s->strstart > (IPos)MAX_DIST(s) ? @@ -1364,13 +1405,13 @@ local uInt longest_match(deflate_state * /* Compare two bytes at a time. Note: this is not always beneficial. * Try with and without -DUNALIGNED_OK to check. */ - register Bytef *strend = s->window + s->strstart + MAX_MATCH - 1; - register ush scan_start = *(ushf*)scan; - register ush scan_end = *(ushf*)(scan + best_len - 1); + Bytef *strend = s->window + s->strstart + MAX_MATCH - 1; + ush scan_start = *(ushf*)scan; + ush scan_end = *(ushf*)(scan + best_len - 1); #else - register Bytef *strend = s->window + s->strstart + MAX_MATCH; - register Byte scan_end1 = scan[best_len - 1]; - register Byte scan_end = scan[best_len]; + Bytef *strend = s->window + s->strstart + MAX_MATCH; + Byte scan_end1 = scan[best_len - 1]; + Byte scan_end = scan[best_len]; #endif /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16. @@ -1494,10 +1535,10 @@ local uInt longest_match(deflate_state * * Optimized version for FASTEST only */ local uInt longest_match(deflate_state *s, IPos cur_match) { - register Bytef *scan = s->window + s->strstart; /* current string */ - register Bytef *match; /* matched string */ - register int len; /* length of current match */ - register Bytef *strend = s->window + s->strstart + MAX_MATCH; + Bytef *scan = s->window + s->strstart; /* current string */ + Bytef *match; /* matched string */ + int len; /* length of current match */ + Bytef *strend = s->window + s->strstart + MAX_MATCH; /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16. * It is easy to get rid of this optimization if necessary. @@ -1557,7 +1598,7 @@ local uInt longest_match(deflate_state * local void check_match(deflate_state *s, IPos start, IPos match, int length) { /* check that the match is indeed a match */ Bytef *back = s->window + (int)match, *here = s->window + start; - IPos len = length; + IPos len = (IPos)length; if (match == (IPos)-1) { /* match starts one byte before the current window -- just compare the subsequent length-1 bytes */ @@ -1629,13 +1670,14 @@ local block_state deflate_stored(deflate * this is 32K. This can be as small as 507 bytes for memLevel == 1. For * large input and output buffers, the stored block size will be larger. */ - unsigned min_block = MIN(s->pending_buf_size - 5, s->w_size); + unsigned min_block = (unsigned)(MIN(s->pending_buf_size - 5, s->w_size)); /* Copy as many min_block or larger stored blocks directly to next_out as * possible. If flushing, copy the remaining available input to next_out as * stored blocks, if there is enough space. */ - unsigned len, left, have, last = 0; + int last = 0; + unsigned len, left, have; unsigned used = s->strm->avail_in; do { /* Set len to the maximum size block that we can copy directly with the @@ -1643,12 +1685,12 @@ local block_state deflate_stored(deflate * would be copied from what's left in the window. */ len = MAX_STORED; /* maximum deflate stored block length */ - have = (s->bi_valid + 42) >> 3; /* number of header bytes */ + have = ((unsigned)s->bi_valid + 42) >> 3; /* bytes in header */ if (s->strm->avail_out < have) /* need room for header */ break; /* maximum stored block length that will fit in avail_out: */ have = s->strm->avail_out - have; - left = s->strstart - s->block_start; /* bytes left in window */ + left = (unsigned)(s->strstart - s->block_start); /* window bytes */ if (len > (ulg)left + s->strm->avail_in) len = left + s->strm->avail_in; /* limit len to the input */ if (len > have) @@ -1671,10 +1713,10 @@ local block_state deflate_stored(deflate _tr_stored_block(s, (char *)0, 0L, last); /* Replace the lengths in the dummy stored block with len. */ - s->pending_buf[s->pending - 4] = len; - s->pending_buf[s->pending - 3] = len >> 8; - s->pending_buf[s->pending - 2] = ~len; - s->pending_buf[s->pending - 1] = ~len >> 8; + s->pending_buf[s->pending - 4] = (Bytef)len; + s->pending_buf[s->pending - 3] = (Bytef)(len >> 8); + s->pending_buf[s->pending - 2] = (Bytef)~len; + s->pending_buf[s->pending - 1] = (Bytef)(~len >> 8); /* Write the stored block header bytes. */ flush_pending(s->strm); @@ -1745,8 +1787,10 @@ local block_state deflate_stored(deflate s->high_water = s->strstart; /* If the last block was written to next_out, then done. */ - if (last) + if (last) { + s->bi_used = 8; return finish_done; + } /* If flushing and all input has been consumed, then done. */ if (flush != Z_NO_FLUSH && flush != Z_FINISH && @@ -1754,7 +1798,7 @@ local block_state deflate_stored(deflate return block_done; /* Fill the window with any remaining input. */ - have = s->window_size - s->strstart; + have = (unsigned)(s->window_size - s->strstart); if (s->strm->avail_in > have && s->block_start >= (long)s->w_size) { /* Slide the window down. */ s->block_start -= s->w_size; @@ -1781,11 +1825,11 @@ local block_state deflate_stored(deflate * have enough input for a worthy block, or if flushing and there is enough * room for the remaining input as a stored block in the pending buffer. */ - have = (s->bi_valid + 42) >> 3; /* number of header bytes */ + have = ((unsigned)s->bi_valid + 42) >> 3; /* bytes in header */ /* maximum stored block length that will fit in pending: */ - have = MIN(s->pending_buf_size - have, MAX_STORED); + have = (unsigned)MIN(s->pending_buf_size - have, MAX_STORED); min_block = MIN(have, s->w_size); - left = s->strstart - s->block_start; + left = (unsigned)(s->strstart - s->block_start); if (left >= min_block || ((left || flush == Z_FINISH) && flush != Z_NO_FLUSH && s->strm->avail_in == 0 && left <= have)) { @@ -1798,6 +1842,8 @@ local block_state deflate_stored(deflate } /* We've done all we can with the available input and output. */ + if (last) + s->bi_used = 8; return last ? finish_started : need_more; } @@ -1846,7 +1892,7 @@ local block_state deflate_fast(deflate_s /* longest_match() sets match_start */ } if (s->match_length >= MIN_MATCH) { - check_match(s, s->strstart, s->match_start, s->match_length); + check_match(s, s->strstart, s->match_start, (int)s->match_length); _tr_tally_dist(s, s->strstart - s->match_start, s->match_length - MIN_MATCH, bflush); @@ -1968,7 +2014,7 @@ local block_state deflate_slow(deflate_s uInt max_insert = s->strstart + s->lookahead - MIN_MATCH; /* Do not insert strings in hash table beyond this. */ - check_match(s, s->strstart - 1, s->prev_match, s->prev_length); + check_match(s, s->strstart - 1, s->prev_match, (int)s->prev_length); _tr_tally_dist(s, s->strstart - 1 - s->prev_match, s->prev_length - MIN_MATCH, bflush); @@ -2076,7 +2122,7 @@ local block_state deflate_rle(deflate_st /* Emit match if have run of MIN_MATCH or longer, else emit literal */ if (s->match_length >= MIN_MATCH) { - check_match(s, s->strstart, s->strstart - 1, s->match_length); + check_match(s, s->strstart, s->strstart - 1, (int)s->match_length); _tr_tally_dist(s, 1, s->match_length - MIN_MATCH, bflush); Index: gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/deflate.h =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/deflate.h,v diff -u -p -a -u -p -r1.11 deflate.h --- gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/deflate.h 28 Jan 2025 01:06:11 -0000 1.11 +++ gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/deflate.h 29 Mar 2026 16:31:42 -0000 @@ -1,5 +1,5 @@ /* deflate.h -- internal compression state - * Copyright (C) 1995-2024 Jean-loup Gailly + * Copyright (C) 1995-2026 Jean-loup Gailly * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -271,6 +271,9 @@ typedef struct internal_state { /* Number of valid bits in bi_buf. All bits above the last valid bit * are always zero. */ + int bi_used; + /* Last number of used bits when going to a byte boundary. + */ ulg high_water; /* High water mark offset in window for initialized bytes -- bytes above @@ -278,6 +281,9 @@ typedef struct internal_state { * longest match routines access bytes past the input. This is then * updated to the new high water mark. */ + + int slid; + /* True if the hash table has been slid since it was cleared. */ } FAR deflate_state; Index: gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/infback.c =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/infback.c,v diff -u -p -a -u -p -r1.1.1.8 infback.c --- gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/infback.c 28 Jan 2025 01:04:23 -0000 1.1.1.8 +++ gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/infback.c 29 Mar 2026 16:31:42 -0000 @@ -1,5 +1,5 @@ /* infback.c -- inflate using a call-back interface - * Copyright (C) 1995-2022 Mark Adler + * Copyright (C) 1995-2026 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -46,7 +46,7 @@ int ZEXPORT inflateBackInit_(z_streamp s #ifdef Z_SOLO return Z_STREAM_ERROR; #else - strm->zfree = zcfree; + strm->zfree = zcfree; #endif state = (struct inflate_state FAR *)ZALLOC(strm, 1, sizeof(struct inflate_state)); @@ -63,57 +63,6 @@ int ZEXPORT inflateBackInit_(z_streamp s return Z_OK; } -/* - Return state with length and distance decoding tables and index sizes set to - fixed code decoding. Normally this returns fixed tables from inffixed.h. - If BUILDFIXED is defined, then instead this routine builds the tables the - first time it's called, and returns those tables the first time and - thereafter. This reduces the size of the code by about 2K bytes, in - exchange for a little execution time. However, BUILDFIXED should not be - used for threaded applications, since the rewriting of the tables and virgin - may not be thread-safe. - */ -local void fixedtables(struct inflate_state FAR *state) { -#ifdef BUILDFIXED - static int virgin = 1; - static code *lenfix, *distfix; - static code fixed[544]; - - /* build fixed huffman tables if first call (may not be thread safe) */ - if (virgin) { - unsigned sym, bits; - static code *next; - - /* literal/length table */ - sym = 0; - while (sym < 144) state->lens[sym++] = 8; - while (sym < 256) state->lens[sym++] = 9; - while (sym < 280) state->lens[sym++] = 7; - while (sym < 288) state->lens[sym++] = 8; - next = fixed; - lenfix = next; - bits = 9; - inflate_table(LENS, state->lens, 288, &(next), &(bits), state->work); - - /* distance table */ - sym = 0; - while (sym < 32) state->lens[sym++] = 5; - distfix = next; - bits = 5; - inflate_table(DISTS, state->lens, 32, &(next), &(bits), state->work); - - /* do this just once */ - virgin = 0; - } -#else /* !BUILDFIXED */ -# include "inffixed.h" -#endif /* BUILDFIXED */ - state->lencode = lenfix; - state->lenbits = 9; - state->distcode = distfix; - state->distbits = 5; -} - /* Macros for inflateBack(): */ /* Load returned state from inflate_fast() */ @@ -293,7 +242,7 @@ int ZEXPORT inflateBack(z_streamp strm, state->mode = STORED; break; case 1: /* fixed block */ - fixedtables(state); + inflate_fixed(state); Tracev((stderr, "inflate: fixed codes block%s\n", state->last ? " (last)" : "")); state->mode = LEN; /* decode codes */ @@ -303,8 +252,8 @@ int ZEXPORT inflateBack(z_streamp strm, state->last ? " (last)" : "")); state->mode = TABLE; break; - case 3: - strm->msg = (char *)"invalid block type"; + default: + strm->msg = (z_const char *)"invalid block type"; state->mode = BAD; } DROPBITS(2); @@ -315,7 +264,7 @@ int ZEXPORT inflateBack(z_streamp strm, BYTEBITS(); /* go to byte boundary */ NEEDBITS(32); if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) { - strm->msg = (char *)"invalid stored block lengths"; + strm->msg = (z_const char *)"invalid stored block lengths"; state->mode = BAD; break; } @@ -353,7 +302,8 @@ int ZEXPORT inflateBack(z_streamp strm, DROPBITS(4); #ifndef PKZIP_BUG_WORKAROUND if (state->nlen > 286 || state->ndist > 30) { - strm->msg = (char *)"too many length or distance symbols"; + strm->msg = (z_const char *) + "too many length or distance symbols"; state->mode = BAD; break; } @@ -375,7 +325,7 @@ int ZEXPORT inflateBack(z_streamp strm, ret = inflate_table(CODES, state->lens, 19, &(state->next), &(state->lenbits), state->work); if (ret) { - strm->msg = (char *)"invalid code lengths set"; + strm->msg = (z_const char *)"invalid code lengths set"; state->mode = BAD; break; } @@ -398,7 +348,8 @@ int ZEXPORT inflateBack(z_streamp strm, NEEDBITS(here.bits + 2); DROPBITS(here.bits); if (state->have == 0) { - strm->msg = (char *)"invalid bit length repeat"; + strm->msg = (z_const char *) + "invalid bit length repeat"; state->mode = BAD; break; } @@ -421,7 +372,8 @@ int ZEXPORT inflateBack(z_streamp strm, DROPBITS(7); } if (state->have + copy > state->nlen + state->ndist) { - strm->msg = (char *)"invalid bit length repeat"; + strm->msg = (z_const char *) + "invalid bit length repeat"; state->mode = BAD; break; } @@ -435,7 +387,8 @@ int ZEXPORT inflateBack(z_streamp strm, /* check for end-of-block code (better have one) */ if (state->lens[256] == 0) { - strm->msg = (char *)"invalid code -- missing end-of-block"; + strm->msg = (z_const char *) + "invalid code -- missing end-of-block"; state->mode = BAD; break; } @@ -449,7 +402,7 @@ int ZEXPORT inflateBack(z_streamp strm, ret = inflate_table(LENS, state->lens, state->nlen, &(state->next), &(state->lenbits), state->work); if (ret) { - strm->msg = (char *)"invalid literal/lengths set"; + strm->msg = (z_const char *)"invalid literal/lengths set"; state->mode = BAD; break; } @@ -458,7 +411,7 @@ int ZEXPORT inflateBack(z_streamp strm, ret = inflate_table(DISTS, state->lens + state->nlen, state->ndist, &(state->next), &(state->distbits), state->work); if (ret) { - strm->msg = (char *)"invalid distances set"; + strm->msg = (z_const char *)"invalid distances set"; state->mode = BAD; break; } @@ -517,7 +470,7 @@ int ZEXPORT inflateBack(z_streamp strm, /* invalid code */ if (here.op & 64) { - strm->msg = (char *)"invalid literal/length code"; + strm->msg = (z_const char *)"invalid literal/length code"; state->mode = BAD; break; } @@ -549,7 +502,7 @@ int ZEXPORT inflateBack(z_streamp strm, } DROPBITS(here.bits); if (here.op & 64) { - strm->msg = (char *)"invalid distance code"; + strm->msg = (z_const char *)"invalid distance code"; state->mode = BAD; break; } @@ -564,7 +517,7 @@ int ZEXPORT inflateBack(z_streamp strm, } if (state->offset > state->wsize - (state->whave < state->wsize ? left : 0)) { - strm->msg = (char *)"invalid distance too far back"; + strm->msg = (z_const char *)"invalid distance too far back"; state->mode = BAD; break; } Index: gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/inffast.c =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/inffast.c,v diff -u -p -a -u -p -r1.1.1.6 inffast.c --- gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/inffast.c 28 Jan 2025 01:04:23 -0000 1.1.1.6 +++ gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/inffast.c 29 Mar 2026 16:31:42 -0000 @@ -1,5 +1,5 @@ /* inffast.c -- fast decoding - * Copyright (C) 1995-2017 Mark Adler + * Copyright (C) 1995-2026 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -155,7 +155,8 @@ void ZLIB_INTERNAL inflate_fast(z_stream dist += (unsigned)hold & ((1U << op) - 1); #ifdef INFLATE_STRICT if (dist > dmax) { - strm->msg = (char *)"invalid distance too far back"; + strm->msg = (z_const char *) + "invalid distance too far back"; state->mode = BAD; break; } @@ -168,8 +169,8 @@ void ZLIB_INTERNAL inflate_fast(z_stream op = dist - op; /* distance back in window */ if (op > whave) { if (state->sane) { - strm->msg = - (char *)"invalid distance too far back"; + strm->msg = (z_const char *) + "invalid distance too far back"; state->mode = BAD; break; } @@ -265,7 +266,7 @@ void ZLIB_INTERNAL inflate_fast(z_stream goto dodist; } else { - strm->msg = (char *)"invalid distance code"; + strm->msg = (z_const char *)"invalid distance code"; state->mode = BAD; break; } @@ -280,7 +281,7 @@ void ZLIB_INTERNAL inflate_fast(z_stream break; } else { - strm->msg = (char *)"invalid literal/length code"; + strm->msg = (z_const char *)"invalid literal/length code"; state->mode = BAD; break; } Index: gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/inffixed.h =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/inffixed.h,v diff -u -p -a -u -p -r1.1.1.2 inffixed.h --- gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/inffixed.h 24 Mar 2014 14:58:49 -0000 1.1.1.2 +++ gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/inffixed.h 29 Mar 2026 16:31:42 -0000 @@ -1,94 +1,94 @@ - /* inffixed.h -- table for decoding fixed codes - * Generated automatically by makefixed(). - */ +/* inffixed.h -- table for decoding fixed codes + * Generated automatically by makefixed(). + */ - /* WARNING: this file should *not* be used by applications. - It is part of the implementation of this library and is - subject to change. Applications should only use zlib.h. - */ +/* WARNING: this file should *not* be used by applications. + It is part of the implementation of this library and is + subject to change. Applications should only use zlib.h. + */ - static const code lenfix[512] = { - {96,7,0},{0,8,80},{0,8,16},{20,8,115},{18,7,31},{0,8,112},{0,8,48}, - {0,9,192},{16,7,10},{0,8,96},{0,8,32},{0,9,160},{0,8,0},{0,8,128}, - {0,8,64},{0,9,224},{16,7,6},{0,8,88},{0,8,24},{0,9,144},{19,7,59}, - {0,8,120},{0,8,56},{0,9,208},{17,7,17},{0,8,104},{0,8,40},{0,9,176}, - {0,8,8},{0,8,136},{0,8,72},{0,9,240},{16,7,4},{0,8,84},{0,8,20}, - {21,8,227},{19,7,43},{0,8,116},{0,8,52},{0,9,200},{17,7,13},{0,8,100}, - {0,8,36},{0,9,168},{0,8,4},{0,8,132},{0,8,68},{0,9,232},{16,7,8}, - {0,8,92},{0,8,28},{0,9,152},{20,7,83},{0,8,124},{0,8,60},{0,9,216}, - {18,7,23},{0,8,108},{0,8,44},{0,9,184},{0,8,12},{0,8,140},{0,8,76}, - {0,9,248},{16,7,3},{0,8,82},{0,8,18},{21,8,163},{19,7,35},{0,8,114}, - {0,8,50},{0,9,196},{17,7,11},{0,8,98},{0,8,34},{0,9,164},{0,8,2}, - {0,8,130},{0,8,66},{0,9,228},{16,7,7},{0,8,90},{0,8,26},{0,9,148}, - {20,7,67},{0,8,122},{0,8,58},{0,9,212},{18,7,19},{0,8,106},{0,8,42}, - {0,9,180},{0,8,10},{0,8,138},{0,8,74},{0,9,244},{16,7,5},{0,8,86}, - {0,8,22},{64,8,0},{19,7,51},{0,8,118},{0,8,54},{0,9,204},{17,7,15}, - {0,8,102},{0,8,38},{0,9,172},{0,8,6},{0,8,134},{0,8,70},{0,9,236}, - {16,7,9},{0,8,94},{0,8,30},{0,9,156},{20,7,99},{0,8,126},{0,8,62}, - {0,9,220},{18,7,27},{0,8,110},{0,8,46},{0,9,188},{0,8,14},{0,8,142}, - {0,8,78},{0,9,252},{96,7,0},{0,8,81},{0,8,17},{21,8,131},{18,7,31}, - {0,8,113},{0,8,49},{0,9,194},{16,7,10},{0,8,97},{0,8,33},{0,9,162}, - {0,8,1},{0,8,129},{0,8,65},{0,9,226},{16,7,6},{0,8,89},{0,8,25}, - {0,9,146},{19,7,59},{0,8,121},{0,8,57},{0,9,210},{17,7,17},{0,8,105}, - {0,8,41},{0,9,178},{0,8,9},{0,8,137},{0,8,73},{0,9,242},{16,7,4}, - {0,8,85},{0,8,21},{16,8,258},{19,7,43},{0,8,117},{0,8,53},{0,9,202}, - {17,7,13},{0,8,101},{0,8,37},{0,9,170},{0,8,5},{0,8,133},{0,8,69}, - {0,9,234},{16,7,8},{0,8,93},{0,8,29},{0,9,154},{20,7,83},{0,8,125}, - {0,8,61},{0,9,218},{18,7,23},{0,8,109},{0,8,45},{0,9,186},{0,8,13}, - {0,8,141},{0,8,77},{0,9,250},{16,7,3},{0,8,83},{0,8,19},{21,8,195}, - {19,7,35},{0,8,115},{0,8,51},{0,9,198},{17,7,11},{0,8,99},{0,8,35}, - {0,9,166},{0,8,3},{0,8,131},{0,8,67},{0,9,230},{16,7,7},{0,8,91}, - {0,8,27},{0,9,150},{20,7,67},{0,8,123},{0,8,59},{0,9,214},{18,7,19}, - {0,8,107},{0,8,43},{0,9,182},{0,8,11},{0,8,139},{0,8,75},{0,9,246}, - {16,7,5},{0,8,87},{0,8,23},{64,8,0},{19,7,51},{0,8,119},{0,8,55}, - {0,9,206},{17,7,15},{0,8,103},{0,8,39},{0,9,174},{0,8,7},{0,8,135}, - {0,8,71},{0,9,238},{16,7,9},{0,8,95},{0,8,31},{0,9,158},{20,7,99}, - {0,8,127},{0,8,63},{0,9,222},{18,7,27},{0,8,111},{0,8,47},{0,9,190}, - {0,8,15},{0,8,143},{0,8,79},{0,9,254},{96,7,0},{0,8,80},{0,8,16}, - {20,8,115},{18,7,31},{0,8,112},{0,8,48},{0,9,193},{16,7,10},{0,8,96}, - {0,8,32},{0,9,161},{0,8,0},{0,8,128},{0,8,64},{0,9,225},{16,7,6}, - {0,8,88},{0,8,24},{0,9,145},{19,7,59},{0,8,120},{0,8,56},{0,9,209}, - {17,7,17},{0,8,104},{0,8,40},{0,9,177},{0,8,8},{0,8,136},{0,8,72}, - {0,9,241},{16,7,4},{0,8,84},{0,8,20},{21,8,227},{19,7,43},{0,8,116}, - {0,8,52},{0,9,201},{17,7,13},{0,8,100},{0,8,36},{0,9,169},{0,8,4}, - {0,8,132},{0,8,68},{0,9,233},{16,7,8},{0,8,92},{0,8,28},{0,9,153}, - {20,7,83},{0,8,124},{0,8,60},{0,9,217},{18,7,23},{0,8,108},{0,8,44}, - {0,9,185},{0,8,12},{0,8,140},{0,8,76},{0,9,249},{16,7,3},{0,8,82}, - {0,8,18},{21,8,163},{19,7,35},{0,8,114},{0,8,50},{0,9,197},{17,7,11}, - {0,8,98},{0,8,34},{0,9,165},{0,8,2},{0,8,130},{0,8,66},{0,9,229}, - {16,7,7},{0,8,90},{0,8,26},{0,9,149},{20,7,67},{0,8,122},{0,8,58}, - {0,9,213},{18,7,19},{0,8,106},{0,8,42},{0,9,181},{0,8,10},{0,8,138}, - {0,8,74},{0,9,245},{16,7,5},{0,8,86},{0,8,22},{64,8,0},{19,7,51}, - {0,8,118},{0,8,54},{0,9,205},{17,7,15},{0,8,102},{0,8,38},{0,9,173}, - {0,8,6},{0,8,134},{0,8,70},{0,9,237},{16,7,9},{0,8,94},{0,8,30}, - {0,9,157},{20,7,99},{0,8,126},{0,8,62},{0,9,221},{18,7,27},{0,8,110}, - {0,8,46},{0,9,189},{0,8,14},{0,8,142},{0,8,78},{0,9,253},{96,7,0}, - {0,8,81},{0,8,17},{21,8,131},{18,7,31},{0,8,113},{0,8,49},{0,9,195}, - {16,7,10},{0,8,97},{0,8,33},{0,9,163},{0,8,1},{0,8,129},{0,8,65}, - {0,9,227},{16,7,6},{0,8,89},{0,8,25},{0,9,147},{19,7,59},{0,8,121}, - {0,8,57},{0,9,211},{17,7,17},{0,8,105},{0,8,41},{0,9,179},{0,8,9}, - {0,8,137},{0,8,73},{0,9,243},{16,7,4},{0,8,85},{0,8,21},{16,8,258}, - {19,7,43},{0,8,117},{0,8,53},{0,9,203},{17,7,13},{0,8,101},{0,8,37}, - {0,9,171},{0,8,5},{0,8,133},{0,8,69},{0,9,235},{16,7,8},{0,8,93}, - {0,8,29},{0,9,155},{20,7,83},{0,8,125},{0,8,61},{0,9,219},{18,7,23}, - {0,8,109},{0,8,45},{0,9,187},{0,8,13},{0,8,141},{0,8,77},{0,9,251}, - {16,7,3},{0,8,83},{0,8,19},{21,8,195},{19,7,35},{0,8,115},{0,8,51}, - {0,9,199},{17,7,11},{0,8,99},{0,8,35},{0,9,167},{0,8,3},{0,8,131}, - {0,8,67},{0,9,231},{16,7,7},{0,8,91},{0,8,27},{0,9,151},{20,7,67}, - {0,8,123},{0,8,59},{0,9,215},{18,7,19},{0,8,107},{0,8,43},{0,9,183}, - {0,8,11},{0,8,139},{0,8,75},{0,9,247},{16,7,5},{0,8,87},{0,8,23}, - {64,8,0},{19,7,51},{0,8,119},{0,8,55},{0,9,207},{17,7,15},{0,8,103}, - {0,8,39},{0,9,175},{0,8,7},{0,8,135},{0,8,71},{0,9,239},{16,7,9}, - {0,8,95},{0,8,31},{0,9,159},{20,7,99},{0,8,127},{0,8,63},{0,9,223}, - {18,7,27},{0,8,111},{0,8,47},{0,9,191},{0,8,15},{0,8,143},{0,8,79}, - {0,9,255} - }; +static const code lenfix[512] = { + {96,7,0},{0,8,80},{0,8,16},{20,8,115},{18,7,31},{0,8,112},{0,8,48}, + {0,9,192},{16,7,10},{0,8,96},{0,8,32},{0,9,160},{0,8,0},{0,8,128}, + {0,8,64},{0,9,224},{16,7,6},{0,8,88},{0,8,24},{0,9,144},{19,7,59}, + {0,8,120},{0,8,56},{0,9,208},{17,7,17},{0,8,104},{0,8,40},{0,9,176}, + {0,8,8},{0,8,136},{0,8,72},{0,9,240},{16,7,4},{0,8,84},{0,8,20}, + {21,8,227},{19,7,43},{0,8,116},{0,8,52},{0,9,200},{17,7,13},{0,8,100}, + {0,8,36},{0,9,168},{0,8,4},{0,8,132},{0,8,68},{0,9,232},{16,7,8}, + {0,8,92},{0,8,28},{0,9,152},{20,7,83},{0,8,124},{0,8,60},{0,9,216}, + {18,7,23},{0,8,108},{0,8,44},{0,9,184},{0,8,12},{0,8,140},{0,8,76}, + {0,9,248},{16,7,3},{0,8,82},{0,8,18},{21,8,163},{19,7,35},{0,8,114}, + {0,8,50},{0,9,196},{17,7,11},{0,8,98},{0,8,34},{0,9,164},{0,8,2}, + {0,8,130},{0,8,66},{0,9,228},{16,7,7},{0,8,90},{0,8,26},{0,9,148}, + {20,7,67},{0,8,122},{0,8,58},{0,9,212},{18,7,19},{0,8,106},{0,8,42}, + {0,9,180},{0,8,10},{0,8,138},{0,8,74},{0,9,244},{16,7,5},{0,8,86}, + {0,8,22},{64,8,0},{19,7,51},{0,8,118},{0,8,54},{0,9,204},{17,7,15}, + {0,8,102},{0,8,38},{0,9,172},{0,8,6},{0,8,134},{0,8,70},{0,9,236}, + {16,7,9},{0,8,94},{0,8,30},{0,9,156},{20,7,99},{0,8,126},{0,8,62}, + {0,9,220},{18,7,27},{0,8,110},{0,8,46},{0,9,188},{0,8,14},{0,8,142}, + {0,8,78},{0,9,252},{96,7,0},{0,8,81},{0,8,17},{21,8,131},{18,7,31}, + {0,8,113},{0,8,49},{0,9,194},{16,7,10},{0,8,97},{0,8,33},{0,9,162}, + {0,8,1},{0,8,129},{0,8,65},{0,9,226},{16,7,6},{0,8,89},{0,8,25}, + {0,9,146},{19,7,59},{0,8,121},{0,8,57},{0,9,210},{17,7,17},{0,8,105}, + {0,8,41},{0,9,178},{0,8,9},{0,8,137},{0,8,73},{0,9,242},{16,7,4}, + {0,8,85},{0,8,21},{16,8,258},{19,7,43},{0,8,117},{0,8,53},{0,9,202}, + {17,7,13},{0,8,101},{0,8,37},{0,9,170},{0,8,5},{0,8,133},{0,8,69}, + {0,9,234},{16,7,8},{0,8,93},{0,8,29},{0,9,154},{20,7,83},{0,8,125}, + {0,8,61},{0,9,218},{18,7,23},{0,8,109},{0,8,45},{0,9,186},{0,8,13}, + {0,8,141},{0,8,77},{0,9,250},{16,7,3},{0,8,83},{0,8,19},{21,8,195}, + {19,7,35},{0,8,115},{0,8,51},{0,9,198},{17,7,11},{0,8,99},{0,8,35}, + {0,9,166},{0,8,3},{0,8,131},{0,8,67},{0,9,230},{16,7,7},{0,8,91}, + {0,8,27},{0,9,150},{20,7,67},{0,8,123},{0,8,59},{0,9,214},{18,7,19}, + {0,8,107},{0,8,43},{0,9,182},{0,8,11},{0,8,139},{0,8,75},{0,9,246}, + {16,7,5},{0,8,87},{0,8,23},{64,8,0},{19,7,51},{0,8,119},{0,8,55}, + {0,9,206},{17,7,15},{0,8,103},{0,8,39},{0,9,174},{0,8,7},{0,8,135}, + {0,8,71},{0,9,238},{16,7,9},{0,8,95},{0,8,31},{0,9,158},{20,7,99}, + {0,8,127},{0,8,63},{0,9,222},{18,7,27},{0,8,111},{0,8,47},{0,9,190}, + {0,8,15},{0,8,143},{0,8,79},{0,9,254},{96,7,0},{0,8,80},{0,8,16}, + {20,8,115},{18,7,31},{0,8,112},{0,8,48},{0,9,193},{16,7,10},{0,8,96}, + {0,8,32},{0,9,161},{0,8,0},{0,8,128},{0,8,64},{0,9,225},{16,7,6}, + {0,8,88},{0,8,24},{0,9,145},{19,7,59},{0,8,120},{0,8,56},{0,9,209}, + {17,7,17},{0,8,104},{0,8,40},{0,9,177},{0,8,8},{0,8,136},{0,8,72}, + {0,9,241},{16,7,4},{0,8,84},{0,8,20},{21,8,227},{19,7,43},{0,8,116}, + {0,8,52},{0,9,201},{17,7,13},{0,8,100},{0,8,36},{0,9,169},{0,8,4}, + {0,8,132},{0,8,68},{0,9,233},{16,7,8},{0,8,92},{0,8,28},{0,9,153}, + {20,7,83},{0,8,124},{0,8,60},{0,9,217},{18,7,23},{0,8,108},{0,8,44}, + {0,9,185},{0,8,12},{0,8,140},{0,8,76},{0,9,249},{16,7,3},{0,8,82}, + {0,8,18},{21,8,163},{19,7,35},{0,8,114},{0,8,50},{0,9,197},{17,7,11}, + {0,8,98},{0,8,34},{0,9,165},{0,8,2},{0,8,130},{0,8,66},{0,9,229}, + {16,7,7},{0,8,90},{0,8,26},{0,9,149},{20,7,67},{0,8,122},{0,8,58}, + {0,9,213},{18,7,19},{0,8,106},{0,8,42},{0,9,181},{0,8,10},{0,8,138}, + {0,8,74},{0,9,245},{16,7,5},{0,8,86},{0,8,22},{64,8,0},{19,7,51}, + {0,8,118},{0,8,54},{0,9,205},{17,7,15},{0,8,102},{0,8,38},{0,9,173}, + {0,8,6},{0,8,134},{0,8,70},{0,9,237},{16,7,9},{0,8,94},{0,8,30}, + {0,9,157},{20,7,99},{0,8,126},{0,8,62},{0,9,221},{18,7,27},{0,8,110}, + {0,8,46},{0,9,189},{0,8,14},{0,8,142},{0,8,78},{0,9,253},{96,7,0}, + {0,8,81},{0,8,17},{21,8,131},{18,7,31},{0,8,113},{0,8,49},{0,9,195}, + {16,7,10},{0,8,97},{0,8,33},{0,9,163},{0,8,1},{0,8,129},{0,8,65}, + {0,9,227},{16,7,6},{0,8,89},{0,8,25},{0,9,147},{19,7,59},{0,8,121}, + {0,8,57},{0,9,211},{17,7,17},{0,8,105},{0,8,41},{0,9,179},{0,8,9}, + {0,8,137},{0,8,73},{0,9,243},{16,7,4},{0,8,85},{0,8,21},{16,8,258}, + {19,7,43},{0,8,117},{0,8,53},{0,9,203},{17,7,13},{0,8,101},{0,8,37}, + {0,9,171},{0,8,5},{0,8,133},{0,8,69},{0,9,235},{16,7,8},{0,8,93}, + {0,8,29},{0,9,155},{20,7,83},{0,8,125},{0,8,61},{0,9,219},{18,7,23}, + {0,8,109},{0,8,45},{0,9,187},{0,8,13},{0,8,141},{0,8,77},{0,9,251}, + {16,7,3},{0,8,83},{0,8,19},{21,8,195},{19,7,35},{0,8,115},{0,8,51}, + {0,9,199},{17,7,11},{0,8,99},{0,8,35},{0,9,167},{0,8,3},{0,8,131}, + {0,8,67},{0,9,231},{16,7,7},{0,8,91},{0,8,27},{0,9,151},{20,7,67}, + {0,8,123},{0,8,59},{0,9,215},{18,7,19},{0,8,107},{0,8,43},{0,9,183}, + {0,8,11},{0,8,139},{0,8,75},{0,9,247},{16,7,5},{0,8,87},{0,8,23}, + {64,8,0},{19,7,51},{0,8,119},{0,8,55},{0,9,207},{17,7,15},{0,8,103}, + {0,8,39},{0,9,175},{0,8,7},{0,8,135},{0,8,71},{0,9,239},{16,7,9}, + {0,8,95},{0,8,31},{0,9,159},{20,7,99},{0,8,127},{0,8,63},{0,9,223}, + {18,7,27},{0,8,111},{0,8,47},{0,9,191},{0,8,15},{0,8,143},{0,8,79}, + {0,9,255} +}; - static const code distfix[32] = { - {16,5,1},{23,5,257},{19,5,17},{27,5,4097},{17,5,5},{25,5,1025}, - {21,5,65},{29,5,16385},{16,5,3},{24,5,513},{20,5,33},{28,5,8193}, - {18,5,9},{26,5,2049},{22,5,129},{64,5,0},{16,5,2},{23,5,385}, - {19,5,25},{27,5,6145},{17,5,7},{25,5,1537},{21,5,97},{29,5,24577}, - {16,5,4},{24,5,769},{20,5,49},{28,5,12289},{18,5,13},{26,5,3073}, - {22,5,193},{64,5,0} - }; +static const code distfix[32] = { + {16,5,1},{23,5,257},{19,5,17},{27,5,4097},{17,5,5},{25,5,1025}, + {21,5,65},{29,5,16385},{16,5,3},{24,5,513},{20,5,33},{28,5,8193}, + {18,5,9},{26,5,2049},{22,5,129},{64,5,0},{16,5,2},{23,5,385}, + {19,5,25},{27,5,6145},{17,5,7},{25,5,1537},{21,5,97},{29,5,24577}, + {16,5,4},{24,5,769},{20,5,49},{28,5,12289},{18,5,13},{26,5,3073}, + {22,5,193},{64,5,0} +}; Index: gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/inflate.c =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/inflate.c,v diff -u -p -a -u -p -r1.7 inflate.c --- gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/inflate.c 28 Jan 2025 01:06:11 -0000 1.7 +++ gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/inflate.c 29 Mar 2026 16:31:42 -0000 @@ -1,5 +1,5 @@ /* inflate.c -- zlib decompression - * Copyright (C) 1995-2022 Mark Adler + * Copyright (C) 1995-2026 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -85,12 +85,6 @@ #include "inflate.h" #include "inffast.h" -#ifdef MAKEFIXED -# ifndef BUILDFIXED -# define BUILDFIXED -# endif -#endif - local int inflateStateCheck(z_streamp strm) { struct inflate_state FAR *state; if (strm == Z_NULL || @@ -110,6 +104,7 @@ int ZEXPORT inflateResetKeep(z_streamp s state = (struct inflate_state FAR *)strm->state; strm->total_in = strm->total_out = state->total = 0; strm->msg = Z_NULL; + strm->data_type = 0; if (state->wrap) /* to support ill-conceived Java test suite */ strm->adler = state->wrap & 1; state->mode = HEAD; @@ -202,6 +197,7 @@ int ZEXPORT inflateInit2_(z_streamp strm state = (struct inflate_state FAR *) ZALLOC(strm, 1, sizeof(struct inflate_state)); if (state == Z_NULL) return Z_MEM_ERROR; + zmemzero(state, sizeof(struct inflate_state)); Tracev((stderr, "inflate: allocated\n")); strm->state = (struct internal_state FAR *)state; state->strm = strm; @@ -234,124 +230,12 @@ int ZEXPORT inflatePrime(z_streamp strm, } if (bits > 16 || state->bits + (uInt)bits > 32) return Z_STREAM_ERROR; value &= (1L << bits) - 1; - state->hold += (unsigned)value << state->bits; + state->hold += (unsigned long)value << state->bits; state->bits += (uInt)bits; return Z_OK; } /* - Return state with length and distance decoding tables and index sizes set to - fixed code decoding. Normally this returns fixed tables from inffixed.h. - If BUILDFIXED is defined, then instead this routine builds the tables the - first time it's called, and returns those tables the first time and - thereafter. This reduces the size of the code by about 2K bytes, in - exchange for a little execution time. However, BUILDFIXED should not be - used for threaded applications, since the rewriting of the tables and virgin - may not be thread-safe. - */ -local void fixedtables(struct inflate_state FAR *state) { -#ifdef BUILDFIXED - static int virgin = 1; - static code *lenfix, *distfix; - static code fixed[544]; - - /* build fixed huffman tables if first call (may not be thread safe) */ - if (virgin) { - unsigned sym, bits; - static code *next; - - /* literal/length table */ - sym = 0; - while (sym < 144) state->lens[sym++] = 8; - while (sym < 256) state->lens[sym++] = 9; - while (sym < 280) state->lens[sym++] = 7; - while (sym < 288) state->lens[sym++] = 8; - next = fixed; - lenfix = next; - bits = 9; - inflate_table(LENS, state->lens, 288, &(next), &(bits), state->work); - - /* distance table */ - sym = 0; - while (sym < 32) state->lens[sym++] = 5; - distfix = next; - bits = 5; - inflate_table(DISTS, state->lens, 32, &(next), &(bits), state->work); - - /* do this just once */ - virgin = 0; - } -#else /* !BUILDFIXED */ -# include "inffixed.h" -#endif /* BUILDFIXED */ - state->lencode = lenfix; - state->lenbits = 9; - state->distcode = distfix; - state->distbits = 5; -} - -#ifdef MAKEFIXED -#include - -/* - Write out the inffixed.h that is #include'd above. Defining MAKEFIXED also - defines BUILDFIXED, so the tables are built on the fly. makefixed() writes - those tables to stdout, which would be piped to inffixed.h. A small program - can simply call makefixed to do this: - - void makefixed(void); - - int main(void) - { - makefixed(); - return 0; - } - - Then that can be linked with zlib built with MAKEFIXED defined and run: - - a.out > inffixed.h - */ -void makefixed(void) -{ - unsigned low, size; - struct inflate_state state; - - fixedtables(&state); - puts(" /* inffixed.h -- table for decoding fixed codes"); - puts(" * Generated automatically by makefixed()."); - puts(" */"); - puts(""); - puts(" /* WARNING: this file should *not* be used by applications."); - puts(" It is part of the implementation of this library and is"); - puts(" subject to change. Applications should only use zlib.h."); - puts(" */"); - puts(""); - size = 1U << 9; - printf(" static const code lenfix[%u] = {", size); - low = 0; - for (;;) { - if ((low % 7) == 0) printf("\n "); - printf("{%u,%u,%d}", (low & 127) == 99 ? 64 : state.lencode[low].op, - state.lencode[low].bits, state.lencode[low].val); - if (++low == size) break; - putchar(','); - } - puts("\n };"); - size = 1U << 5; - printf("\n static const code distfix[%u] = {", size); - low = 0; - for (;;) { - if ((low % 6) == 0) printf("\n "); - printf("{%u,%u,%d}", state.distcode[low].op, state.distcode[low].bits, - state.distcode[low].val); - if (++low == size) break; - putchar(','); - } - puts("\n };"); -} -#endif /* MAKEFIXED */ - -/* Update the window with the last wsize (normally 32K) bytes written before returning. If window does not exist yet, create it. This is only called when a window is already in use, or when output has been written during this @@ -642,12 +526,12 @@ int ZEXPORT inflate(z_streamp strm, int if ( #endif ((BITS(8) << 8) + (hold >> 8)) % 31) { - strm->msg = (char *)"incorrect header check"; + strm->msg = (z_const char *)"incorrect header check"; state->mode = BAD; break; } if (BITS(4) != Z_DEFLATED) { - strm->msg = (char *)"unknown compression method"; + strm->msg = (z_const char *)"unknown compression method"; state->mode = BAD; break; } @@ -656,7 +540,7 @@ int ZEXPORT inflate(z_streamp strm, int if (state->wbits == 0) state->wbits = len; if (len > 15 || len > state->wbits) { - strm->msg = (char *)"invalid window size"; + strm->msg = (z_const char *)"invalid window size"; state->mode = BAD; break; } @@ -672,12 +556,12 @@ int ZEXPORT inflate(z_streamp strm, int NEEDBITS(16); state->flags = (int)(hold); if ((state->flags & 0xff) != Z_DEFLATED) { - strm->msg = (char *)"unknown compression method"; + strm->msg = (z_const char *)"unknown compression method"; state->mode = BAD; break; } if (state->flags & 0xe000) { - strm->msg = (char *)"unknown header flags set"; + strm->msg = (z_const char *)"unknown header flags set"; state->mode = BAD; break; } @@ -793,7 +677,7 @@ int ZEXPORT inflate(z_streamp strm, int if (state->flags & 0x0200) { NEEDBITS(16); if ((state->wrap & 4) && hold != (state->check & 0xffff)) { - strm->msg = (char *)"header crc mismatch"; + strm->msg = (z_const char *)"header crc mismatch"; state->mode = BAD; break; } @@ -840,7 +724,7 @@ int ZEXPORT inflate(z_streamp strm, int state->mode = STORED; break; case 1: /* fixed block */ - fixedtables(state); + inflate_fixed(state); Tracev((stderr, "inflate: fixed codes block%s\n", state->last ? " (last)" : "")); state->mode = LEN_; /* decode codes */ @@ -854,8 +738,8 @@ int ZEXPORT inflate(z_streamp strm, int state->last ? " (last)" : "")); state->mode = TABLE; break; - case 3: - strm->msg = (char *)"invalid block type"; + default: + strm->msg = (z_const char *)"invalid block type"; state->mode = BAD; } DROPBITS(2); @@ -864,7 +748,7 @@ int ZEXPORT inflate(z_streamp strm, int BYTEBITS(); /* go to byte boundary */ NEEDBITS(32); if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) { - strm->msg = (char *)"invalid stored block lengths"; + strm->msg = (z_const char *)"invalid stored block lengths"; state->mode = BAD; break; } @@ -905,7 +789,8 @@ int ZEXPORT inflate(z_streamp strm, int DROPBITS(4); #ifndef PKZIP_BUG_WORKAROUND if (state->nlen > 286 || state->ndist > 30) { - strm->msg = (char *)"too many length or distance symbols"; + strm->msg = (z_const char *) + "too many length or distance symbols"; state->mode = BAD; break; } @@ -923,12 +808,12 @@ int ZEXPORT inflate(z_streamp strm, int while (state->have < 19) state->lens[order[state->have++]] = 0; state->next = state->codes; - state->lencode = (const code FAR *)(state->next); + state->lencode = state->distcode = (const code FAR *)(state->next); state->lenbits = 7; ret = inflate_table(CODES, state->lens, 19, &(state->next), &(state->lenbits), state->work); if (ret) { - strm->msg = (char *)"invalid code lengths set"; + strm->msg = (z_const char *)"invalid code lengths set"; state->mode = BAD; break; } @@ -952,7 +837,8 @@ int ZEXPORT inflate(z_streamp strm, int NEEDBITS(here.bits + 2); DROPBITS(here.bits); if (state->have == 0) { - strm->msg = (char *)"invalid bit length repeat"; + strm->msg = (z_const char *) + "invalid bit length repeat"; state->mode = BAD; break; } @@ -975,7 +861,8 @@ int ZEXPORT inflate(z_streamp strm, int DROPBITS(7); } if (state->have + copy > state->nlen + state->ndist) { - strm->msg = (char *)"invalid bit length repeat"; + strm->msg = (z_const char *) + "invalid bit length repeat"; state->mode = BAD; break; } @@ -989,7 +876,8 @@ int ZEXPORT inflate(z_streamp strm, int /* check for end-of-block code (better have one) */ if (state->lens[256] == 0) { - strm->msg = (char *)"invalid code -- missing end-of-block"; + strm->msg = (z_const char *) + "invalid code -- missing end-of-block"; state->mode = BAD; break; } @@ -1003,7 +891,7 @@ int ZEXPORT inflate(z_streamp strm, int ret = inflate_table(LENS, state->lens, state->nlen, &(state->next), &(state->lenbits), state->work); if (ret) { - strm->msg = (char *)"invalid literal/lengths set"; + strm->msg = (z_const char *)"invalid literal/lengths set"; state->mode = BAD; break; } @@ -1012,7 +900,7 @@ int ZEXPORT inflate(z_streamp strm, int ret = inflate_table(DISTS, state->lens + state->nlen, state->ndist, &(state->next), &(state->distbits), state->work); if (ret) { - strm->msg = (char *)"invalid distances set"; + strm->msg = (z_const char *)"invalid distances set"; state->mode = BAD; break; } @@ -1066,7 +954,7 @@ int ZEXPORT inflate(z_streamp strm, int break; } if (here.op & 64) { - strm->msg = (char *)"invalid literal/length code"; + strm->msg = (z_const char *)"invalid literal/length code"; state->mode = BAD; break; } @@ -1104,7 +992,7 @@ int ZEXPORT inflate(z_streamp strm, int DROPBITS(here.bits); state->back += here.bits; if (here.op & 64) { - strm->msg = (char *)"invalid distance code"; + strm->msg = (z_const char *)"invalid distance code"; state->mode = BAD; break; } @@ -1121,7 +1009,7 @@ int ZEXPORT inflate(z_streamp strm, int } #ifdef INFLATE_STRICT if (state->offset > state->dmax) { - strm->msg = (char *)"invalid distance too far back"; + strm->msg = (z_const char *)"invalid distance too far back"; state->mode = BAD; break; } @@ -1136,7 +1024,8 @@ int ZEXPORT inflate(z_streamp strm, int copy = state->offset - copy; if (copy > state->whave) { if (state->sane) { - strm->msg = (char *)"invalid distance too far back"; + strm->msg = (z_const char *) + "invalid distance too far back"; state->mode = BAD; break; } @@ -1195,7 +1084,7 @@ int ZEXPORT inflate(z_streamp strm, int state->flags ? hold : #endif ZSWAP32(hold)) != state->check) { - strm->msg = (char *)"incorrect data check"; + strm->msg = (z_const char *)"incorrect data check"; state->mode = BAD; break; } @@ -1209,7 +1098,7 @@ int ZEXPORT inflate(z_streamp strm, int if (state->wrap && state->flags) { NEEDBITS(32); if ((state->wrap & 4) && hold != (state->total & 0xffffffff)) { - strm->msg = (char *)"incorrect length check"; + strm->msg = (z_const char *)"incorrect length check"; state->mode = BAD; break; } @@ -1440,7 +1329,6 @@ int ZEXPORT inflateCopy(z_streamp dest, struct inflate_state FAR *state; struct inflate_state FAR *copy; unsigned char FAR *window; - unsigned wsize; /* check input */ if (inflateStateCheck(source) || dest == Z_NULL) @@ -1451,6 +1339,7 @@ int ZEXPORT inflateCopy(z_streamp dest, copy = (struct inflate_state FAR *) ZALLOC(source, 1, sizeof(struct inflate_state)); if (copy == Z_NULL) return Z_MEM_ERROR; + zmemzero(copy, sizeof(struct inflate_state)); window = Z_NULL; if (state->window != Z_NULL) { window = (unsigned char FAR *) @@ -1462,8 +1351,8 @@ int ZEXPORT inflateCopy(z_streamp dest, } /* copy state */ - zmemcpy((voidpf)dest, (voidpf)source, sizeof(z_stream)); - zmemcpy((voidpf)copy, (voidpf)state, sizeof(struct inflate_state)); + zmemcpy(dest, source, sizeof(z_stream)); + zmemcpy(copy, state, sizeof(struct inflate_state)); copy->strm = dest; if (state->lencode >= state->codes && state->lencode <= state->codes + ENOUGH - 1) { @@ -1471,10 +1360,8 @@ int ZEXPORT inflateCopy(z_streamp dest, copy->distcode = copy->codes + (state->distcode - state->codes); } copy->next = copy->codes + (state->next - state->codes); - if (window != Z_NULL) { - wsize = 1U << state->wbits; - zmemcpy(window, state->window, wsize); - } + if (window != Z_NULL) + zmemcpy(window, state->window, state->whave); copy->window = window; dest->state = (struct internal_state FAR *)copy; return Z_OK; Index: gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/inflate.h =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/inflate.h,v diff -u -p -a -u -p -r1.1.1.4 inflate.h --- gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/inflate.h 15 Feb 2023 01:32:40 -0000 1.1.1.4 +++ gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/inflate.h 29 Mar 2026 16:31:42 -0000 @@ -100,7 +100,7 @@ struct inflate_state { unsigned char FAR *window; /* allocated sliding window, if needed */ /* bit accumulator */ unsigned long hold; /* input bit accumulator */ - unsigned bits; /* number of bits in "in" */ + unsigned bits; /* number of bits in hold */ /* for string and stored block copying */ unsigned length; /* literal or length of data to copy */ unsigned offset; /* distance back to copy string from */ Index: gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/inftrees.c =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/inftrees.c,v diff -u -p -a -u -p -r1.1.1.8 inftrees.c --- gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/inftrees.c 28 Jan 2025 01:04:23 -0000 1.1.1.8 +++ gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/inftrees.c 29 Mar 2026 16:31:42 -0000 @@ -1,15 +1,29 @@ /* inftrees.c -- generate Huffman trees for efficient decoding - * Copyright (C) 1995-2024 Mark Adler + * Copyright (C) 1995-2026 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ +#ifdef MAKEFIXED +# ifndef BUILDFIXED +# define BUILDFIXED +# endif +#endif +#ifdef BUILDFIXED +# define Z_ONCE +#endif + #include "zutil.h" #include "inftrees.h" +#include "inflate.h" + +#ifndef NULL +# define NULL 0 +#endif #define MAXBITS 15 const char inflate_copyright[] = - " inflate 1.3.1 Copyright 1995-2024 Mark Adler "; + " inflate 1.3.2 Copyright 1995-2026 Mark Adler "; /* If you use the zlib library in a product, an acknowledgment is welcome in the documentation of your product. If for some reason you cannot @@ -47,9 +61,9 @@ int ZLIB_INTERNAL inflate_table(codetype unsigned mask; /* mask for low root bits */ code here; /* table entry for duplication */ code FAR *next; /* next available space in table */ - const unsigned short FAR *base; /* base value table to use */ - const unsigned short FAR *extra; /* extra bits table to use */ - unsigned match; /* use base and extra for symbol >= match */ + const unsigned short FAR *base = NULL; /* base value table to use */ + const unsigned short FAR *extra = NULL; /* extra bits table to use */ + unsigned match = 0; /* use base and extra for symbol >= match */ unsigned short count[MAXBITS+1]; /* number of codes of each length */ unsigned short offs[MAXBITS+1]; /* offsets in table for each length */ static const unsigned short lbase[31] = { /* Length codes 257..285 base */ @@ -57,7 +71,7 @@ int ZLIB_INTERNAL inflate_table(codetype 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0}; static const unsigned short lext[31] = { /* Length codes 257..285 extra */ 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, - 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 203, 77}; + 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 199, 75}; static const unsigned short dbase[32] = { /* Distance codes 0..29 base */ 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, @@ -175,7 +189,6 @@ int ZLIB_INTERNAL inflate_table(codetype /* set up for code type */ switch (type) { case CODES: - base = extra = work; /* dummy value--not used */ match = 20; break; case LENS: @@ -183,10 +196,9 @@ int ZLIB_INTERNAL inflate_table(codetype extra = lext; match = 257; break; - default: /* DISTS */ + case DISTS: base = dbase; extra = dext; - match = 0; } /* initialize state for loop */ @@ -297,3 +309,116 @@ int ZLIB_INTERNAL inflate_table(codetype *bits = root; return 0; } + +#ifdef BUILDFIXED +/* + If this is compiled with BUILDFIXED defined, and if inflate will be used in + multiple threads, and if atomics are not available, then inflate() must be + called with a fixed block (e.g. 0x03 0x00) to initialize the tables and must + return before any other threads are allowed to call inflate. + */ + +static code *lenfix, *distfix; +static code fixed[544]; + +/* State for z_once(). */ +local z_once_t built = Z_ONCE_INIT; + +local void buildtables(void) { + unsigned sym, bits; + static code *next; + unsigned short lens[288], work[288]; + + /* literal/length table */ + sym = 0; + while (sym < 144) lens[sym++] = 8; + while (sym < 256) lens[sym++] = 9; + while (sym < 280) lens[sym++] = 7; + while (sym < 288) lens[sym++] = 8; + next = fixed; + lenfix = next; + bits = 9; + inflate_table(LENS, lens, 288, &(next), &(bits), work); + + /* distance table */ + sym = 0; + while (sym < 32) lens[sym++] = 5; + distfix = next; + bits = 5; + inflate_table(DISTS, lens, 32, &(next), &(bits), work); +} +#else /* !BUILDFIXED */ +# include "inffixed.h" +#endif /* BUILDFIXED */ + +/* + Return state with length and distance decoding tables and index sizes set to + fixed code decoding. Normally this returns fixed tables from inffixed.h. + If BUILDFIXED is defined, then instead this routine builds the tables the + first time it's called, and returns those tables the first time and + thereafter. This reduces the size of the code by about 2K bytes, in + exchange for a little execution time. However, BUILDFIXED should not be + used for threaded applications if atomics are not available, as it will + not be thread-safe. + */ +void inflate_fixed(struct inflate_state FAR *state) { +#ifdef BUILDFIXED + z_once(&built, buildtables); +#endif /* BUILDFIXED */ + state->lencode = lenfix; + state->lenbits = 9; + state->distcode = distfix; + state->distbits = 5; +} + +#ifdef MAKEFIXED +#include + +/* + Write out the inffixed.h that will be #include'd above. Defining MAKEFIXED + also defines BUILDFIXED, so the tables are built on the fly. main() writes + those tables to stdout, which would directed to inffixed.h. Compile this + along with zutil.c: + + cc -DMAKEFIXED -o fix inftrees.c zutil.c + ./fix > inffixed.h + */ +int main(void) { + unsigned low, size; + struct inflate_state state; + + inflate_fixed(&state); + puts("/* inffixed.h -- table for decoding fixed codes"); + puts(" * Generated automatically by makefixed()."); + puts(" */"); + puts(""); + puts("/* WARNING: this file should *not* be used by applications."); + puts(" It is part of the implementation of this library and is"); + puts(" subject to change. Applications should only use zlib.h."); + puts(" */"); + puts(""); + size = 1U << 9; + printf("static const code lenfix[%u] = {", size); + low = 0; + for (;;) { + if ((low % 7) == 0) printf("\n "); + printf("{%u,%u,%d}", (low & 127) == 99 ? 64 : state.lencode[low].op, + state.lencode[low].bits, state.lencode[low].val); + if (++low == size) break; + putchar(','); + } + puts("\n};"); + size = 1U << 5; + printf("\nstatic const code distfix[%u] = {", size); + low = 0; + for (;;) { + if ((low % 6) == 0) printf("\n "); + printf("{%u,%u,%d}", state.distcode[low].op, state.distcode[low].bits, + state.distcode[low].val); + if (++low == size) break; + putchar(','); + } + puts("\n};"); + return 0; +} +#endif /* MAKEFIXED */ Index: gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/inftrees.h =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/inftrees.h,v diff -u -p -a -u -p -r1.1.1.4 inftrees.h --- gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/inftrees.h 28 Jan 2025 01:04:23 -0000 1.1.1.4 +++ gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/inftrees.h 29 Mar 2026 16:31:42 -0000 @@ -1,5 +1,5 @@ /* inftrees.h -- header to use inftrees.c - * Copyright (C) 1995-2005, 2010 Mark Adler + * Copyright (C) 1995-2026 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -60,3 +60,5 @@ typedef enum { int ZLIB_INTERNAL inflate_table(codetype type, unsigned short FAR *lens, unsigned codes, code FAR * FAR *table, unsigned FAR *bits, unsigned short FAR *work); +struct inflate_state; +void ZLIB_INTERNAL inflate_fixed(struct inflate_state FAR *state); Index: gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/trees.c =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/trees.c,v diff -u -p -a -u -p -r1.11 trees.c --- gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/trees.c 28 Jan 2025 01:06:11 -0000 1.11 +++ gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/trees.c 29 Mar 2026 16:31:42 -0000 @@ -1,5 +1,5 @@ /* trees.c -- output deflated data using Huffman coding - * Copyright (C) 1995-2024 Jean-loup Gailly + * Copyright (C) 1995-2026 Jean-loup Gailly * detect_data_type() function provided freely by Cosmin Truta, 2006 * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -112,7 +112,7 @@ local int base_dist[D_CODES]; #else # include "trees.h" -#endif /* GEN_TREES_H */ +#endif /* defined(GEN_TREES_H) || !defined(STDC) */ struct static_tree_desc_s { const ct_data *static_tree; /* static tree or NULL */ @@ -152,7 +152,7 @@ local TCONST static_tree_desc static_bl_ * IN assertion: 1 <= len <= 15 */ local unsigned bi_reverse(unsigned code, int len) { - register unsigned res = 0; + unsigned res = 0; do { res |= code & 1; code >>= 1, res <<= 1; @@ -184,10 +184,11 @@ local void bi_windup(deflate_state *s) { } else if (s->bi_valid > 0) { put_byte(s, (Byte)s->bi_buf); } + s->bi_used = ((s->bi_valid - 1) & 7) + 1; s->bi_buf = 0; s->bi_valid = 0; #ifdef ZLIB_DEBUG - s->bits_sent = (s->bits_sent + 7) & ~7; + s->bits_sent = (s->bits_sent + 7) & ~(ulg)7; #endif } @@ -466,6 +467,7 @@ void ZLIB_INTERNAL _tr_init(deflate_stat s->bi_buf = 0; s->bi_valid = 0; + s->bi_used = 0; #ifdef ZLIB_DEBUG s->compressed_len = 0L; s->bits_sent = 0L; @@ -724,7 +726,7 @@ local void scan_tree(deflate_state *s, c if (++count < max_count && curlen == nextlen) { continue; } else if (count < min_count) { - s->bl_tree[curlen].Freq += count; + s->bl_tree[curlen].Freq += (ush)count; } else if (curlen != 0) { if (curlen != prevlen) s->bl_tree[curlen].Freq++; s->bl_tree[REP_3_6].Freq++; @@ -817,7 +819,7 @@ local int build_bl_tree(deflate_state *s } /* Update opt_len to include the bit length tree and counts */ s->opt_len += 3*((ulg)max_blindex + 1) + 5 + 5 + 4; - Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld", + Tracev((stderr, "\ndyn trees: dyn %lu, stat %lu", s->opt_len, s->static_len)); return max_blindex; @@ -843,13 +845,13 @@ local void send_all_trees(deflate_state Tracev((stderr, "\nbl code %2d ", bl_order[rank])); send_bits(s, s->bl_tree[bl_order[rank]].Len, 3); } - Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent)); + Tracev((stderr, "\nbl tree: sent %lu", s->bits_sent)); send_tree(s, (ct_data *)s->dyn_ltree, lcodes - 1); /* literal tree */ - Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent)); + Tracev((stderr, "\nlit tree: sent %lu", s->bits_sent)); send_tree(s, (ct_data *)s->dyn_dtree, dcodes - 1); /* distance tree */ - Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent)); + Tracev((stderr, "\ndist tree: sent %lu", s->bits_sent)); } /* =========================================================================== @@ -932,7 +934,7 @@ local void compress_block(deflate_state extra = extra_dbits[code]; if (extra != 0) { dist -= (unsigned)base_dist[code]; - send_bits(s, dist, extra); /* send the extra distance bits */ + send_bits(s, (int)dist, extra); /* send the extra bits */ } } /* literal or match pair ? */ @@ -1006,11 +1008,11 @@ void ZLIB_INTERNAL _tr_flush_block(defla /* Construct the literal and distance trees */ build_tree(s, (tree_desc *)(&(s->l_desc))); - Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len, + Tracev((stderr, "\nlit data: dyn %lu, stat %lu", s->opt_len, s->static_len)); build_tree(s, (tree_desc *)(&(s->d_desc))); - Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len, + Tracev((stderr, "\ndist data: dyn %lu, stat %lu", s->opt_len, s->static_len)); /* At this point, opt_len and static_len are the total bit lengths of * the compressed block data, excluding the tree representations. @@ -1083,7 +1085,7 @@ void ZLIB_INTERNAL _tr_flush_block(defla #endif } Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len >> 3, - s->compressed_len - 7*last)); + s->compressed_len - 7*(ulg)last)); } /* =========================================================================== Index: gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/uncompr.c =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/uncompr.c,v diff -u -p -a -u -p -r1.6 uncompr.c --- gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/uncompr.c 28 Jan 2025 01:06:11 -0000 1.6 +++ gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/uncompr.c 29 Mar 2026 16:31:42 -0000 @@ -1,5 +1,5 @@ /* uncompr.c -- decompress a memory buffer - * Copyright (C) 1995-2003, 2010, 2014, 2016 Jean-loup Gailly, Mark Adler + * Copyright (C) 1995-2026 Jean-loup Gailly, Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -23,24 +23,24 @@ memory, Z_BUF_ERROR if there was not enough room in the output buffer, or Z_DATA_ERROR if the input data was corrupted, including if the input data is an incomplete zlib stream. + + The _z versions of the functions take size_t length arguments. */ -int ZEXPORT uncompress2(Bytef *dest, uLongf *destLen, const Bytef *source, - uLong *sourceLen) { +int ZEXPORT uncompress2_z(Bytef *dest, z_size_t *destLen, const Bytef *source, + z_size_t *sourceLen) { z_stream stream; int err; const uInt max = (uInt)-1; - uLong len, left; - Byte buf[1]; /* for detection of incomplete stream when *destLen == 0 */ + z_size_t len, left; + + if (sourceLen == NULL || (*sourceLen > 0 && source == NULL) || + destLen == NULL || (*destLen > 0 && dest == NULL)) + return Z_STREAM_ERROR; len = *sourceLen; - if (*destLen) { - left = *destLen; - *destLen = 0; - } - else { - left = 1; - dest = buf; - } + left = *destLen; + if (left == 0 && dest == Z_NULL) + dest = (Bytef *)&stream.reserved; /* next_out cannot be NULL */ stream.next_in = (z_const Bytef *)source; stream.avail_in = 0; @@ -56,30 +56,46 @@ int ZEXPORT uncompress2(Bytef *dest, uLo do { if (stream.avail_out == 0) { - stream.avail_out = left > (uLong)max ? max : (uInt)left; + stream.avail_out = left > (z_size_t)max ? max : (uInt)left; left -= stream.avail_out; } if (stream.avail_in == 0) { - stream.avail_in = len > (uLong)max ? max : (uInt)len; + stream.avail_in = len > (z_size_t)max ? max : (uInt)len; len -= stream.avail_in; } err = inflate(&stream, Z_NO_FLUSH); } while (err == Z_OK); - *sourceLen -= len + stream.avail_in; - if (dest != buf) - *destLen = stream.total_out; - else if (stream.total_out && err == Z_BUF_ERROR) - left = 1; + /* Set len and left to the unused input data and unused output space. Set + *sourceLen to the amount of input consumed. Set *destLen to the amount + of data produced. */ + len += stream.avail_in; + left += stream.avail_out; + *sourceLen -= len; + *destLen -= left; inflateEnd(&stream); return err == Z_STREAM_END ? Z_OK : err == Z_NEED_DICT ? Z_DATA_ERROR : - err == Z_BUF_ERROR && left + stream.avail_out ? Z_DATA_ERROR : + err == Z_BUF_ERROR && len == 0 ? Z_DATA_ERROR : err; } - +int ZEXPORT uncompress2(Bytef *dest, uLongf *destLen, const Bytef *source, + uLong *sourceLen) { + int ret; + z_size_t got = *destLen, used = *sourceLen; + ret = uncompress2_z(dest, &got, source, &used); + *sourceLen = (uLong)used; + *destLen = (uLong)got; + return ret; +} +int ZEXPORT uncompress_z(Bytef *dest, z_size_t *destLen, const Bytef *source, + z_size_t sourceLen) { + z_size_t used = sourceLen; + return uncompress2_z(dest, destLen, source, &used); +} int ZEXPORT uncompress(Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen) { - return uncompress2(dest, destLen, source, &sourceLen); + uLong used = sourceLen; + return uncompress2(dest, destLen, source, &used); } Index: gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/zconf.h =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/zconf.h,v diff -u -p -a -u -p -r1.9 zconf.h --- gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/zconf.h 28 Jan 2025 01:06:11 -0000 1.9 +++ gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/zconf.h 29 Mar 2026 16:31:42 -0000 @@ -1,5 +1,5 @@ /* zconf.h -- configuration of the zlib compression library - * Copyright (C) 1995-2024 Jean-loup Gailly, Mark Adler + * Copyright (C) 1995-2026 Jean-loup Gailly, Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -8,6 +8,8 @@ #ifndef ZCONF_H #define ZCONF_H +#include /* Compress::Raw::Zlib change -- Needed for NULL */ + /* * If you *really* need a unique prefix for all types and library functions, * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it. @@ -33,7 +35,10 @@ # ifndef Z_SOLO # define compress z_compress # define compress2 z_compress2 +# define compress_z z_compress_z +# define compress2_z z_compress2_z # define compressBound z_compressBound +# define compressBound_z z_compressBound_z # endif # define crc32 Perl_crz_crc32 # define crc32_combine Perl_crz_crc32_combine @@ -44,6 +49,7 @@ # define crc32_z Perl_crz_crc32_z # define deflate Perl_crz_deflate # define deflateBound Perl_crz_deflateBound +# define deflateBound_z Perl_crz_deflateBound_z # define deflateCopy Perl_crz_deflateCopy # define deflateEnd Perl_crz_deflateEnd # define deflateGetDictionary Perl_crz_deflateGetDictionary @@ -59,6 +65,7 @@ # define deflateSetDictionary Perl_crz_deflateSetDictionary # define deflateSetHeader Perl_crz_deflateSetHeader # define deflateTune Perl_crz_deflateTune +# define deflateUsed Perl_crz_deflateUsed # define deflate_copyright Perl_crz_deflate_copyright # define get_crc_table Perl_crz_get_crc_table # ifndef Z_SOLO @@ -128,11 +135,15 @@ # define inflate_copyright Perl_crz_inflate_copyright # define inflate_fast Perl_crz_inflate_fast # define inflate_table Perl_crz_inflate_table +# define inflate_fixed Perl_crz_inflate_fixed # ifndef Z_SOLO # define uncompress z_uncompress # define uncompress2 z_uncompress2 +# define uncompress_z z_uncompress_z +# define uncompress2_z z_uncompress2_z # endif # define zError Perl_crz_zError +# define z_errmsg Perl_crz_errmsg # ifndef Z_SOLO # define zcalloc z_zcalloc # define zcfree z_zcfree @@ -149,8 +160,8 @@ # ifndef Z_SOLO # define gzFile z_gzFile # endif -# define gz_header Perl_crz_gz_header -# define gz_headerp Perl_crz_gz_headerp +# define gz_header Perl_crz_gPerl_crz_header +# define gz_headerp Perl_crz_gPerl_crz_headerp # define in_func Perl_crz_in_func # define intf Perl_crz_intf # define out_func Perl_crz_out_func @@ -234,10 +245,12 @@ # endif #endif -#if defined(ZLIB_CONST) && !defined(z_const) -# define z_const const -#else -# define z_const +#ifndef z_const +# ifdef ZLIB_CONST +# define z_const const +# else +# define z_const +# endif #endif #ifdef Z_SOLO @@ -408,12 +421,12 @@ typedef uLong FAR uLongf; #ifdef STDC typedef void const *voidpc; - typedef Bytef *voidpf; - typedef Bytef *voidp; + typedef void FAR *voidpf; + typedef void *voidp; #else typedef Byte const *voidpc; - typedef Bytef *voidpf; - typedef Bytef *voidp; + typedef Byte FAR *voidpf; + typedef Byte *voidp; #endif #if !defined(Z_U4) && !defined(Z_SOLO) && defined(STDC) @@ -433,11 +446,11 @@ typedef uLong FAR uLongf; typedef unsigned long z_crc_t; #endif -#ifdef HAVE_UNISTD_H /* may be set to #if 1 by ./configure */ +#if HAVE_UNISTD_H-0 /* may be set to #if 1 by ./configure */ # define Z_HAVE_UNISTD_H #endif -#ifdef HAVE_STDARG_H /* may be set to #if 1 by ./configure */ +#if HAVE_STDARG_H-0 /* may be set to #if 1 by ./configure */ # define Z_HAVE_STDARG_H #endif @@ -470,12 +483,8 @@ typedef uLong FAR uLongf; #endif #ifndef Z_HAVE_UNISTD_H -# ifdef __WATCOMC__ -# define Z_HAVE_UNISTD_H -# endif -#endif -#ifndef Z_HAVE_UNISTD_H -# if defined(_LARGEFILE64_SOURCE) && !defined(_WIN32) +# if defined(__WATCOMC__) || defined(__GO32__) || \ + (defined(_LARGEFILE64_SOURCE) && !defined(_WIN32)) # define Z_HAVE_UNISTD_H # endif #endif @@ -510,17 +519,19 @@ typedef uLong FAR uLongf; #endif #ifndef z_off_t -# define z_off_t long +# define z_off_t long long #endif #if !defined(_WIN32) && defined(Z_LARGE64) # define z_off64_t off64_t +#elif defined(__MINGW32__) +# define z_off64_t long long +#elif defined(_WIN32) && !defined(__GNUC__) +# define z_off64_t __int64 +#elif defined(__GO32__) +# define z_off64_t offset_t #else -# if defined(_WIN32) && !defined(__GNUC__) -# define z_off64_t __int64 -# else -# define z_off64_t z_off_t -# endif +# define z_off64_t z_off_t #endif /* MVS linker does not support external names larger than 8 bytes */ Index: gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/zlib.h =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/zlib.h,v diff -u -p -a -u -p -r1.1.1.8 zlib.h --- gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/zlib.h 28 Jan 2025 01:04:23 -0000 1.1.1.8 +++ gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/zlib.h 29 Mar 2026 16:31:42 -0000 @@ -1,7 +1,7 @@ /* zlib.h -- interface of the 'zlib' general purpose compression library - version 1.3.1, January 22nd, 2024 + version 1.3.2, February 17th, 2026 - Copyright (C) 1995-2024 Jean-loup Gailly and Mark Adler + Copyright (C) 1995-2026 Jean-loup Gailly and Mark Adler This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -24,24 +24,28 @@ The data format used by the zlib library is described by RFCs (Request for - Comments) 1950 to 1952 in the files http://tools.ietf.org/html/rfc1950 + Comments) 1950 to 1952 at https://datatracker.ietf.org/doc/html/rfc1950 (zlib format), rfc1951 (deflate format) and rfc1952 (gzip format). */ #ifndef ZLIB_H #define ZLIB_H -#include "zconf.h" +#ifdef ZLIB_BUILD +# include +#else +# include "zconf.h" +#endif #ifdef __cplusplus extern "C" { #endif -#define ZLIB_VERSION "1.3.1" -#define ZLIB_VERNUM 0x1310 +#define ZLIB_VERSION "1.3.2" +#define ZLIB_VERNUM 0x1320 #define ZLIB_VER_MAJOR 1 #define ZLIB_VER_MINOR 3 -#define ZLIB_VER_REVISION 1 +#define ZLIB_VER_REVISION 2 #define ZLIB_VER_SUBREVISION 0 /* @@ -441,7 +445,7 @@ ZEXTERN int ZEXPORT inflate(z_streamp st The Z_BLOCK option assists in appending to or combining deflate streams. To assist in this, on return inflate() always sets strm->data_type to the - number of unused bits in the last byte taken from strm->next_in, plus 64 if + number of unused bits in the input taken from strm->next_in, plus 64 if inflate() is currently decoding the last block in the deflate stream, plus 128 if inflate() returned immediately after decoding an end-of-block code or decoding the complete header up to just before the first byte of the deflate @@ -587,18 +591,21 @@ ZEXTERN int ZEXPORT deflateInit2(z_strea The strategy parameter is used to tune the compression algorithm. Use the value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a - filter (or predictor), Z_HUFFMAN_ONLY to force Huffman encoding only (no - string match), or Z_RLE to limit match distances to one (run-length - encoding). Filtered data consists mostly of small values with a somewhat - random distribution. In this case, the compression algorithm is tuned to - compress them better. The effect of Z_FILTERED is to force more Huffman - coding and less string matching; it is somewhat intermediate between - Z_DEFAULT_STRATEGY and Z_HUFFMAN_ONLY. Z_RLE is designed to be almost as - fast as Z_HUFFMAN_ONLY, but give better compression for PNG image data. The - strategy parameter only affects the compression ratio but not the - correctness of the compressed output even if it is not set appropriately. - Z_FIXED prevents the use of dynamic Huffman codes, allowing for a simpler - decoder for special applications. + filter (or predictor), Z_RLE to limit match distances to one (run-length + encoding), or Z_HUFFMAN_ONLY to force Huffman encoding only (no string + matching). Filtered data consists mostly of small values with a somewhat + random distribution, as produced by the PNG filters. In this case, the + compression algorithm is tuned to compress them better. The effect of + Z_FILTERED is to force more Huffman coding and less string matching than the + default; it is intermediate between Z_DEFAULT_STRATEGY and Z_HUFFMAN_ONLY. + Z_RLE is almost as fast as Z_HUFFMAN_ONLY, but should give better + compression for PNG image data than Huffman only. The degree of string + matching from most to none is: Z_DEFAULT_STRATEGY, Z_FILTERED, Z_RLE, then + Z_HUFFMAN_ONLY. The strategy parameter affects the compression ratio but + never the correctness of the compressed output, even if it is not set + optimally for the given data. Z_FIXED uses the default string matching, but + prevents the use of dynamic Huffman codes, allowing for a simpler decoder + for special applications. deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_STREAM_ERROR if any parameter is invalid (such as an invalid @@ -758,8 +765,8 @@ ZEXTERN int ZEXPORT deflateTune(z_stream returns Z_OK on success, or Z_STREAM_ERROR for an invalid deflate stream. */ -ZEXTERN uLong ZEXPORT deflateBound(z_streamp strm, - uLong sourceLen); +ZEXTERN uLong ZEXPORT deflateBound(z_streamp strm, uLong sourceLen); +ZEXTERN z_size_t ZEXPORT deflateBound_z(z_streamp strm, z_size_t sourceLen); /* deflateBound() returns an upper bound on the compressed size after deflation of sourceLen bytes. It must be called after deflateInit() or @@ -771,6 +778,9 @@ ZEXTERN uLong ZEXPORT deflateBound(z_str to return Z_STREAM_END. Note that it is possible for the compressed size to be larger than the value returned by deflateBound() if flush options other than Z_FINISH or Z_NO_FLUSH are used. + + delfateBound_z() is the same, but takes and returns a size_t length. Note + that a long is 32 bits on Windows. */ ZEXTERN int ZEXPORT deflatePending(z_streamp strm, @@ -785,6 +795,21 @@ ZEXTERN int ZEXPORT deflatePending(z_str or bits are Z_NULL, then those values are not set. deflatePending returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. If an int is 16 bits and memLevel is 9, then + it is possible for the number of pending bytes to not fit in an unsigned. In + that case Z_BUF_ERROR is returned and *pending is set to the maximum value + of an unsigned. + */ + +ZEXTERN int ZEXPORT deflateUsed(z_streamp strm, + int *bits); +/* + deflateUsed() returns in *bits the most recent number of deflate bits used + in the last byte when flushing to a byte boundary. The result is in 1..8, or + 0 if there has not yet been a flush. This helps determine the location of + the last bit of a deflate stream. + + deflateUsed returns Z_OK if success, or Z_STREAM_ERROR if the source stream state was inconsistent. */ @@ -987,13 +1012,15 @@ ZEXTERN int ZEXPORT inflatePrime(z_strea int bits, int value); /* - This function inserts bits in the inflate input stream. The intent is - that this function is used to start inflating at a bit position in the - middle of a byte. The provided bits will be used before any bytes are used - from next_in. This function should only be used with raw inflate, and - should be used before the first inflate() call after inflateInit2() or - inflateReset(). bits must be less than or equal to 16, and that many of the - least significant bits of value will be inserted in the input. + This function inserts bits in the inflate input stream. The intent is to + use inflatePrime() to start inflating at a bit position in the middle of a + byte. The provided bits will be used before any bytes are used from + next_in. This function should be used with raw inflate, before the first + inflate() call, after inflateInit2() or inflateReset(). It can also be used + after an inflate() return indicates the end of a deflate block or header + when using Z_BLOCK. bits must be less than or equal to 16, and that many of + the least significant bits of value will be inserted in the input. The + other bits in value can be non-zero, and will be ignored. If bits is negative, then the input stream bit buffer is emptied. Then inflatePrime() can be called again to put bits in the buffer. This is used @@ -1001,7 +1028,15 @@ ZEXTERN int ZEXPORT inflatePrime(z_strea to feeding inflate codes. inflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source - stream state was inconsistent. + stream state was inconsistent, or if bits is out of range. If inflate was + in the middle of processing a header, trailer, or stored block lengths, then + it is possible for there to be only eight bits available in the bit buffer. + In that case, bits > 8 is considered out of range. However, when used as + outlined above, there will always be 16 bits available in the buffer for + insertion. As noted in its documentation above, inflate records the number + of bits in the bit buffer on return in data_type. 32 minus that is the + number of bits available for insertion. inflatePrime does not update + data_type with the new number of bits in buffer. */ ZEXTERN long ZEXPORT inflateMark(z_streamp strm); @@ -1047,20 +1082,22 @@ ZEXTERN int ZEXPORT inflateGetHeader(z_s The text, time, xflags, and os fields are filled in with the gzip header contents. hcrc is set to true if there is a header CRC. (The header CRC - was valid if done is set to one.) If extra is not Z_NULL, then extra_max - contains the maximum number of bytes to write to extra. Once done is true, - extra_len contains the actual extra field length, and extra contains the - extra field, or that field truncated if extra_max is less than extra_len. - If name is not Z_NULL, then up to name_max characters are written there, - terminated with a zero unless the length is greater than name_max. If - comment is not Z_NULL, then up to comm_max characters are written there, - terminated with a zero unless the length is greater than comm_max. When any - of extra, name, or comment are not Z_NULL and the respective field is not - present in the header, then that field is set to Z_NULL to signal its - absence. This allows the use of deflateSetHeader() with the returned - structure to duplicate the header. However if those fields are set to - allocated memory, then the application will need to save those pointers - elsewhere so that they can be eventually freed. + was valid if done is set to one.) The extra, name, and comment pointers + much each be either Z_NULL or point to space to store that information from + the header. If extra is not Z_NULL, then extra_max contains the maximum + number of bytes that can be written to extra. Once done is true, extra_len + contains the actual extra field length, and extra contains the extra field, + or that field truncated if extra_max is less than extra_len. If name is not + Z_NULL, then up to name_max characters, including the terminating zero, are + written there. If comment is not Z_NULL, then up to comm_max characters, + including the terminating zero, are written there. The application can tell + that the name or comment did not fit in the provided space by the absence of + a terminating zero. If any of extra, name, or comment are not present in + the header, then that field's pointer is set to Z_NULL. This allows the use + of deflateSetHeader() with the returned structure to duplicate the header. + Note that if those fields initially pointed to allocated memory, then the + application will need to save them elsewhere so that they can be eventually + freed. If inflateGetHeader is not used, then the header information is simply discarded. The header is always checked for validity, including the header @@ -1208,13 +1245,14 @@ ZEXTERN uLong ZEXPORT zlibCompileFlags(v 21: FASTEST -- deflate algorithm with only one, lowest compression level 22,23: 0 (reserved) - The sprintf variant used by gzprintf (zero is best): + The sprintf variant used by gzprintf (all zeros is best): 24: 0 = vs*, 1 = s* -- 1 means limited to 20 arguments after the format - 25: 0 = *nprintf, 1 = *printf -- 1 means gzprintf() not secure! + 25: 0 = *nprintf, 1 = *printf -- 1 means gzprintf() is not secure! 26: 0 = returns value, 1 = void -- 1 means inferred string length returned + 27: 0 = gzprintf() present, 1 = not -- 1 means gzprintf() returns an error Remainder: - 27-31: 0 (reserved) + 28-31: 0 (reserved) */ #ifndef Z_SOLO @@ -1226,11 +1264,14 @@ ZEXTERN uLong ZEXPORT zlibCompileFlags(v stream-oriented functions. To simplify the interface, some default options are assumed (compression level and memory usage, standard memory allocation functions). The source code of these utility functions can be modified if - you need special options. + you need special options. The _z versions of the functions use the size_t + type for lengths. Note that a long is 32 bits on Windows. */ -ZEXTERN int ZEXPORT compress(Bytef *dest, uLongf *destLen, +ZEXTERN int ZEXPORT compress(Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen); +ZEXTERN int ZEXPORT compress_z(Bytef *dest, z_size_t *destLen, + const Bytef *source, z_size_t sourceLen); /* Compresses the source buffer into the destination buffer. sourceLen is the byte length of the source buffer. Upon entry, destLen is the total size @@ -1244,9 +1285,12 @@ ZEXTERN int ZEXPORT compress(Bytef *dest buffer. */ -ZEXTERN int ZEXPORT compress2(Bytef *dest, uLongf *destLen, +ZEXTERN int ZEXPORT compress2(Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen, int level); +ZEXTERN int ZEXPORT compress2_z(Bytef *dest, z_size_t *destLen, + const Bytef *source, z_size_t sourceLen, + int level); /* Compresses the source buffer into the destination buffer. The level parameter has the same meaning as in deflateInit. sourceLen is the byte @@ -1261,21 +1305,24 @@ ZEXTERN int ZEXPORT compress2(Bytef *des */ ZEXTERN uLong ZEXPORT compressBound(uLong sourceLen); +ZEXTERN z_size_t ZEXPORT compressBound_z(z_size_t sourceLen); /* compressBound() returns an upper bound on the compressed size after compress() or compress2() on sourceLen bytes. It would be used before a compress() or compress2() call to allocate the destination buffer. */ -ZEXTERN int ZEXPORT uncompress(Bytef *dest, uLongf *destLen, +ZEXTERN int ZEXPORT uncompress(Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen); +ZEXTERN int ZEXPORT uncompress_z(Bytef *dest, z_size_t *destLen, + const Bytef *source, z_size_t sourceLen); /* Decompresses the source buffer into the destination buffer. sourceLen is - the byte length of the source buffer. Upon entry, destLen is the total size + the byte length of the source buffer. On entry, *destLen is the total size of the destination buffer, which must be large enough to hold the entire uncompressed data. (The size of the uncompressed data must have been saved previously by the compressor and transmitted to the decompressor by some - mechanism outside the scope of this compression library.) Upon exit, destLen + mechanism outside the scope of this compression library.) On exit, *destLen is the actual size of the uncompressed data. uncompress returns Z_OK if success, Z_MEM_ERROR if there was not @@ -1285,8 +1332,10 @@ ZEXTERN int ZEXPORT uncompress(Bytef *de buffer with the uncompressed data up to that point. */ -ZEXTERN int ZEXPORT uncompress2(Bytef *dest, uLongf *destLen, +ZEXTERN int ZEXPORT uncompress2(Bytef *dest, uLongf *destLen, const Bytef *source, uLong *sourceLen); +ZEXTERN int ZEXPORT uncompress2_z(Bytef *dest, z_size_t *destLen, + const Bytef *source, z_size_t *sourceLen); /* Same as uncompress, except that sourceLen is a pointer, where the length of the source is *sourceLen. On return, *sourceLen is the number of @@ -1314,13 +1363,17 @@ ZEXTERN gzFile ZEXPORT gzopen(const char 'R' for run-length encoding as in "wb1R", or 'F' for fixed code compression as in "wb9F". (See the description of deflateInit2 for more information about the strategy parameter.) 'T' will request transparent writing or - appending with no compression and not using the gzip format. + appending with no compression and not using the gzip format. 'T' cannot be + used to force transparent reading. Transparent reading is automatically + performed if there is no gzip header at the start. Transparent reading can + be disabled with the 'G' option, which will instead return an error if there + is no gzip header. 'N' will open the file in non-blocking mode. - "a" can be used instead of "w" to request that the gzip stream that will - be written be appended to the file. "+" will result in an error, since + 'a' can be used instead of 'w' to request that the gzip stream that will + be written be appended to the file. '+' will result in an error, since reading and writing to the same gzip file is not supported. The addition of - "x" when writing will create the file exclusively, which fails if the file - already exists. On systems that support it, the addition of "e" when + 'x' when writing will create the file exclusively, which fails if the file + already exists. On systems that support it, the addition of 'e' when reading or writing will set the flag to close the file on an execve() call. These functions, as well as gzip, will read and decode a sequence of gzip @@ -1339,14 +1392,22 @@ ZEXTERN gzFile ZEXPORT gzopen(const char insufficient memory to allocate the gzFile state, or if an invalid mode was specified (an 'r', 'w', or 'a' was not provided, or '+' was provided). errno can be checked to determine if the reason gzopen failed was that the - file could not be opened. + file could not be opened. Note that if 'N' is in mode for non-blocking, the + open() itself can fail in order to not block. In that case gzopen() will + return NULL and errno will be EAGAIN or ENONBLOCK. The call to gzopen() can + then be re-tried. If the application would like to block on opening the + file, then it can use open() without O_NONBLOCK, and then gzdopen() with the + resulting file descriptor and 'N' in the mode, which will set it to non- + blocking. */ ZEXTERN gzFile ZEXPORT gzdopen(int fd, const char *mode); /* Associate a gzFile with the file descriptor fd. File descriptors are obtained from calls like open, dup, creat, pipe or fileno (if the file has - been previously opened with fopen). The mode parameter is as in gzopen. + been previously opened with fopen). The mode parameter is as in gzopen. An + 'e' in mode will set fd's flag to close the file on an execve() call. An 'N' + in mode will set fd's non-blocking flag. The next call of gzclose on the returned gzFile will also close the file descriptor fd, just like fclose(fdopen(fd, mode)) closes the file descriptor @@ -1416,10 +1477,16 @@ ZEXTERN int ZEXPORT gzread(gzFile file, stream. Alternatively, gzerror can be used before gzclose to detect this case. + gzread can be used to read a gzip file on a non-blocking device. If the + input stalls and there is no uncompressed data to return, then gzread() will + return -1, and errno will be EAGAIN or EWOULDBLOCK. gzread() can then be + called again. + gzread returns the number of uncompressed bytes actually read, less than len for end of file, or -1 for error. If len is too large to fit in an int, then nothing is read, -1 is returned, and the error state is set to - Z_STREAM_ERROR. + Z_STREAM_ERROR. If some data was read before an error, then that data is + returned until exhausted, after which the next call will signal the error. */ ZEXTERN z_size_t ZEXPORT gzfread(voidp buf, z_size_t size, z_size_t nitems, @@ -1443,15 +1510,20 @@ ZEXTERN z_size_t ZEXPORT gzfread(voidp b multiple of size, then the final partial item is nevertheless read into buf and the end-of-file flag is set. The length of the partial item read is not provided, but could be inferred from the result of gztell(). This behavior - is the same as the behavior of fread() implementations in common libraries, - but it prevents the direct use of gzfread() to read a concurrently written - file, resetting and retrying on end-of-file, when size is not 1. + is the same as that of fread() implementations in common libraries. This + could result in data loss if used with size != 1 when reading a concurrently + written file or a non-blocking file. In that case, use size == 1 or gzread() + instead. */ ZEXTERN int ZEXPORT gzwrite(gzFile file, voidpc buf, unsigned len); /* Compress and write the len uncompressed bytes at buf to file. gzwrite - returns the number of uncompressed bytes written or 0 in case of error. + returns the number of uncompressed bytes written, or 0 in case of error or + if len is 0. If the write destination is non-blocking, then gzwrite() may + return a number of bytes written that is not 0 and less than len. + + If len does not fit in an int, then 0 is returned and nothing is written. */ ZEXTERN z_size_t ZEXPORT gzfwrite(voidpc buf, z_size_t size, @@ -1466,9 +1538,18 @@ ZEXTERN z_size_t ZEXPORT gzfwrite(voidpc if there was an error. If the multiplication of size and nitems overflows, i.e. the product does not fit in a z_size_t, then nothing is written, zero is returned, and the error state is set to Z_STREAM_ERROR. + + If writing a concurrently read file or a non-blocking file with size != 1, + a partial item could be written, with no way of knowing how much of it was + not written, resulting in data loss. In that case, use size == 1 or + gzwrite() instead. */ +#if defined(STDC) || defined(Z_HAVE_STDARG_H) ZEXTERN int ZEXPORTVA gzprintf(gzFile file, const char *format, ...); +#else +ZEXTERN int ZEXPORTVA gzprintf(); +#endif /* Convert, format, compress, and write the arguments (...) to file under control of the string format, as in fprintf. gzprintf returns the number of @@ -1476,11 +1557,19 @@ ZEXTERN int ZEXPORTVA gzprintf(gzFile fi of error. The number of uncompressed bytes written is limited to 8191, or one less than the buffer size given to gzbuffer(). The caller should assure that this limit is not exceeded. If it is exceeded, then gzprintf() will - return an error (0) with nothing written. In this case, there may also be a - buffer overflow with unpredictable consequences, which is possible only if - zlib was compiled with the insecure functions sprintf() or vsprintf(), - because the secure snprintf() or vsnprintf() functions were not available. - This can be determined using zlibCompileFlags(). + return an error (0) with nothing written. + + In that last case, there may also be a buffer overflow with unpredictable + consequences, which is possible only if zlib was compiled with the insecure + functions sprintf() or vsprintf(), because the secure snprintf() and + vsnprintf() functions were not available. That would only be the case for + a non-ANSI C compiler. zlib may have been built without gzprintf() because + secure functions were not available and having gzprintf() be insecure was + not an option, in which case, gzprintf() returns Z_STREAM_ERROR. All of + these possibilities can be determined using zlibCompileFlags(). + + If a Z_BUF_ERROR is returned, then nothing was written due to a stall on + the non-blocking write destination. */ ZEXTERN int ZEXPORT gzputs(gzFile file, const char *s); @@ -1489,6 +1578,11 @@ ZEXTERN int ZEXPORT gzputs(gzFile file, the terminating null character. gzputs returns the number of characters written, or -1 in case of error. + The number of characters written may be less than the length of the string + if the write destination is non-blocking. + + If the length of the string does not fit in an int, then -1 is returned + and nothing is written. */ ZEXTERN char * ZEXPORT gzgets(gzFile file, char *buf, int len); @@ -1501,8 +1595,13 @@ ZEXTERN char * ZEXPORT gzgets(gzFile fil left untouched. gzgets returns buf which is a null-terminated string, or it returns NULL - for end-of-file or in case of error. If there was an error, the contents at - buf are indeterminate. + for end-of-file or in case of error. If some data was read before an error, + then that data is returned until exhausted, after which the next call will + return NULL to signal the error. + + gzgets can be used on a file being concurrently written, and on a non- + blocking device, both as for gzread(). However lines may be broken in the + middle, leaving it up to the application to reassemble them as needed. */ ZEXTERN int ZEXPORT gzputc(gzFile file, int c); @@ -1513,11 +1612,19 @@ ZEXTERN int ZEXPORT gzputc(gzFile file, ZEXTERN int ZEXPORT gzgetc(gzFile file); /* - Read and decompress one byte from file. gzgetc returns this byte or -1 - in case of end of file or error. This is implemented as a macro for speed. - As such, it does not do all of the checking the other functions do. I.e. - it does not check to see if file is NULL, nor whether the structure file - points to has been clobbered or not. + Read and decompress one byte from file. gzgetc returns this byte or -1 in + case of end of file or error. If some data was read before an error, then + that data is returned until exhausted, after which the next call will return + -1 to signal the error. + + This is implemented as a macro for speed. As such, it does not do all of + the checking the other functions do. I.e. it does not check to see if file + is NULL, nor whether the structure file points to has been clobbered or not. + + gzgetc can be used to read a gzip file on a non-blocking device. If the + input stalls and there is no uncompressed data to return, then gzgetc() will + return -1, and errno will be EAGAIN or EWOULDBLOCK. gzread() can then be + called again. */ ZEXTERN int ZEXPORT gzungetc(int c, gzFile file); @@ -1530,6 +1637,11 @@ ZEXTERN int ZEXPORT gzungetc(int c, gzFi output buffer size of pushed characters is allowed. (See gzbuffer above.) The pushed character will be discarded if the stream is repositioned with gzseek() or gzrewind(). + + gzungetc(-1, file) will force any pending seek to execute. Then gztell() + will report the position, even if the requested seek reached end of file. + This can be used to determine the number of uncompressed bytes in a gzip + file without having to read it into a buffer. */ ZEXTERN int ZEXPORT gzflush(gzFile file, int flush); @@ -1559,7 +1671,8 @@ ZEXTERN z_off_t ZEXPORT gzseek(gzFile fi If the file is opened for reading, this function is emulated but can be extremely slow. If the file is opened for writing, only forward seeks are supported; gzseek then compresses a sequence of zeroes up to the new - starting position. + starting position. For reading or writing, any actual seeking is deferred + until the next read or write operation, or close operation when writing. gzseek returns the resulting offset location as measured in bytes from the beginning of the uncompressed stream, or -1 in case of error, in @@ -1567,7 +1680,7 @@ ZEXTERN z_off_t ZEXPORT gzseek(gzFile fi would be before the current position. */ -ZEXTERN int ZEXPORT gzrewind(gzFile file); +ZEXTERN int ZEXPORT gzrewind(gzFile file); /* Rewind file. This function is supported only for reading. @@ -1575,7 +1688,7 @@ ZEXTERN int ZEXPORT gzrewind(gzFile f */ /* -ZEXTERN z_off_t ZEXPORT gztell(gzFile file); +ZEXTERN z_off_t ZEXPORT gztell(gzFile file); Return the starting position for the next gzread or gzwrite on file. This position represents a number of bytes in the uncompressed data stream, @@ -1620,8 +1733,11 @@ ZEXTERN int ZEXPORT gzdirect(gzFile file If gzdirect() is used immediately after gzopen() or gzdopen() it will cause buffers to be allocated to allow reading the file to determine if it - is a gzip file. Therefore if gzbuffer() is used, it should be called before - gzdirect(). + is a gzip file. Therefore if gzbuffer() is used, it should be called before + gzdirect(). If the input is being written concurrently or the device is non- + blocking, then gzdirect() may give a different answer once four bytes of + input have been accumulated, which is what is needed to confirm or deny a + gzip header. Before this, gzdirect() will return true (1). When writing, gzdirect() returns true (1) if transparent writing was requested ("wT" for the gzopen() mode), or false (0) otherwise. (Note: @@ -1631,7 +1747,7 @@ ZEXTERN int ZEXPORT gzdirect(gzFile file gzip file reading and decompression, which may not be desired.) */ -ZEXTERN int ZEXPORT gzclose(gzFile file); +ZEXTERN int ZEXPORT gzclose(gzFile file); /* Flush all pending output for file, if necessary, close file and deallocate the (de)compression state. Note that once file is closed, you @@ -1659,9 +1775,10 @@ ZEXTERN int ZEXPORT gzclose_w(gzFile fil ZEXTERN const char * ZEXPORT gzerror(gzFile file, int *errnum); /* Return the error message for the last error which occurred on file. - errnum is set to zlib error number. If an error occurred in the file system - and not in the compression library, errnum is set to Z_ERRNO and the - application may consult errno to get the exact error code. + If errnum is not NULL, *errnum is set to zlib error number. If an error + occurred in the file system and not in the compression library, *errnum is + set to Z_ERRNO and the application may consult errno to get the exact error + code. The application must not modify the returned string. Future calls to this function may invalidate the previously returned string. If file is @@ -1712,7 +1829,8 @@ ZEXTERN uLong ZEXPORT adler32(uLong adle ZEXTERN uLong ZEXPORT adler32_z(uLong adler, const Bytef *buf, z_size_t len); /* - Same as adler32(), but with a size_t length. + Same as adler32(), but with a size_t length. Note that a long is 32 bits + on Windows. */ /* @@ -1748,7 +1866,8 @@ ZEXTERN uLong ZEXPORT crc32(uLong crc, c ZEXTERN uLong ZEXPORT crc32_z(uLong crc, const Bytef *buf, z_size_t len); /* - Same as crc32(), but with a size_t length. + Same as crc32(), but with a size_t length. Note that a long is 32 bits on + Windows. */ /* @@ -1758,14 +1877,14 @@ ZEXTERN uLong ZEXPORT crc32_combine(uLon seq1 and seq2 with lengths len1 and len2, CRC-32 check values were calculated for each, crc1 and crc2. crc32_combine() returns the CRC-32 check value of seq1 and seq2 concatenated, requiring only crc1, crc2, and - len2. len2 must be non-negative. + len2. len2 must be non-negative, otherwise zero is returned. */ /* ZEXTERN uLong ZEXPORT crc32_combine_gen(z_off_t len2); Return the operator corresponding to length len2, to be used with - crc32_combine_op(). len2 must be non-negative. + crc32_combine_op(). len2 must be non-negative, otherwise zero is returned. */ ZEXTERN uLong ZEXPORT crc32_combine_op(uLong crc1, uLong crc2, uLong op); @@ -1888,9 +2007,9 @@ ZEXTERN int ZEXPORT gzgetc_(gzFile file) ZEXTERN z_off_t ZEXPORT gzseek64(gzFile, z_off_t, int); ZEXTERN z_off_t ZEXPORT gztell64(gzFile); ZEXTERN z_off_t ZEXPORT gzoffset64(gzFile); - ZEXTERN uLong ZEXPORT adler32_combine64(uLong, uLong, z_off_t); - ZEXTERN uLong ZEXPORT crc32_combine64(uLong, uLong, z_off_t); - ZEXTERN uLong ZEXPORT crc32_combine_gen64(z_off_t); + ZEXTERN uLong ZEXPORT adler32_combine64(uLong, uLong, z_off64_t); + ZEXTERN uLong ZEXPORT crc32_combine64(uLong, uLong, z_off64_t); + ZEXTERN uLong ZEXPORT crc32_combine_gen64(z_off64_t); # endif #else ZEXTERN gzFile ZEXPORT gzopen(const char *, const char *); Index: gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/zutil.c =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/zutil.c,v diff -u -p -a -u -p -r1.9 zutil.c --- gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/zutil.c 28 Jan 2025 01:06:11 -0000 1.9 +++ gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/zutil.c 29 Mar 2026 16:31:42 -0000 @@ -1,5 +1,5 @@ /* zutil.c -- target dependent utility functions for the compression library - * Copyright (C) 1995-2017 Jean-loup Gailly + * Copyright (C) 1995-2026 Jean-loup Gailly * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -86,28 +86,36 @@ uLong ZEXPORT zlibCompileFlags(void) { flags += 1L << 21; #endif #if defined(STDC) || defined(Z_HAVE_STDARG_H) -# ifdef NO_vsnprintf - flags += 1L << 25; -# ifdef HAS_vsprintf_void - flags += 1L << 26; -# endif -# else -# ifdef HAS_vsnprintf_void - flags += 1L << 26; -# endif -# endif +# ifdef NO_vsnprintf +# ifdef ZLIB_INSECURE + flags += 1L << 25; +# else + flags += 1L << 27; +# endif +# ifdef HAS_vsprintf_void + flags += 1L << 26; +# endif +# else +# ifdef HAS_vsnprintf_void + flags += 1L << 26; +# endif +# endif #else flags += 1L << 24; -# ifdef NO_snprintf - flags += 1L << 25; -# ifdef HAS_sprintf_void - flags += 1L << 26; -# endif -# else -# ifdef HAS_snprintf_void - flags += 1L << 26; -# endif -# endif +# ifdef NO_snprintf +# ifdef ZLIB_INSECURE + flags += 1L << 25; +# else + flags += 1L << 27; +# endif +# ifdef HAS_sprintf_void + flags += 1L << 26; +# endif +# else +# ifdef HAS_snprintf_void + flags += 1L << 26; +# endif +# endif #endif return flags; } @@ -142,28 +150,34 @@ const char * ZEXPORT zError(int err) { #ifndef HAVE_MEMCPY -void ZLIB_INTERNAL zmemcpy(Bytef* dest, const Bytef* source, uInt len) { - if (len == 0) return; - do { - *dest++ = *source++; /* ??? to be unrolled */ - } while (--len != 0); +void ZLIB_INTERNAL zmemcpy(void FAR *dst, const void FAR *src, z_size_t n) { + uchf *p = (uchf *)dst; + const uchf *q = (const uchf *)src; + while (n) { + *p++ = *q++; + n--; + } } -int ZLIB_INTERNAL zmemcmp(const Bytef* s1, const Bytef* s2, uInt len) { - uInt j; - - for (j = 0; j < len; j++) { - if (s1[j] != s2[j]) return 2*(s1[j] > s2[j])-1; +int ZLIB_INTERNAL zmemcmp(const void FAR *s1, const void FAR *s2, z_size_t n) { + const uchf *p = (const uchf *)s1, *q = (const uchf *)s2; + while (n) { + if (*p++ != *q++) + return (int)p[-1] - (int)q[-1]; + n--; } return 0; } -void ZLIB_INTERNAL zmemzero(Bytef* dest, uInt len) { +void ZLIB_INTERNAL zmemzero(void FAR *b, z_size_t len) { + uchf *p = (uchf *)b; if (len == 0) return; - do { - *dest++ = 0; /* ??? to be unrolled */ - } while (--len != 0); + while (len) { + *p++ = 0; + len--; + } } + #endif #ifndef Z_SOLO Index: gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/zutil.h =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/zutil.h,v diff -u -p -a -u -p -r1.9 zutil.h --- gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/zutil.h 28 Jan 2025 01:06:11 -0000 1.9 +++ gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/zutil.h 29 Mar 2026 16:31:42 -0000 @@ -1,5 +1,5 @@ /* zutil.h -- internal interface and configuration of the compression library - * Copyright (C) 1995-2024 Jean-loup Gailly, Mark Adler + * Copyright (C) 1995-2026 Jean-loup Gailly, Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -36,6 +36,10 @@ define "local" for the non-static meaning of "static", for readability (compile with -Dlocal if your debugger can't find static symbols) */ +extern const char deflate_copyright[]; +extern const char inflate_copyright[]; +extern const char inflate9_copyright[]; + typedef unsigned char uch; typedef uch FAR uchf; typedef unsigned short ush; @@ -48,6 +52,8 @@ typedef unsigned long ulg; # define Z_U8 unsigned long # elif (ULLONG_MAX == 0xffffffffffffffff) # define Z_U8 unsigned long long +# elif (ULONG_LONG_MAX == 0xffffffffffffffff) +# define Z_U8 unsigned long long # elif (UINT_MAX == 0xffffffffffffffff) # define Z_U8 unsigned # endif @@ -63,7 +69,9 @@ extern z_const char * const z_errmsg[10] /* To be used only when the state is known to be valid */ /* common constants */ - +#if MAX_WBITS < 9 || MAX_WBITS > 15 +# error MAX_WBITS must be in 9..15 +#endif #ifndef DEF_WBITS # define DEF_WBITS MAX_WBITS #endif @@ -141,7 +149,7 @@ extern z_const char * const z_errmsg[10] # define OS_CODE 7 #endif -#ifdef __acorn +#if defined(__acorn) || defined(__riscos) # define OS_CODE 13 #endif @@ -168,11 +176,10 @@ extern z_const char * const z_errmsg[10] #endif /* provide prototypes for these when building zlib without LFS */ -#if !defined(_WIN32) && \ - (!defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0) - ZEXTERN uLong ZEXPORT adler32_combine64(uLong, uLong, z_off_t); - ZEXTERN uLong ZEXPORT crc32_combine64(uLong, uLong, z_off_t); - ZEXTERN uLong ZEXPORT crc32_combine_gen64(z_off_t); +#ifndef Z_LARGE64 + ZEXTERN uLong ZEXPORT adler32_combine64(uLong, uLong, z_off64_t); + ZEXTERN uLong ZEXPORT crc32_combine64(uLong, uLong, z_off64_t); + ZEXTERN uLong ZEXPORT crc32_combine_gen64(z_off64_t); #endif /* common defaults */ @@ -211,9 +218,9 @@ extern z_const char * const z_errmsg[10] # define zmemzero(dest, len) memset(dest, 0, len) # endif #else - void ZLIB_INTERNAL zmemcpy(Bytef* dest, const Bytef* source, uInt len); - int ZLIB_INTERNAL zmemcmp(const Bytef* s1, const Bytef* s2, uInt len); - void ZLIB_INTERNAL zmemzero(Bytef* dest, uInt len); + void ZLIB_INTERNAL zmemcpy(void FAR *, const void FAR *, z_size_t); + int ZLIB_INTERNAL zmemcmp(const void FAR *, const void FAR *, z_size_t); + void ZLIB_INTERNAL zmemzero(void FAR *, z_size_t); #endif /* Diagnostic functions */ @@ -250,5 +257,75 @@ extern z_const char * const z_errmsg[10] /* Reverse the bytes in a 32-bit value */ #define ZSWAP32(q) ((((q) >> 24) & 0xff) + (((q) >> 8) & 0xff00) + \ (((q) & 0xff00) << 8) + (((q) & 0xff) << 24)) + +#ifdef Z_ONCE +/* + Create a local z_once() function depending on the availability of atomics. + */ + +/* Check for the availability of atomics. */ +#if defined(__STDC__) && __STDC_VERSION__ >= 201112L && \ + !defined(__STDC_NO_ATOMICS__) + +#include +typedef struct { + atomic_flag begun; + atomic_int done; +} z_once_t; +#define Z_ONCE_INIT {ATOMIC_FLAG_INIT, 0} + +/* + Run the provided init() function exactly once, even if multiple threads + invoke once() at the same time. The state must be a once_t initialized with + Z_ONCE_INIT. + */ +local void z_once(z_once_t *state, void (*init)(void)) { + if (!atomic_load(&state->done)) { + if (atomic_flag_test_and_set(&state->begun)) + while (!atomic_load(&state->done)) + ; + else { + init(); + atomic_store(&state->done, 1); + } + } +} + +#else /* no atomics */ + +#warning zlib not thread-safe + +typedef struct z_once_s { + volatile int begun; + volatile int done; +} z_once_t; +#define Z_ONCE_INIT {0, 0} + +/* Test and set. Alas, not atomic, but tries to limit the period of + vulnerability. */ +local int test_and_set(int volatile *flag) { + int was; + + was = *flag; + *flag = 1; + return was; +} + +/* Run the provided init() function once. This is not thread-safe. */ +local void z_once(z_once_t *state, void (*init)(void)) { + if (!state->done) { + if (test_and_set(&state->begun)) + while (!state->done) + ; + else { + init(); + state->done = 1; + } + } +} + +#endif /* ?atomics */ + +#endif /* Z_ONCE */ #endif /* ZUTIL_H */ Index: gnu/usr.bin/perl/dist/Module-CoreList/Changes =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/dist/Module-CoreList/Changes,v diff -u -p -a -u -p -r1.16 Changes --- gnu/usr.bin/perl/dist/Module-CoreList/Changes 26 Dec 2025 22:14:18 -0000 1.16 +++ gnu/usr.bin/perl/dist/Module-CoreList/Changes 29 Mar 2026 16:31:44 -0000 @@ -1,3 +1,45 @@ +5.20260329_42 + - Updated for v5.42.2 + +5.20260320 + - Updated for v5.43.9 + +5.20260308 + - Updated for v5.42.1 + +5.20260220 + - Updated for v5.43.8 + +5.20260119 + - Updated for v5.43.7 + +5.20251220 + - Updated for v5.43.6 + +5.20251120 + - Updated for v5.43.5 + +5.20251022 + - Updated for v5.43.4 + +5.20250923 + - Updated for v5.43.3 + +5.20250820 + - Updated for v5.43.2 + +5.20250803_40 + - Updated for v5.40.3 + +5.20250803_38 + - Updated for v5.38.5 + +5.20250720 + - Updated for v5.43.1 + +5.20250703 + - Updated for v5.43.0 + 5.20250702 - Updated for v5.42.0 Index: gnu/usr.bin/perl/dist/Module-CoreList/lib/Module/CoreList.pm =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/dist/Module-CoreList/lib/Module/CoreList.pm,v diff -u -p -a -u -p -r1.18 CoreList.pm --- gnu/usr.bin/perl/dist/Module-CoreList/lib/Module/CoreList.pm 26 Dec 2025 22:14:18 -0000 1.18 +++ gnu/usr.bin/perl/dist/Module-CoreList/lib/Module/CoreList.pm 29 Mar 2026 16:31:44 -0000 @@ -4,7 +4,7 @@ use strict; our ( %released, %version, %families, %upstream, %bug_tracker, %deprecated, %delta ); use version; -our $VERSION = '5.20250702'; +our $VERSION = '5.20260329_42'; sub PKG_PATTERN () { q#\A[a-zA-Z_][0-9a-zA-Z_]*(?:(::|')[0-9a-zA-Z_]+)*\z# } sub _looks_like_invocant ($) { local $@; !!eval { $_[0]->isa(__PACKAGE__) } } @@ -442,6 +442,20 @@ sub changes_between { 5.041012 => '2025-04-21', 5.041013 => '2025-05-28', 5.042000 => '2025-07-02', + 5.043000 => '2025-07-03', + 5.043001 => '2025-07-20', + 5.038005 => '2025-08-03', + 5.040003 => '2025-08-03', + 5.043002 => '2025-08-20', + 5.043003 => '2025-09-23', + 5.043004 => '2025-10-22', + 5.043005 => '2025-11-20', + 5.043006 => '2025-12-20', + 5.043007 => '2026-01-19', + 5.043008 => '2026-02-20', + 5.042001 => '2026-03-08', + 5.043009 => '2026-03-20', + 5.042002 => '2026-03-29', ); for my $version ( sort { $a <=> $b } keys %released ) { @@ -23448,6 +23462,1180 @@ for my $version ( sort { $a <=> $b } key removed => { } }, + + 5.043000 => { + delta_from => 5.042000, + changed => { + 'B::Op_private' => '5.043000', + 'Config' => '5.043', + 'Math::BigFloat' => '2.005003', + 'Math::BigInt' => '2.005003', + 'Math::BigInt::Calc' => '2.005003', + 'Math::BigInt::Lib' => '2.005003', + 'Math::BigRat' => '2.005003', + 'Module::CoreList' => '5.20250703', + 'Module::CoreList::Utils'=> '5.20250703', + 'feature' => '1.98', + }, + removed => { + } + }, + 5.043001 => { + delta_from => 5.043, + changed => { + 'App::Prove' => '3.52', + 'App::Prove::State' => '3.52', + 'App::Prove::State::Result'=> '3.52', + 'App::Prove::State::Result::Test'=> '3.52', + 'B::Op_private' => '5.043001', + 'Config' => '5.043001', + 'ExtUtils::ParseXS' => '3.58', + 'ExtUtils::ParseXS::Constants'=> '3.58', + 'ExtUtils::ParseXS::CountLines'=> '3.58', + 'ExtUtils::ParseXS::Eval'=> '3.58', + 'ExtUtils::ParseXS::Node'=> '3.58', + 'ExtUtils::ParseXS::Utilities'=> '3.58', + 'ExtUtils::Typemaps' => '3.58', + 'ExtUtils::Typemaps::Cmd'=> '3.58', + 'ExtUtils::Typemaps::InputMap'=> '3.58', + 'ExtUtils::Typemaps::OutputMap'=> '3.58', + 'ExtUtils::Typemaps::Type'=> '3.58', + 'File::Fetch' => '1.08', + 'Module::CoreList' => '5.20250720', + 'Module::CoreList::Utils'=> '5.20250720', + 'PerlIO::via' => '0.20', + 'Pod::Simple' => '3.47', + 'Pod::Simple::BlackBox' => '3.47', + 'Pod::Simple::Checker' => '3.47', + 'Pod::Simple::Debug' => '3.47', + 'Pod::Simple::DumpAsText'=> '3.47', + 'Pod::Simple::DumpAsXML'=> '3.47', + 'Pod::Simple::HTML' => '3.47', + 'Pod::Simple::HTMLBatch'=> '3.47', + 'Pod::Simple::LinkSection'=> '3.47', + 'Pod::Simple::Methody' => '3.47', + 'Pod::Simple::Progress' => '3.47', + 'Pod::Simple::PullParser'=> '3.47', + 'Pod::Simple::PullParserEndToken'=> '3.47', + 'Pod::Simple::PullParserStartToken'=> '3.47', + 'Pod::Simple::PullParserTextToken'=> '3.47', + 'Pod::Simple::PullParserToken'=> '3.47', + 'Pod::Simple::RTF' => '3.47', + 'Pod::Simple::Search' => '3.47', + 'Pod::Simple::SimpleTree'=> '3.47', + 'Pod::Simple::Text' => '3.47', + 'Pod::Simple::TextContent'=> '3.47', + 'Pod::Simple::TiedOutFH'=> '3.47', + 'Pod::Simple::Transcode'=> '3.47', + 'Pod::Simple::TranscodeDumb'=> '3.47', + 'Pod::Simple::TranscodeSmart'=> '3.47', + 'Pod::Simple::XHTML' => '3.47', + 'Pod::Simple::XMLOutStream'=> '3.47', + 'Socket' => '2.040', + 'TAP::Base' => '3.52', + 'TAP::Formatter::Base' => '3.52', + 'TAP::Formatter::Color' => '3.52', + 'TAP::Formatter::Console'=> '3.52', + 'TAP::Formatter::Console::ParallelSession'=> '3.52', + 'TAP::Formatter::Console::Session'=> '3.52', + 'TAP::Formatter::File' => '3.52', + 'TAP::Formatter::File::Session'=> '3.52', + 'TAP::Formatter::Session'=> '3.52', + 'TAP::Harness' => '3.52', + 'TAP::Harness::Env' => '3.52', + 'TAP::Object' => '3.52', + 'TAP::Parser' => '3.52', + 'TAP::Parser::Aggregator'=> '3.52', + 'TAP::Parser::Grammar' => '3.52', + 'TAP::Parser::Iterator' => '3.52', + 'TAP::Parser::Iterator::Array'=> '3.52', + 'TAP::Parser::Iterator::Process'=> '3.52', + 'TAP::Parser::Iterator::Stream'=> '3.52', + 'TAP::Parser::IteratorFactory'=> '3.52', + 'TAP::Parser::Multiplexer'=> '3.52', + 'TAP::Parser::Result' => '3.52', + 'TAP::Parser::Result::Bailout'=> '3.52', + 'TAP::Parser::Result::Comment'=> '3.52', + 'TAP::Parser::Result::Plan'=> '3.52', + 'TAP::Parser::Result::Pragma'=> '3.52', + 'TAP::Parser::Result::Test'=> '3.52', + 'TAP::Parser::Result::Unknown'=> '3.52', + 'TAP::Parser::Result::Version'=> '3.52', + 'TAP::Parser::Result::YAML'=> '3.52', + 'TAP::Parser::ResultFactory'=> '3.52', + 'TAP::Parser::Scheduler'=> '3.52', + 'TAP::Parser::Scheduler::Job'=> '3.52', + 'TAP::Parser::Scheduler::Spinner'=> '3.52', + 'TAP::Parser::Source' => '3.52', + 'TAP::Parser::SourceHandler'=> '3.52', + 'TAP::Parser::SourceHandler::Executable'=> '3.52', + 'TAP::Parser::SourceHandler::File'=> '3.52', + 'TAP::Parser::SourceHandler::Handle'=> '3.52', + 'TAP::Parser::SourceHandler::Perl'=> '3.52', + 'TAP::Parser::SourceHandler::RawTAP'=> '3.52', + 'TAP::Parser::YAMLish::Reader'=> '3.52', + 'TAP::Parser::YAMLish::Writer'=> '3.52', + 'Test2' => '1.302214', + 'Test2::API' => '1.302214', + 'Test2::API::Breakage' => '1.302214', + 'Test2::API::Context' => '1.302214', + 'Test2::API::Instance' => '1.302214', + 'Test2::API::InterceptResult'=> '1.302214', + 'Test2::API::InterceptResult::Event'=> '1.302214', + 'Test2::API::InterceptResult::Facet'=> '1.302214', + 'Test2::API::InterceptResult::Hub'=> '1.302214', + 'Test2::API::InterceptResult::Squasher'=> '1.302214', + 'Test2::API::Stack' => '1.302214', + 'Test2::AsyncSubtest' => '1.302214', + 'Test2::AsyncSubtest::Event::Attach'=> '1.302214', + 'Test2::AsyncSubtest::Event::Detach'=> '1.302214', + 'Test2::AsyncSubtest::Formatter'=> '1.302214', + 'Test2::AsyncSubtest::Hub'=> '1.302214', + 'Test2::Bundle' => '1.302214', + 'Test2::Bundle::Extended'=> '1.302214', + 'Test2::Bundle::More' => '1.302214', + 'Test2::Bundle::Simple' => '1.302214', + 'Test2::Compare' => '1.302214', + 'Test2::Compare::Array' => '1.302214', + 'Test2::Compare::Bag' => '1.302214', + 'Test2::Compare::Base' => '1.302214', + 'Test2::Compare::Bool' => '1.302214', + 'Test2::Compare::Custom'=> '1.302214', + 'Test2::Compare::DeepRef'=> '1.302214', + 'Test2::Compare::Delta' => '1.302214', + 'Test2::Compare::Event' => '1.302214', + 'Test2::Compare::EventMeta'=> '1.302214', + 'Test2::Compare::Float' => '1.302214', + 'Test2::Compare::Hash' => '1.302214', + 'Test2::Compare::Isa' => '1.302214', + 'Test2::Compare::Meta' => '1.302214', + 'Test2::Compare::Negatable'=> '1.302214', + 'Test2::Compare::Number'=> '1.302214', + 'Test2::Compare::Object'=> '1.302214', + 'Test2::Compare::OrderedSubset'=> '1.302214', + 'Test2::Compare::Pattern'=> '1.302214', + 'Test2::Compare::Ref' => '1.302214', + 'Test2::Compare::Regex' => '1.302214', + 'Test2::Compare::Scalar'=> '1.302214', + 'Test2::Compare::Set' => '1.302214', + 'Test2::Compare::String'=> '1.302214', + 'Test2::Compare::Undef' => '1.302214', + 'Test2::Compare::Wildcard'=> '1.302214', + 'Test2::Env' => '1.302214', + 'Test2::Event' => '1.302214', + 'Test2::Event::Bail' => '1.302214', + 'Test2::Event::Diag' => '1.302214', + 'Test2::Event::Encoding'=> '1.302214', + 'Test2::Event::Exception'=> '1.302214', + 'Test2::Event::Fail' => '1.302214', + 'Test2::Event::Generic' => '1.302214', + 'Test2::Event::Note' => '1.302214', + 'Test2::Event::Ok' => '1.302214', + 'Test2::Event::Pass' => '1.302214', + 'Test2::Event::Plan' => '1.302214', + 'Test2::Event::Skip' => '1.302214', + 'Test2::Event::Subtest' => '1.302214', + 'Test2::Event::TAP::Version'=> '1.302214', + 'Test2::Event::V2' => '1.302214', + 'Test2::Event::Waiting' => '1.302214', + 'Test2::EventFacet' => '1.302214', + 'Test2::EventFacet::About'=> '1.302214', + 'Test2::EventFacet::Amnesty'=> '1.302214', + 'Test2::EventFacet::Assert'=> '1.302214', + 'Test2::EventFacet::Control'=> '1.302214', + 'Test2::EventFacet::Error'=> '1.302214', + 'Test2::EventFacet::Hub'=> '1.302214', + 'Test2::EventFacet::Info'=> '1.302214', + 'Test2::EventFacet::Info::Table'=> '1.302214', + 'Test2::EventFacet::Meta'=> '1.302214', + 'Test2::EventFacet::Parent'=> '1.302214', + 'Test2::EventFacet::Plan'=> '1.302214', + 'Test2::EventFacet::Render'=> '1.302214', + 'Test2::EventFacet::Trace'=> '1.302214', + 'Test2::Formatter' => '1.302214', + 'Test2::Formatter::TAP' => '1.302214', + 'Test2::Hub' => '1.302214', + 'Test2::Hub::Interceptor'=> '1.302214', + 'Test2::Hub::Interceptor::Terminator'=> '1.302214', + 'Test2::Hub::Subtest' => '1.302214', + 'Test2::IPC' => '1.302214', + 'Test2::IPC::Driver' => '1.302214', + 'Test2::IPC::Driver::Files'=> '1.302214', + 'Test2::Manual' => '1.302214', + 'Test2::Manual::Anatomy'=> '1.302214', + 'Test2::Manual::Anatomy::API'=> '1.302214', + 'Test2::Manual::Anatomy::Context'=> '1.302214', + 'Test2::Manual::Anatomy::EndToEnd'=> '1.302214', + 'Test2::Manual::Anatomy::Event'=> '1.302214', + 'Test2::Manual::Anatomy::Hubs'=> '1.302214', + 'Test2::Manual::Anatomy::IPC'=> '1.302214', + 'Test2::Manual::Anatomy::Utilities'=> '1.302214', + 'Test2::Manual::Concurrency'=> '1.302214', + 'Test2::Manual::Contributing'=> '1.302214', + 'Test2::Manual::Testing'=> '1.302214', + 'Test2::Manual::Testing::Introduction'=> '1.302214', + 'Test2::Manual::Testing::Migrating'=> '1.302214', + 'Test2::Manual::Testing::Planning'=> '1.302214', + 'Test2::Manual::Testing::Todo'=> '1.302214', + 'Test2::Manual::Tooling'=> '1.302214', + 'Test2::Manual::Tooling::FirstTool'=> '1.302214', + 'Test2::Manual::Tooling::Formatter'=> '1.302214', + 'Test2::Manual::Tooling::Nesting'=> '1.302214', + 'Test2::Manual::Tooling::Plugin::TestExit'=> '1.302214', + 'Test2::Manual::Tooling::Plugin::TestingDone'=> '1.302214', + 'Test2::Manual::Tooling::Plugin::ToolCompletes'=> '1.302214', + 'Test2::Manual::Tooling::Plugin::ToolStarts'=> '1.302214', + 'Test2::Manual::Tooling::Subtest'=> '1.302214', + 'Test2::Manual::Tooling::TestBuilder'=> '1.302214', + 'Test2::Manual::Tooling::Testing'=> '1.302214', + 'Test2::Mock' => '1.302214', + 'Test2::Plugin' => '1.302214', + 'Test2::Plugin::BailOnFail'=> '1.302214', + 'Test2::Plugin::DieOnFail'=> '1.302214', + 'Test2::Plugin::ExitSummary'=> '1.302214', + 'Test2::Plugin::SRand' => '1.302214', + 'Test2::Plugin::Times' => '1.302214', + 'Test2::Plugin::UTF8' => '1.302214', + 'Test2::Require' => '1.302214', + 'Test2::Require::AuthorTesting'=> '1.302214', + 'Test2::Require::AutomatedTesting'=> '1.302214', + 'Test2::Require::EnvVar'=> '1.302214', + 'Test2::Require::ExtendedTesting'=> '1.302214', + 'Test2::Require::Fork' => '1.302214', + 'Test2::Require::Module'=> '1.302214', + 'Test2::Require::NonInteractiveTesting'=> '1.302214', + 'Test2::Require::Perl' => '1.302214', + 'Test2::Require::RealFork'=> '1.302214', + 'Test2::Require::ReleaseTesting'=> '1.302214', + 'Test2::Require::Threads'=> '1.302214', + 'Test2::Suite' => '1.302214', + 'Test2::Todo' => '1.302214', + 'Test2::Tools' => '1.302214', + 'Test2::Tools::AsyncSubtest'=> '1.302214', + 'Test2::Tools::Basic' => '1.302214', + 'Test2::Tools::Class' => '1.302214', + 'Test2::Tools::ClassicCompare'=> '1.302214', + 'Test2::Tools::Compare' => '1.302214', + 'Test2::Tools::Defer' => '1.302214', + 'Test2::Tools::Encoding'=> '1.302214', + 'Test2::Tools::Event' => '1.302214', + 'Test2::Tools::Exception'=> '1.302214', + 'Test2::Tools::Exports' => '1.302214', + 'Test2::Tools::GenTemp' => '1.302214', + 'Test2::Tools::Grab' => '1.302214', + 'Test2::Tools::Mock' => '1.302214', + 'Test2::Tools::Ref' => '1.302214', + 'Test2::Tools::Refcount'=> '1.302214', + 'Test2::Tools::Spec' => '1.302214', + 'Test2::Tools::Subtest' => '1.302214', + 'Test2::Tools::Target' => '1.302214', + 'Test2::Tools::Tester' => '1.302214', + 'Test2::Tools::Tiny' => '1.302214', + 'Test2::Tools::Warnings'=> '1.302214', + 'Test2::Util' => '1.302214', + 'Test2::Util::ExternalMeta'=> '1.302214', + 'Test2::Util::Facets2Legacy'=> '1.302214', + 'Test2::Util::Grabber' => '1.302214', + 'Test2::Util::Guard' => '1.302214', + 'Test2::Util::HashBase' => '1.302214', + 'Test2::Util::Importer' => '1.302214', + 'Test2::Util::Ref' => '1.302214', + 'Test2::Util::Sig' => '1.302214', + 'Test2::Util::Stash' => '1.302214', + 'Test2::Util::Sub' => '1.302214', + 'Test2::Util::Table' => '1.302214', + 'Test2::Util::Table::Cell'=> '1.302214', + 'Test2::Util::Table::LineBreak'=> '1.302214', + 'Test2::Util::Term' => '1.302214', + 'Test2::Util::Times' => '1.302214', + 'Test2::Util::Trace' => '1.302214', + 'Test2::V0' => '1.302214', + 'Test2::Workflow' => '1.302214', + 'Test2::Workflow::BlockBase'=> '1.302214', + 'Test2::Workflow::Build'=> '1.302214', + 'Test2::Workflow::Runner'=> '1.302214', + 'Test2::Workflow::Task' => '1.302214', + 'Test2::Workflow::Task::Action'=> '1.302214', + 'Test2::Workflow::Task::Group'=> '1.302214', + 'Test::Builder' => '1.302214', + 'Test::Builder::Formatter'=> '1.302214', + 'Test::Builder::Module' => '1.302214', + 'Test::Builder::Tester' => '1.302214', + 'Test::Builder::Tester::Color'=> '1.302214', + 'Test::Builder::TodoDiag'=> '1.302214', + 'Test::Harness' => '3.52', + 'Test::More' => '1.302214', + 'Test::Simple' => '1.302214', + 'Test::Tester' => '1.302214', + 'Test::Tester::Capture' => '1.302214', + 'Test::Tester::CaptureRunner'=> '1.302214', + 'Test::Tester::Delegate'=> '1.302214', + 'Test::use::ok' => '1.302214', + 'Unicode::UCD' => '0.82', + 'experimental' => '0.036', + 'ok' => '1.302214', + 'stable' => '0.036', + }, + removed => { + } + }, + 5.038005 => { + delta_from => 5.038004, + changed => { + 'B::Op_private' => '5.038005', + 'Config' => '5.038005', + 'Module::CoreList' => '5.20250803_38', + 'Module::CoreList::Utils'=> '5.20250803_38', + }, + removed => { + } + }, + 5.040003 => { + delta_from => 5.040002, + changed => { + 'B::Op_private' => '5.040003', + 'Config' => '5.040003', + 'Module::CoreList' => '5.20250803_40', + 'Module::CoreList::Utils'=> '5.20250803_40', + }, + removed => { + } + }, + 5.043002 => { + delta_from => 5.043001, + changed => { + 'B::Deparse' => '1.86', + 'B::Op_private' => '5.043002', + 'Config' => '5.043002', + 'ExtUtils::Miniperl' => '1.15', + 'ExtUtils::ParseXS' => '3.59', + 'ExtUtils::ParseXS::Constants'=> '3.59', + 'ExtUtils::ParseXS::CountLines'=> '3.59', + 'ExtUtils::ParseXS::Eval'=> '3.59', + 'ExtUtils::ParseXS::Node'=> '3.59', + 'ExtUtils::ParseXS::Utilities'=> '3.59', + 'ExtUtils::Typemaps' => '3.59', + 'ExtUtils::Typemaps::Cmd'=> '3.59', + 'ExtUtils::Typemaps::InputMap'=> '3.59', + 'ExtUtils::Typemaps::OutputMap'=> '3.59', + 'ExtUtils::Typemaps::Type'=> '3.59', + 'File::Copy' => '2.42', + 'File::stat' => '1.15', + 'Filter::Simple' => '0.97', + 'List::Util' => '1.70', + 'List::Util::XS' => '1.70', + 'Module::CoreList' => '5.20250820', + 'Module::CoreList::Utils'=> '5.20250820', + 'POSIX' => '2.24', + 'Scalar::List::Utils' => '1.70', + 'Scalar::Util' => '1.70', + 'Storable' => '3.38', + 'Sub::Util' => '1.70', + 'Text::Balanced' => '2.07', + 'Unicode::UCD' => '0.83', + 'XS::APItest' => '1.44', + 'feature' => '1.99', + 'mro' => '1.30', + 'threads::shared' => '1.71', + }, + removed => { + } + }, + 5.043003 => { + delta_from => 5.043002, + changed => { + 'B' => '1.90', + 'B::Concise' => '1.009', + 'B::Deparse' => '1.87', + 'B::Op_private' => '5.043003', + 'Config' => '5.043003', + 'ExtUtils::ParseXS' => '3.60', + 'ExtUtils::ParseXS::Constants'=> '3.60', + 'ExtUtils::ParseXS::CountLines'=> '3.60', + 'ExtUtils::ParseXS::Eval'=> '3.60', + 'ExtUtils::ParseXS::Node'=> '3.60', + 'ExtUtils::ParseXS::Utilities'=> '3.60', + 'ExtUtils::Typemaps' => '3.60', + 'ExtUtils::Typemaps::Cmd'=> '3.60', + 'ExtUtils::Typemaps::InputMap'=> '3.60', + 'ExtUtils::Typemaps::OutputMap'=> '3.60', + 'ExtUtils::Typemaps::Type'=> '3.60', + 'File::Copy' => '2.43', + 'File::Temp' => '0.2312', + 'Filter::Util::Call' => '1.65', + 'Module::CoreList' => '5.20250923', + 'Module::CoreList::Utils'=> '5.20250923', + 'Net::Ping' => '2.77', + 'Opcode' => '1.70', + 'PerlIO::via' => '0.21', + 'Storable' => '3.39', + 'Term::Table' => '0.025', + 'Term::Table::Cell' => '0.025', + 'Term::Table::CellStack'=> '0.025', + 'Term::Table::HashBase' => '0.025', + 'Term::Table::LineBreak'=> '0.025', + 'Term::Table::Spacer' => '0.025', + 'Term::Table::Util' => '0.025', + 'Time::HiRes' => '1.9779', + 'Time::Piece' => '1.3701', + 'Time::Seconds' => '1.3701', + 'Unicode' => '17.0.0', + 'XS::APItest' => '1.46', + 'overloading' => '0.03', + 'utf8' => '1.29', + }, + removed => { + } + }, + 5.043004 => { + delta_from => 5.043003, + changed => { + 'B::Deparse' => '1.88', + 'B::Op_private' => '5.043004', + 'Config' => '5.043004', + 'Module::CoreList' => '5.20251022', + 'Module::CoreList::Utils'=> '5.20251022', + 'SelectSaver' => '1.03', + 'Time::Piece' => '1.38', + 'Time::Seconds' => '1.38', + 'XS::APItest' => '1.47', + 'attributes' => '0.37', + 'feature' => '2.00', + }, + removed => { + } + }, + 5.043005 => { + delta_from => 5.043004, + changed => { + 'B::Op_private' => '5.043005', + 'Compress::Raw::Bzip2' => '2.214', + 'Compress::Raw::Zlib' => '2.214', + 'Compress::Zlib' => '2.214', + 'Config' => '5.043005', + 'Getopt::Std' => '1.15', + 'IO::Compress' => '2.214', + 'IO::Compress::Adapter::Bzip2'=> '2.214', + 'IO::Compress::Adapter::Deflate'=> '2.214', + 'IO::Compress::Adapter::Identity'=> '2.214', + 'IO::Compress::Base' => '2.214', + 'IO::Compress::Base::Common'=> '2.214', + 'IO::Compress::Bzip2' => '2.214', + 'IO::Compress::Deflate' => '2.214', + 'IO::Compress::Gzip' => '2.214', + 'IO::Compress::Gzip::Constants'=> '2.214', + 'IO::Compress::RawDeflate'=> '2.214', + 'IO::Compress::Zip' => '2.214', + 'IO::Compress::Zip::Constants'=> '2.214', + 'IO::Compress::Zlib::Constants'=> '2.214', + 'IO::Compress::Zlib::Extra'=> '2.214', + 'IO::Uncompress::Adapter::Bunzip2'=> '2.214', + 'IO::Uncompress::Adapter::Identity'=> '2.214', + 'IO::Uncompress::Adapter::Inflate'=> '2.214', + 'IO::Uncompress::AnyInflate'=> '2.214', + 'IO::Uncompress::AnyUncompress'=> '2.214', + 'IO::Uncompress::Base' => '2.214', + 'IO::Uncompress::Bunzip2'=> '2.214', + 'IO::Uncompress::Gunzip'=> '2.214', + 'IO::Uncompress::Inflate'=> '2.214', + 'IO::Uncompress::RawInflate'=> '2.214', + 'IO::Uncompress::Unzip' => '2.214', + 'Module::CoreList' => '5.20251120', + 'Module::CoreList::Utils'=> '5.20251120', + 'Term::Table' => '0.027', + 'Term::Table::Cell' => '0.027', + 'Term::Table::CellStack'=> '0.027', + 'Term::Table::HashBase' => '0.027', + 'Term::Table::LineBreak'=> '0.027', + 'Term::Table::Spacer' => '0.027', + 'Term::Table::Util' => '0.027', + 'Test2' => '1.302216', + 'Test2::API' => '1.302216', + 'Test2::API::Breakage' => '1.302216', + 'Test2::API::Context' => '1.302216', + 'Test2::API::Instance' => '1.302216', + 'Test2::API::InterceptResult'=> '1.302216', + 'Test2::API::InterceptResult::Event'=> '1.302216', + 'Test2::API::InterceptResult::Facet'=> '1.302216', + 'Test2::API::InterceptResult::Hub'=> '1.302216', + 'Test2::API::InterceptResult::Squasher'=> '1.302216', + 'Test2::API::Stack' => '1.302216', + 'Test2::AsyncSubtest' => '1.302216', + 'Test2::AsyncSubtest::Event::Attach'=> '1.302216', + 'Test2::AsyncSubtest::Event::Detach'=> '1.302216', + 'Test2::AsyncSubtest::Formatter'=> '1.302216', + 'Test2::AsyncSubtest::Hub'=> '1.302216', + 'Test2::Bundle' => '1.302216', + 'Test2::Bundle::Extended'=> '1.302216', + 'Test2::Bundle::More' => '1.302216', + 'Test2::Bundle::Simple' => '1.302216', + 'Test2::Compare' => '1.302216', + 'Test2::Compare::Array' => '1.302216', + 'Test2::Compare::Bag' => '1.302216', + 'Test2::Compare::Base' => '1.302216', + 'Test2::Compare::Bool' => '1.302216', + 'Test2::Compare::Custom'=> '1.302216', + 'Test2::Compare::DeepRef'=> '1.302216', + 'Test2::Compare::Delta' => '1.302216', + 'Test2::Compare::Event' => '1.302216', + 'Test2::Compare::EventMeta'=> '1.302216', + 'Test2::Compare::Float' => '1.302216', + 'Test2::Compare::Hash' => '1.302216', + 'Test2::Compare::Isa' => '1.302216', + 'Test2::Compare::Meta' => '1.302216', + 'Test2::Compare::Negatable'=> '1.302216', + 'Test2::Compare::Number'=> '1.302216', + 'Test2::Compare::Object'=> '1.302216', + 'Test2::Compare::OrderedSubset'=> '1.302216', + 'Test2::Compare::Pattern'=> '1.302216', + 'Test2::Compare::Ref' => '1.302216', + 'Test2::Compare::Regex' => '1.302216', + 'Test2::Compare::Scalar'=> '1.302216', + 'Test2::Compare::Set' => '1.302216', + 'Test2::Compare::String'=> '1.302216', + 'Test2::Compare::Undef' => '1.302216', + 'Test2::Compare::Wildcard'=> '1.302216', + 'Test2::Env' => '1.302216', + 'Test2::Event' => '1.302216', + 'Test2::Event::Bail' => '1.302216', + 'Test2::Event::Diag' => '1.302216', + 'Test2::Event::Encoding'=> '1.302216', + 'Test2::Event::Exception'=> '1.302216', + 'Test2::Event::Fail' => '1.302216', + 'Test2::Event::Generic' => '1.302216', + 'Test2::Event::Note' => '1.302216', + 'Test2::Event::Ok' => '1.302216', + 'Test2::Event::Pass' => '1.302216', + 'Test2::Event::Plan' => '1.302216', + 'Test2::Event::Skip' => '1.302216', + 'Test2::Event::Subtest' => '1.302216', + 'Test2::Event::TAP::Version'=> '1.302216', + 'Test2::Event::V2' => '1.302216', + 'Test2::Event::Waiting' => '1.302216', + 'Test2::EventFacet' => '1.302216', + 'Test2::EventFacet::About'=> '1.302216', + 'Test2::EventFacet::Amnesty'=> '1.302216', + 'Test2::EventFacet::Assert'=> '1.302216', + 'Test2::EventFacet::Control'=> '1.302216', + 'Test2::EventFacet::Error'=> '1.302216', + 'Test2::EventFacet::Hub'=> '1.302216', + 'Test2::EventFacet::Info'=> '1.302216', + 'Test2::EventFacet::Info::Table'=> '1.302216', + 'Test2::EventFacet::Meta'=> '1.302216', + 'Test2::EventFacet::Parent'=> '1.302216', + 'Test2::EventFacet::Plan'=> '1.302216', + 'Test2::EventFacet::Render'=> '1.302216', + 'Test2::EventFacet::Trace'=> '1.302216', + 'Test2::Formatter' => '1.302216', + 'Test2::Formatter::TAP' => '1.302216', + 'Test2::Hub' => '1.302216', + 'Test2::Hub::Interceptor'=> '1.302216', + 'Test2::Hub::Interceptor::Terminator'=> '1.302216', + 'Test2::Hub::Subtest' => '1.302216', + 'Test2::IPC' => '1.302216', + 'Test2::IPC::Driver' => '1.302216', + 'Test2::IPC::Driver::Files'=> '1.302216', + 'Test2::Manual' => '1.302216', + 'Test2::Manual::Anatomy'=> '1.302216', + 'Test2::Manual::Anatomy::API'=> '1.302216', + 'Test2::Manual::Anatomy::Context'=> '1.302216', + 'Test2::Manual::Anatomy::EndToEnd'=> '1.302216', + 'Test2::Manual::Anatomy::Event'=> '1.302216', + 'Test2::Manual::Anatomy::Hubs'=> '1.302216', + 'Test2::Manual::Anatomy::IPC'=> '1.302216', + 'Test2::Manual::Anatomy::Utilities'=> '1.302216', + 'Test2::Manual::Concurrency'=> '1.302216', + 'Test2::Manual::Contributing'=> '1.302216', + 'Test2::Manual::Testing'=> '1.302216', + 'Test2::Manual::Testing::Introduction'=> '1.302216', + 'Test2::Manual::Testing::Migrating'=> '1.302216', + 'Test2::Manual::Testing::Planning'=> '1.302216', + 'Test2::Manual::Testing::Todo'=> '1.302216', + 'Test2::Manual::Tooling'=> '1.302216', + 'Test2::Manual::Tooling::FirstTool'=> '1.302216', + 'Test2::Manual::Tooling::Formatter'=> '1.302216', + 'Test2::Manual::Tooling::Nesting'=> '1.302216', + 'Test2::Manual::Tooling::Plugin::TestExit'=> '1.302216', + 'Test2::Manual::Tooling::Plugin::TestingDone'=> '1.302216', + 'Test2::Manual::Tooling::Plugin::ToolCompletes'=> '1.302216', + 'Test2::Manual::Tooling::Plugin::ToolStarts'=> '1.302216', + 'Test2::Manual::Tooling::Subtest'=> '1.302216', + 'Test2::Manual::Tooling::TestBuilder'=> '1.302216', + 'Test2::Manual::Tooling::Testing'=> '1.302216', + 'Test2::Mock' => '1.302216', + 'Test2::Plugin' => '1.302216', + 'Test2::Plugin::BailOnFail'=> '1.302216', + 'Test2::Plugin::DieOnFail'=> '1.302216', + 'Test2::Plugin::ExitSummary'=> '1.302216', + 'Test2::Plugin::SRand' => '1.302216', + 'Test2::Plugin::Times' => '1.302216', + 'Test2::Plugin::UTF8' => '1.302216', + 'Test2::Require' => '1.302216', + 'Test2::Require::AuthorTesting'=> '1.302216', + 'Test2::Require::AutomatedTesting'=> '1.302216', + 'Test2::Require::EnvVar'=> '1.302216', + 'Test2::Require::ExtendedTesting'=> '1.302216', + 'Test2::Require::Fork' => '1.302216', + 'Test2::Require::Module'=> '1.302216', + 'Test2::Require::NonInteractiveTesting'=> '1.302216', + 'Test2::Require::Perl' => '1.302216', + 'Test2::Require::RealFork'=> '1.302216', + 'Test2::Require::ReleaseTesting'=> '1.302216', + 'Test2::Require::Threads'=> '1.302216', + 'Test2::Suite' => '1.302216', + 'Test2::Todo' => '1.302216', + 'Test2::Tools' => '1.302216', + 'Test2::Tools::AsyncSubtest'=> '1.302216', + 'Test2::Tools::Basic' => '1.302216', + 'Test2::Tools::Class' => '1.302216', + 'Test2::Tools::ClassicCompare'=> '1.302216', + 'Test2::Tools::Compare' => '1.302216', + 'Test2::Tools::Defer' => '1.302216', + 'Test2::Tools::Encoding'=> '1.302216', + 'Test2::Tools::Event' => '1.302216', + 'Test2::Tools::Exception'=> '1.302216', + 'Test2::Tools::Exports' => '1.302216', + 'Test2::Tools::GenTemp' => '1.302216', + 'Test2::Tools::Grab' => '1.302216', + 'Test2::Tools::Mock' => '1.302216', + 'Test2::Tools::Ref' => '1.302216', + 'Test2::Tools::Refcount'=> '1.302216', + 'Test2::Tools::Spec' => '1.302216', + 'Test2::Tools::Subtest' => '1.302216', + 'Test2::Tools::Target' => '1.302216', + 'Test2::Tools::Tester' => '1.302216', + 'Test2::Tools::Tiny' => '1.302216', + 'Test2::Tools::Warnings'=> '1.302216', + 'Test2::Util' => '1.302216', + 'Test2::Util::ExternalMeta'=> '1.302216', + 'Test2::Util::Facets2Legacy'=> '1.302216', + 'Test2::Util::Grabber' => '1.302216', + 'Test2::Util::Guard' => '1.302216', + 'Test2::Util::HashBase' => '1.302216', + 'Test2::Util::Importer' => '1.302216', + 'Test2::Util::Ref' => '1.302216', + 'Test2::Util::Sig' => '1.302216', + 'Test2::Util::Stash' => '1.302216', + 'Test2::Util::Sub' => '1.302216', + 'Test2::Util::Table' => '1.302216', + 'Test2::Util::Table::Cell'=> '1.302216', + 'Test2::Util::Table::LineBreak'=> '1.302216', + 'Test2::Util::Term' => '1.302216', + 'Test2::Util::Times' => '1.302216', + 'Test2::Util::Trace' => '1.302216', + 'Test2::V0' => '1.302216', + 'Test2::Workflow' => '1.302216', + 'Test2::Workflow::BlockBase'=> '1.302216', + 'Test2::Workflow::Build'=> '1.302216', + 'Test2::Workflow::Runner'=> '1.302216', + 'Test2::Workflow::Task' => '1.302216', + 'Test2::Workflow::Task::Action'=> '1.302216', + 'Test2::Workflow::Task::Group'=> '1.302216', + 'Test::Builder' => '1.302216', + 'Test::Builder::Formatter'=> '1.302216', + 'Test::Builder::Module' => '1.302216', + 'Test::Builder::Tester' => '1.302216', + 'Test::Builder::Tester::Color'=> '1.302216', + 'Test::Builder::TodoDiag'=> '1.302216', + 'Test::More' => '1.302216', + 'Test::Simple' => '1.302216', + 'Test::Tester' => '1.302216', + 'Test::Tester::Capture' => '1.302216', + 'Test::Tester::CaptureRunner'=> '1.302216', + 'Test::Tester::Delegate'=> '1.302216', + 'Test::use::ok' => '1.302216', + 'Time::Piece' => '1.41', + 'Time::Seconds' => '1.41', + 'ok' => '1.302216', + 'warnings' => '1.75', + }, + removed => { + } + }, + 5.043006 => { + delta_from => 5.043005, + changed => { + 'B::Op_private' => '5.043006', + 'Config' => '5.043006', + 'ExtUtils::ParseXS' => '3.61', + 'ExtUtils::ParseXS::Constants'=> '3.61', + 'ExtUtils::ParseXS::CountLines'=> '3.61', + 'ExtUtils::ParseXS::Eval'=> '3.61', + 'ExtUtils::ParseXS::Node'=> '3.61', + 'ExtUtils::ParseXS::Utilities'=> '3.61', + 'ExtUtils::Typemaps' => '3.61', + 'ExtUtils::Typemaps::Cmd'=> '3.61', + 'ExtUtils::Typemaps::InputMap'=> '3.61', + 'ExtUtils::Typemaps::OutputMap'=> '3.61', + 'ExtUtils::Typemaps::Type'=> '3.61', + 'Module::CoreList' => '5.20251220', + 'Module::CoreList::Utils'=> '5.20251220', + 'Term::Table' => '0.028', + 'Term::Table::Cell' => '0.028', + 'Term::Table::CellStack'=> '0.028', + 'Term::Table::HashBase' => '0.028', + 'Term::Table::LineBreak'=> '0.028', + 'Term::Table::Spacer' => '0.028', + 'Term::Table::Util' => '0.028', + 'Test2' => '1.302219', + 'Test2::API' => '1.302219', + 'Test2::API::Breakage' => '1.302219', + 'Test2::API::Context' => '1.302219', + 'Test2::API::Instance' => '1.302219', + 'Test2::API::InterceptResult'=> '1.302219', + 'Test2::API::InterceptResult::Event'=> '1.302219', + 'Test2::API::InterceptResult::Facet'=> '1.302219', + 'Test2::API::InterceptResult::Hub'=> '1.302219', + 'Test2::API::InterceptResult::Squasher'=> '1.302219', + 'Test2::API::Stack' => '1.302219', + 'Test2::AsyncSubtest' => '1.302219', + 'Test2::AsyncSubtest::Event::Attach'=> '1.302219', + 'Test2::AsyncSubtest::Event::Detach'=> '1.302219', + 'Test2::AsyncSubtest::Formatter'=> '1.302219', + 'Test2::AsyncSubtest::Hub'=> '1.302219', + 'Test2::Bundle' => '1.302219', + 'Test2::Bundle::Extended'=> '1.302219', + 'Test2::Bundle::More' => '1.302219', + 'Test2::Bundle::Simple' => '1.302219', + 'Test2::Compare' => '1.302219', + 'Test2::Compare::Array' => '1.302219', + 'Test2::Compare::Bag' => '1.302219', + 'Test2::Compare::Base' => '1.302219', + 'Test2::Compare::Bool' => '1.302219', + 'Test2::Compare::Custom'=> '1.302219', + 'Test2::Compare::DeepRef'=> '1.302219', + 'Test2::Compare::Delta' => '1.302219', + 'Test2::Compare::Event' => '1.302219', + 'Test2::Compare::EventMeta'=> '1.302219', + 'Test2::Compare::Float' => '1.302219', + 'Test2::Compare::Hash' => '1.302219', + 'Test2::Compare::Isa' => '1.302219', + 'Test2::Compare::Meta' => '1.302219', + 'Test2::Compare::Negatable'=> '1.302219', + 'Test2::Compare::Number'=> '1.302219', + 'Test2::Compare::Object'=> '1.302219', + 'Test2::Compare::OrderedSubset'=> '1.302219', + 'Test2::Compare::Pattern'=> '1.302219', + 'Test2::Compare::Ref' => '1.302219', + 'Test2::Compare::Regex' => '1.302219', + 'Test2::Compare::Scalar'=> '1.302219', + 'Test2::Compare::Set' => '1.302219', + 'Test2::Compare::String'=> '1.302219', + 'Test2::Compare::Undef' => '1.302219', + 'Test2::Compare::Wildcard'=> '1.302219', + 'Test2::Env' => '1.302219', + 'Test2::Event' => '1.302219', + 'Test2::Event::Bail' => '1.302219', + 'Test2::Event::Diag' => '1.302219', + 'Test2::Event::Encoding'=> '1.302219', + 'Test2::Event::Exception'=> '1.302219', + 'Test2::Event::Fail' => '1.302219', + 'Test2::Event::Generic' => '1.302219', + 'Test2::Event::Note' => '1.302219', + 'Test2::Event::Ok' => '1.302219', + 'Test2::Event::Pass' => '1.302219', + 'Test2::Event::Plan' => '1.302219', + 'Test2::Event::Skip' => '1.302219', + 'Test2::Event::Subtest' => '1.302219', + 'Test2::Event::TAP::Version'=> '1.302219', + 'Test2::Event::V2' => '1.302219', + 'Test2::Event::Waiting' => '1.302219', + 'Test2::EventFacet' => '1.302219', + 'Test2::EventFacet::About'=> '1.302219', + 'Test2::EventFacet::Amnesty'=> '1.302219', + 'Test2::EventFacet::Assert'=> '1.302219', + 'Test2::EventFacet::Control'=> '1.302219', + 'Test2::EventFacet::Error'=> '1.302219', + 'Test2::EventFacet::Hub'=> '1.302219', + 'Test2::EventFacet::Info'=> '1.302219', + 'Test2::EventFacet::Info::Table'=> '1.302219', + 'Test2::EventFacet::Meta'=> '1.302219', + 'Test2::EventFacet::Parent'=> '1.302219', + 'Test2::EventFacet::Plan'=> '1.302219', + 'Test2::EventFacet::Render'=> '1.302219', + 'Test2::EventFacet::Trace'=> '1.302219', + 'Test2::Formatter' => '1.302219', + 'Test2::Formatter::TAP' => '1.302219', + 'Test2::Handle' => '1.302219', + 'Test2::Hub' => '1.302219', + 'Test2::Hub::Interceptor'=> '1.302219', + 'Test2::Hub::Interceptor::Terminator'=> '1.302219', + 'Test2::Hub::Subtest' => '1.302219', + 'Test2::IPC' => '1.302219', + 'Test2::IPC::Driver' => '1.302219', + 'Test2::IPC::Driver::Files'=> '1.302219', + 'Test2::Manual' => '1.302219', + 'Test2::Manual::Anatomy'=> '1.302219', + 'Test2::Manual::Anatomy::API'=> '1.302219', + 'Test2::Manual::Anatomy::Context'=> '1.302219', + 'Test2::Manual::Anatomy::EndToEnd'=> '1.302219', + 'Test2::Manual::Anatomy::Event'=> '1.302219', + 'Test2::Manual::Anatomy::Hubs'=> '1.302219', + 'Test2::Manual::Anatomy::IPC'=> '1.302219', + 'Test2::Manual::Anatomy::Utilities'=> '1.302219', + 'Test2::Manual::Concurrency'=> '1.302219', + 'Test2::Manual::Contributing'=> '1.302219', + 'Test2::Manual::Testing'=> '1.302219', + 'Test2::Manual::Testing::Introduction'=> '1.302219', + 'Test2::Manual::Testing::Migrating'=> '1.302219', + 'Test2::Manual::Testing::Planning'=> '1.302219', + 'Test2::Manual::Testing::Todo'=> '1.302219', + 'Test2::Manual::Tooling'=> '1.302219', + 'Test2::Manual::Tooling::FirstTool'=> '1.302219', + 'Test2::Manual::Tooling::Formatter'=> '1.302219', + 'Test2::Manual::Tooling::Nesting'=> '1.302219', + 'Test2::Manual::Tooling::Plugin::TestExit'=> '1.302219', + 'Test2::Manual::Tooling::Plugin::TestingDone'=> '1.302219', + 'Test2::Manual::Tooling::Plugin::ToolCompletes'=> '1.302219', + 'Test2::Manual::Tooling::Plugin::ToolStarts'=> '1.302219', + 'Test2::Manual::Tooling::Subtest'=> '1.302219', + 'Test2::Manual::Tooling::TestBuilder'=> '1.302219', + 'Test2::Manual::Tooling::Testing'=> '1.302219', + 'Test2::Mock' => '1.302219', + 'Test2::Plugin' => '1.302219', + 'Test2::Plugin::BailOnFail'=> '1.302219', + 'Test2::Plugin::DieOnFail'=> '1.302219', + 'Test2::Plugin::ExitSummary'=> '1.302219', + 'Test2::Plugin::SRand' => '1.302219', + 'Test2::Plugin::Times' => '1.302219', + 'Test2::Plugin::UTF8' => '1.302219', + 'Test2::Require' => '1.302219', + 'Test2::Require::AuthorTesting'=> '1.302219', + 'Test2::Require::AutomatedTesting'=> '1.302219', + 'Test2::Require::EnvVar'=> '1.302219', + 'Test2::Require::ExtendedTesting'=> '1.302219', + 'Test2::Require::Fork' => '1.302219', + 'Test2::Require::Module'=> '1.302219', + 'Test2::Require::NonInteractiveTesting'=> '1.302219', + 'Test2::Require::Perl' => '1.302219', + 'Test2::Require::RealFork'=> '1.302219', + 'Test2::Require::ReleaseTesting'=> '1.302219', + 'Test2::Require::Threads'=> '1.302219', + 'Test2::Suite' => '1.302219', + 'Test2::Todo' => '1.302219', + 'Test2::Tools' => '1.302219', + 'Test2::Tools::AsyncSubtest'=> '1.302219', + 'Test2::Tools::Basic' => '1.302219', + 'Test2::Tools::Class' => '1.302219', + 'Test2::Tools::ClassicCompare'=> '1.302219', + 'Test2::Tools::Compare' => '1.302219', + 'Test2::Tools::Defer' => '1.302219', + 'Test2::Tools::Encoding'=> '1.302219', + 'Test2::Tools::Event' => '1.302219', + 'Test2::Tools::Exception'=> '1.302219', + 'Test2::Tools::Exports' => '1.302219', + 'Test2::Tools::GenTemp' => '1.302219', + 'Test2::Tools::Grab' => '1.302219', + 'Test2::Tools::Mock' => '1.302219', + 'Test2::Tools::Ref' => '1.302219', + 'Test2::Tools::Refcount'=> '1.302219', + 'Test2::Tools::Spec' => '1.302219', + 'Test2::Tools::Subtest' => '1.302219', + 'Test2::Tools::Target' => '1.302219', + 'Test2::Tools::Tester' => '1.302219', + 'Test2::Tools::Tiny' => '1.302219', + 'Test2::Tools::Warnings'=> '1.302219', + 'Test2::Util' => '1.302219', + 'Test2::Util::ExternalMeta'=> '1.302219', + 'Test2::Util::Facets2Legacy'=> '1.302219', + 'Test2::Util::Grabber' => '1.302219', + 'Test2::Util::Guard' => '1.302219', + 'Test2::Util::HashBase' => '1.302219', + 'Test2::Util::Importer' => '1.302219', + 'Test2::Util::Ref' => '1.302219', + 'Test2::Util::Sig' => '1.302219', + 'Test2::Util::Stash' => '1.302219', + 'Test2::Util::Sub' => '1.302219', + 'Test2::Util::Table' => '1.302219', + 'Test2::Util::Table::Cell'=> '1.302219', + 'Test2::Util::Table::LineBreak'=> '1.302219', + 'Test2::Util::Term' => '1.302219', + 'Test2::Util::Times' => '1.302219', + 'Test2::Util::Trace' => '1.302219', + 'Test2::V0' => '1.302219', + 'Test2::V1' => '1.302219', + 'Test2::V1::Base' => '1.302219', + 'Test2::V1::Handle' => '1.302219', + 'Test2::Workflow' => '1.302219', + 'Test2::Workflow::BlockBase'=> '1.302219', + 'Test2::Workflow::Build'=> '1.302219', + 'Test2::Workflow::Runner'=> '1.302219', + 'Test2::Workflow::Task' => '1.302219', + 'Test2::Workflow::Task::Action'=> '1.302219', + 'Test2::Workflow::Task::Group'=> '1.302219', + 'Test::Builder' => '1.302219', + 'Test::Builder::Formatter'=> '1.302219', + 'Test::Builder::Module' => '1.302219', + 'Test::Builder::Tester' => '1.302219', + 'Test::Builder::Tester::Color'=> '1.302219', + 'Test::Builder::TodoDiag'=> '1.302219', + 'Test::More' => '1.302219', + 'Test::Simple' => '1.302219', + 'Test::Tester' => '1.302219', + 'Test::Tester::Capture' => '1.302219', + 'Test::Tester::CaptureRunner'=> '1.302219', + 'Test::Tester::Delegate'=> '1.302219', + 'Test::use::ok' => '1.302219', + 'XS::APItest' => '1.48', + '_charnames' => '1.51', + 'charnames' => '1.51', + 'ok' => '1.302219', + 'warnings' => '1.76', + }, + removed => { + } + }, + 5.043007 => { + delta_from => 5.043006, + changed => { + 'B' => '1.91', + 'B::Concise' => '1.010', + 'B::Op_private' => '5.043007', + 'Config' => '5.043007', + 'ExtUtils::ParseXS' => '3.62', + 'ExtUtils::ParseXS::Constants'=> '3.62', + 'ExtUtils::ParseXS::CountLines'=> '3.62', + 'ExtUtils::ParseXS::Eval'=> '3.62', + 'ExtUtils::ParseXS::Node'=> '3.62', + 'ExtUtils::ParseXS::Utilities'=> '3.62', + 'ExtUtils::Typemaps' => '3.62', + 'ExtUtils::Typemaps::Cmd'=> '3.62', + 'ExtUtils::Typemaps::InputMap'=> '3.62', + 'ExtUtils::Typemaps::OutputMap'=> '3.62', + 'ExtUtils::Typemaps::Type'=> '3.62', + 'HTTP::Tiny' => '0.092', + 'Module::CoreList' => '5.20260119', + 'Module::CoreList::Utils'=> '5.20260119', + 'POSIX' => '2.25', + 'Pod::Html' => '1.36', + 'Pod::Html::Util' => '1.36', + }, + removed => { + } + }, + 5.043008 => { + delta_from => 5.043007, + changed => { + 'B::Concise' => '1.011', + 'B::Deparse' => '1.89', + 'B::Op_private' => '5.043008', + 'CPAN::Meta' => '2.150012', + 'CPAN::Meta::Converter' => '2.150012', + 'CPAN::Meta::Feature' => '2.150012', + 'CPAN::Meta::History' => '2.150012', + 'CPAN::Meta::Merge' => '2.150012', + 'CPAN::Meta::Prereqs' => '2.150012', + 'CPAN::Meta::Spec' => '2.150012', + 'CPAN::Meta::Validator' => '2.150012', + 'Compress::Raw::Bzip2' => '2.217', + 'Compress::Raw::Zlib' => '2.218', + 'Compress::Zlib' => '2.217', + 'Config' => '5.043008', + 'Config::Perl::V' => '0.39', + 'DB_File' => '1.860', + 'English' => '1.12', + 'ExtUtils::ParseXS' => '3.63', + 'ExtUtils::ParseXS::Constants'=> '3.63', + 'ExtUtils::ParseXS::CountLines'=> '3.63', + 'ExtUtils::ParseXS::Eval'=> '3.63', + 'ExtUtils::ParseXS::Node'=> '3.63', + 'ExtUtils::ParseXS::Utilities'=> '3.63', + 'ExtUtils::Typemaps' => '3.63', + 'ExtUtils::Typemaps::Cmd'=> '3.63', + 'ExtUtils::Typemaps::InputMap'=> '3.63', + 'ExtUtils::Typemaps::OutputMap'=> '3.63', + 'ExtUtils::Typemaps::Type'=> '3.63', + 'IO::Compress' => '2.217', + 'IO::Compress::Adapter::Bzip2'=> '2.217', + 'IO::Compress::Adapter::Deflate'=> '2.217', + 'IO::Compress::Adapter::Identity'=> '2.217', + 'IO::Compress::Base' => '2.217', + 'IO::Compress::Base::Common'=> '2.217', + 'IO::Compress::Bzip2' => '2.217', + 'IO::Compress::Deflate' => '2.217', + 'IO::Compress::Gzip' => '2.217', + 'IO::Compress::Gzip::Constants'=> '2.217', + 'IO::Compress::RawDeflate'=> '2.217', + 'IO::Compress::Zip' => '2.217', + 'IO::Compress::Zip::Constants'=> '2.217', + 'IO::Compress::Zlib::Constants'=> '2.217', + 'IO::Compress::Zlib::Extra'=> '2.217', + 'IO::Uncompress::Adapter::Bunzip2'=> '2.217', + 'IO::Uncompress::Adapter::Identity'=> '2.217', + 'IO::Uncompress::Adapter::Inflate'=> '2.217', + 'IO::Uncompress::AnyInflate'=> '2.217', + 'IO::Uncompress::AnyUncompress'=> '2.217', + 'IO::Uncompress::Base' => '2.217', + 'IO::Uncompress::Bunzip2'=> '2.217', + 'IO::Uncompress::Gunzip'=> '2.217', + 'IO::Uncompress::Inflate'=> '2.217', + 'IO::Uncompress::RawInflate'=> '2.217', + 'IO::Uncompress::Unzip' => '2.217', + 'Module::CoreList' => '5.20260220', + 'Module::CoreList::Utils'=> '5.20260220', + 'Parse::CPAN::Meta' => '2.150012', + 'Time::HiRes' => '1.9780', + 'XS::APItest' => '1.49', + 'XS::Typemap' => '0.21', + 'feature' => '2.01', + 'threads' => '2.44', + 'threads::shared' => '1.72', + 'warnings' => '1.77', + }, + removed => { + } + }, + 5.042001 => { + delta_from => 5.042000, + changed => { + 'B::Op_private' => '5.042001', + 'Config' => '5.042001', + 'Module::CoreList' => '5.20260308', + 'Module::CoreList::Utils'=> '5.20260308', + 'POSIX' => '2.23_01', + }, + removed => { + } + }, + 5.043009 => { + delta_from => 5.043008, + changed => { + 'B' => '1.92', + 'B::Op_private' => '5.043009', + 'CPAN::Meta' => '2.150013', + 'CPAN::Meta::Converter' => '2.150013', + 'CPAN::Meta::Feature' => '2.150013', + 'CPAN::Meta::History' => '2.150013', + 'CPAN::Meta::Merge' => '2.150013', + 'CPAN::Meta::Prereqs' => '2.150013', + 'CPAN::Meta::Requirements'=> '2.145', + 'CPAN::Meta::Requirements::Range'=> '2.145', + 'CPAN::Meta::Spec' => '2.150013', + 'CPAN::Meta::Validator' => '2.150013', + 'Compress::Raw::Bzip2' => '2.218', + 'Compress::Raw::Zlib' => '2.222', + 'Compress::Zlib' => '2.219', + 'Config' => '5.043009', + 'Cwd' => '3.95', + 'ExtUtils::CBuilder' => '0.280243', + 'ExtUtils::CBuilder::Base'=> '0.280243', + 'ExtUtils::CBuilder::Platform::Unix'=> '0.280243', + 'ExtUtils::CBuilder::Platform::VMS'=> '0.280243', + 'ExtUtils::CBuilder::Platform::Windows'=> '0.280243', + 'ExtUtils::CBuilder::Platform::Windows::BCC'=> '0.280243', + 'ExtUtils::CBuilder::Platform::Windows::GCC'=> '0.280243', + 'ExtUtils::CBuilder::Platform::Windows::MSVC'=> '0.280243', + 'ExtUtils::CBuilder::Platform::aix'=> '0.280243', + 'ExtUtils::CBuilder::Platform::android'=> '0.280243', + 'ExtUtils::CBuilder::Platform::cygwin'=> '0.280243', + 'ExtUtils::CBuilder::Platform::darwin'=> '0.280243', + 'ExtUtils::CBuilder::Platform::dec_osf'=> '0.280243', + 'ExtUtils::CBuilder::Platform::os2'=> '0.280243', + 'ExtUtils::Command' => '7.78', + 'ExtUtils::Command::MM' => '7.78', + 'ExtUtils::Liblist' => '7.78', + 'ExtUtils::Liblist::Kid'=> '7.78', + 'ExtUtils::MM' => '7.78', + 'ExtUtils::MM_AIX' => '7.78', + 'ExtUtils::MM_Any' => '7.78', + 'ExtUtils::MM_BeOS' => '7.78', + 'ExtUtils::MM_Cygwin' => '7.78', + 'ExtUtils::MM_DOS' => '7.78', + 'ExtUtils::MM_Darwin' => '7.78', + 'ExtUtils::MM_MacOS' => '7.78', + 'ExtUtils::MM_NW5' => '7.78', + 'ExtUtils::MM_OS2' => '7.78', + 'ExtUtils::MM_OS390' => '7.78', + 'ExtUtils::MM_QNX' => '7.78', + 'ExtUtils::MM_UWIN' => '7.78', + 'ExtUtils::MM_Unix' => '7.78', + 'ExtUtils::MM_VMS' => '7.78', + 'ExtUtils::MM_VOS' => '7.78', + 'ExtUtils::MM_Win32' => '7.78', + 'ExtUtils::MM_Win95' => '7.78', + 'ExtUtils::MY' => '7.78', + 'ExtUtils::MakeMaker' => '7.78', + 'ExtUtils::MakeMaker::Config'=> '7.78', + 'ExtUtils::MakeMaker::Locale'=> '7.78', + 'ExtUtils::MakeMaker::version'=> '7.78', + 'ExtUtils::MakeMaker::version::regex'=> '7.78', + 'ExtUtils::Mkbootstrap' => '7.78', + 'ExtUtils::Mksymlists' => '7.78', + 'ExtUtils::testlib' => '7.78', + 'File::Glob' => '1.43', + 'File::Spec' => '3.95', + 'File::Spec::AmigaOS' => '3.95', + 'File::Spec::Cygwin' => '3.95', + 'File::Spec::Epoc' => '3.95', + 'File::Spec::Functions' => '3.95', + 'File::Spec::Mac' => '3.95', + 'File::Spec::OS2' => '3.95', + 'File::Spec::Unix' => '3.95', + 'File::Spec::VMS' => '3.95', + 'File::Spec::Win32' => '3.95', + 'IO' => '1.56', + 'IO::Compress' => '2.219', + 'IO::Compress::Adapter::Bzip2'=> '2.219', + 'IO::Compress::Adapter::Deflate'=> '2.219', + 'IO::Compress::Adapter::Identity'=> '2.219', + 'IO::Compress::Base' => '2.219', + 'IO::Compress::Base::Common'=> '2.219', + 'IO::Compress::Bzip2' => '2.219', + 'IO::Compress::Deflate' => '2.219', + 'IO::Compress::Gzip' => '2.219', + 'IO::Compress::Gzip::Constants'=> '2.219', + 'IO::Compress::RawDeflate'=> '2.219', + 'IO::Compress::Zip' => '2.219', + 'IO::Compress::Zip::Constants'=> '2.219', + 'IO::Compress::Zlib::Constants'=> '2.219', + 'IO::Compress::Zlib::Extra'=> '2.219', + 'IO::Dir' => '1.56', + 'IO::File' => '1.56', + 'IO::Handle' => '1.56', + 'IO::Pipe' => '1.56', + 'IO::Seekable' => '1.56', + 'IO::Select' => '1.56', + 'IO::Socket' => '1.56', + 'IO::Socket::INET' => '1.56', + 'IO::Socket::UNIX' => '1.56', + 'IO::Uncompress::Adapter::Bunzip2'=> '2.219', + 'IO::Uncompress::Adapter::Identity'=> '2.219', + 'IO::Uncompress::Adapter::Inflate'=> '2.219', + 'IO::Uncompress::AnyInflate'=> '2.219', + 'IO::Uncompress::AnyUncompress'=> '2.219', + 'IO::Uncompress::Base' => '2.219', + 'IO::Uncompress::Bunzip2'=> '2.219', + 'IO::Uncompress::Gunzip'=> '2.219', + 'IO::Uncompress::Inflate'=> '2.219', + 'IO::Uncompress::RawInflate'=> '2.219', + 'IO::Uncompress::Unzip' => '2.219', + 'Module::CoreList' => '5.20260320', + 'Module::CoreList::Utils'=> '5.20260320', + 'Opcode' => '1.71', + 'POSIX' => '2.26', + 'Parse::CPAN::Meta' => '2.150013', + 'Storable' => '3.40', + 'XS::APItest' => '1.50', + 'feature' => '2.02', + 'threads' => '2.45', + 'threads::shared' => '1.73', + 'warnings' => '1.78', + }, + removed => { + } + }, + 5.042002 => { + delta_from => 5.042001, + changed => { + 'B::Op_private' => '5.042002', + 'Compress::Raw::Zlib' => '2.222', + 'Config' => '5.042002', + 'Module::CoreList' => '5.20260329_42', + 'Module::CoreList::Utils'=> '5.20260329_42', + }, + removed => { + } + }, ); sub is_core @@ -25089,6 +26277,104 @@ sub is_core }, 5.042000 => { delta_from => 5.041013, + changed => { + }, + removed => { + } + }, + 5.043000 => { + delta_from => 5.042, + changed => { + }, + removed => { + } + }, + 5.043001 => { + delta_from => 5.043000, + changed => { + }, + removed => { + } + }, + 5.038005 => { + delta_from => 5.038004, + changed => { + }, + removed => { + } + }, + 5.040003 => { + delta_from => 5.040002, + changed => { + }, + removed => { + } + }, + 5.043002 => { + delta_from => 5.043001, + changed => { + }, + removed => { + } + }, + 5.043003 => { + delta_from => 5.043002, + changed => { + }, + removed => { + } + }, + 5.043004 => { + delta_from => 5.043003, + changed => { + }, + removed => { + } + }, + 5.043005 => { + delta_from => 5.043004, + changed => { + }, + removed => { + } + }, + 5.043006 => { + delta_from => 5.043005, + changed => { + }, + removed => { + } + }, + 5.043007 => { + delta_from => 5.043006, + changed => { + }, + removed => { + } + }, + 5.043008 => { + delta_from => 5.043007, + changed => { + }, + removed => { + } + }, + 5.042001 => { + delta_from => 5.042, + changed => { + }, + removed => { + } + }, + 5.043009 => { + delta_from => 5.043008, + changed => { + }, + removed => { + } + }, + 5.042002 => { + delta_from => 5.042001, changed => { }, removed => { Index: gnu/usr.bin/perl/dist/Module-CoreList/lib/Module/CoreList/Utils.pm =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/dist/Module-CoreList/lib/Module/CoreList/Utils.pm,v diff -u -p -a -u -p -r1.17 Utils.pm --- gnu/usr.bin/perl/dist/Module-CoreList/lib/Module/CoreList/Utils.pm 26 Dec 2025 22:14:19 -0000 1.17 +++ gnu/usr.bin/perl/dist/Module-CoreList/lib/Module/CoreList/Utils.pm 29 Mar 2026 16:31:44 -0000 @@ -4,7 +4,7 @@ use strict; use warnings; use Module::CoreList; -our $VERSION = '5.20250702'; +our $VERSION = '5.20260329_42'; our %utilities; sub utilities { @@ -2149,6 +2149,104 @@ my %delta = ( }, 5.042000 => { delta_from => 5.041013, + changed => { + }, + removed => { + } + }, + 5.043000 => { + delta_from => 5.042000, + changed => { + }, + removed => { + } + }, + 5.043001 => { + delta_from => 5.043, + changed => { + }, + removed => { + } + }, + 5.038005 => { + delta_from => 5.038004, + changed => { + }, + removed => { + } + }, + 5.040003 => { + delta_from => 5.040002, + changed => { + }, + removed => { + } + }, + 5.043002 => { + delta_from => 5.043001, + changed => { + }, + removed => { + } + }, + 5.043003 => { + delta_from => 5.043002, + changed => { + }, + removed => { + } + }, + 5.043004 => { + delta_from => 5.043003, + changed => { + }, + removed => { + } + }, + 5.043005 => { + delta_from => 5.043004, + changed => { + }, + removed => { + } + }, + 5.043006 => { + delta_from => 5.043005, + changed => { + }, + removed => { + } + }, + 5.043007 => { + delta_from => 5.043006, + changed => { + }, + removed => { + } + }, + 5.043008 => { + delta_from => 5.043007, + changed => { + }, + removed => { + } + }, + 5.042001 => { + delta_from => 5.042000, + changed => { + }, + removed => { + } + }, + 5.043009 => { + delta_from => 5.043008, + changed => { + }, + removed => { + } + }, + 5.042002 => { + delta_from => 5.042001, changed => { }, removed => { Index: gnu/usr.bin/perl/ext/POSIX/POSIX.xs =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/ext/POSIX/POSIX.xs,v diff -u -p -a -u -p -r1.31 POSIX.xs --- gnu/usr.bin/perl/ext/POSIX/POSIX.xs 26 Dec 2025 22:14:20 -0000 1.31 +++ gnu/usr.bin/perl/ext/POSIX/POSIX.xs 29 Mar 2026 16:31:44 -0000 @@ -3588,7 +3588,7 @@ difftime(time1, time2) # sv_setpv(TARG, ...) could be used rather than # ST(0) = sv_2mortal(newSVpv(...)) void -strftime(fmt, sec, min, hour, mday, mon, year, wday = -1, yday = -1, isdst = 0) +strftime(fmt, sec, min, hour, mday, mon, year, wday = -1, yday = -1, isdst = -1) SV * fmt int sec int min @@ -3604,10 +3604,8 @@ strftime(fmt, sec, min, hour, mday, mon, PERL_UNUSED_ARG(wday); PERL_UNUSED_ARG(yday); - /* -isdst triggers backwards compatibility mode for non-zero - * 'isdst' */ SV *sv = sv_strftime_ints(fmt, sec, min, hour, mday, mon, year, - -abs(isdst)); + isdst); if (sv) { sv = sv_2mortal(sv); } Index: gnu/usr.bin/perl/ext/POSIX/lib/POSIX.pm =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/ext/POSIX/lib/POSIX.pm,v diff -u -p -a -u -p -r1.10 POSIX.pm --- gnu/usr.bin/perl/ext/POSIX/lib/POSIX.pm 26 Dec 2025 22:14:20 -0000 1.10 +++ gnu/usr.bin/perl/ext/POSIX/lib/POSIX.pm 29 Mar 2026 16:31:44 -0000 @@ -4,7 +4,7 @@ use warnings; our ($AUTOLOAD, %SIGRT); -our $VERSION = '2.23'; +our $VERSION = '2.23_01'; require XSLoader; Index: gnu/usr.bin/perl/ext/POSIX/lib/POSIX.pod =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/ext/POSIX/lib/POSIX.pod,v diff -u -p -a -u -p -r1.14 POSIX.pod --- gnu/usr.bin/perl/ext/POSIX/lib/POSIX.pod 26 Dec 2025 22:14:20 -0000 1.14 +++ gnu/usr.bin/perl/ext/POSIX/lib/POSIX.pod 29 Mar 2026 16:31:44 -0000 @@ -1866,49 +1866,17 @@ Identical to the string form of C<$!>, s =item C Convert date and time information to string based on the current -underlying locale of the program (except for any daylight savings time). -Returns the string. +underlying locale of the program. +Returns the string in a mortalized SV; set to an empty string on error. -Synopsis: - - strftime(fmt, sec, min, hour, mday, mon, year, - wday = -1, yday = -1, isdst = 0) - -The month (C) begins at zero, -I, January is 0, not 1. The -year (C) is given in years since 1900, I, the year 1995 is 95; the -year 2001 is 101. Consult your system's C manpage for details -about these and the other arguments. + my $sv = strftime(fmt, sec, min, hour, mday, mon, year, + wday = -1, yday = -1, isdst = -1) The C and C parameters are both ignored. Their values are always determinable from the other parameters. -C should be C<1> or C<0>, depending on whether or not daylight -savings time is in effect for the given time or not. - -If you want your code to be portable, your format (C) argument -should use only the conversion specifiers defined by the ANSI C -standard (C99, to play safe). These are C. -But even then, the B of some of the conversion specifiers are -non-portable. For example, the specifiers C change according -to the locale settings of the user, and both how to set locales (the -locale names) and what output to expect are non-standard. -The specifier C changes according to the timezone settings of the -user and the timezone computation rules of the operating system. -The C specifier is notoriously unportable since the names of -timezones are non-standard. Sticking to the numeric specifiers is the -safest route. - -The arguments, except for C, are made consistent as though by -calling C before calling your system's C function. -To get correct results, you must set C to be the proper value. -When omitted, the function assumes daylight savings is not in effect. - -The string for Tuesday, December 12, 1995 in the C locale. - - $str = POSIX::strftime( "%A, %B %d, %Y", - 0, 0, 0, 12, 11, 95, 2 ); - print "$str\n"; +More details on the behavior and the specification of the other +parameters are described in L. =item C Index: gnu/usr.bin/perl/ext/POSIX/t/posix.t =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/ext/POSIX/t/posix.t,v diff -u -p -a -u -p -r1.13 posix.t --- gnu/usr.bin/perl/ext/POSIX/t/posix.t 26 Dec 2025 22:14:20 -0000 1.13 +++ gnu/usr.bin/perl/ext/POSIX/t/posix.t 29 Mar 2026 16:31:44 -0000 @@ -273,7 +273,12 @@ print POSIX::strftime("ok $test # %H:%M, # input fields to strftime(). sub try_strftime { my $expect = shift; - my $got = POSIX::strftime("%a %b %d %H:%M:%S %Y %j", @_); + my @input = @_; + + # Add zeros to missing parameters. The final 0 is for isdst, and the zero + # forces use of mini_mktime (unless the code changes). + push @input, 0 while @input < 9; + my $got = POSIX::strftime("%a %b %d %H:%M:%S %Y %j", @input); is($got, $expect, "validating mini_mktime() and strftime(): $expect"); } Index: gnu/usr.bin/perl/ext/POSIX/t/time.t =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/ext/POSIX/t/time.t,v diff -u -p -a -u -p -r1.7 time.t --- gnu/usr.bin/perl/ext/POSIX/t/time.t 26 Dec 2025 22:14:20 -0000 1.7 +++ gnu/usr.bin/perl/ext/POSIX/t/time.t 29 Mar 2026 16:31:44 -0000 @@ -16,14 +16,16 @@ use Test::More tests => 31; # Those with a working tzset() should be able to use the TZ below. $ENV{TZ} = "EST5EDT"; +# It looks like POSIX.xs claims that only VMS and Mac OS traditional +# don't have tzset(). MingW doesn't work. Cygwin works in some places, but +# not others. The other Win32's below are guesses. +my $has_tzset = $^O ne "VMS" && $^O ne "cygwin" + && ($^O ne "MSWin32" || ( $^O eq "MSWin32" + && $Config{make} eq 'nmake')) + && $^O ne "interix"; + SKIP: { - # It looks like POSIX.xs claims that only VMS and Mac OS traditional - # don't have tzset(). Win32 works to call the function, but it doesn't - # actually do anything. Cygwin works in some places, but not others. The - # other Win32's below are guesses. - skip "No tzset()", 1 - if $^O eq "VMS" || $^O eq "cygwin" || - $^O eq "MSWin32" || $^O eq "interix"; + skip "No tzset()", 1 unless $has_tzset; tzset(); SKIP: { my @tzname = tzname(); @@ -42,9 +44,7 @@ SKIP: { $ENV{TZ} = "UTC0UTC"; SKIP: { - skip "No tzset()", 2 - if $^O eq "VMS" || $^O eq "cygwin" || - $^O eq "MSWin32" || $^O eq "interix"; + skip "No tzset()", 2 unless $has_tzset; tzset(); my @tzname = tzname(); like($tzname[0], qr/(GMT|UTC)/i, "tzset() to GMT/UTC"); Index: gnu/usr.bin/perl/hints/aix.sh =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/hints/aix.sh,v diff -u -p -a -u -p -r1.20 aix.sh --- gnu/usr.bin/perl/hints/aix.sh 28 Jan 2025 01:06:15 -0000 1.20 +++ gnu/usr.bin/perl/hints/aix.sh 29 Mar 2026 16:31:44 -0000 @@ -700,4 +700,7 @@ case "$osvers" in ;; esac +# GH #23825 +d_duplocale='undef' + # EOF Index: gnu/usr.bin/perl/hints/catamount.sh =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/hints/catamount.sh,v diff -u -p -a -u -p -r1.17 catamount.sh --- gnu/usr.bin/perl/hints/catamount.sh 26 Dec 2025 22:14:20 -0000 1.17 +++ gnu/usr.bin/perl/hints/catamount.sh 29 Mar 2026 16:31:44 -0000 @@ -31,11 +31,11 @@ # mkdir -p /opt/perl-catamount # mkdir -p /opt/perl-catamount/include # mkdir -p /opt/perl-catamount/lib -# mkdir -p /opt/perl-catamount/lib/perl5/5.42.0 +# mkdir -p /opt/perl-catamount/lib/perl5/5.42.2 # mkdir -p /opt/perl-catamount/bin # cp *.h /opt/perl-catamount/include # cp libperl.a /opt/perl-catamount/lib -# cp -pr lib/* /opt/perl-catamount/lib/perl5/5.42.0 +# cp -pr lib/* /opt/perl-catamount/lib/perl5/5.42.2 # cp miniperl perl run.sh cc.sh /opt/perl-catamount/lib # # With the headers and the libperl.a you can embed Perl to your Catamount Index: gnu/usr.bin/perl/lib/B/Op_private.pm =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/lib/B/Op_private.pm,v diff -u -p -a -u -p -r1.15 Op_private.pm --- gnu/usr.bin/perl/lib/B/Op_private.pm 26 Dec 2025 22:14:20 -0000 1.15 +++ gnu/usr.bin/perl/lib/B/Op_private.pm 29 Mar 2026 16:31:44 -0000 @@ -118,7 +118,7 @@ package B::Op_private; our %bits; -our $VERSION = "5.042000"; +our $VERSION = "5.042002"; $bits{$_}{3} = 'OPpENTERSUB_AMPER' for qw(entersub rv2cv); $bits{$_}{6} = 'OPpENTERSUB_DB' for qw(entersub rv2cv); Index: gnu/usr.bin/perl/lib/source/source_encoding.t =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/lib/source/source_encoding.t,v diff -u -p -a -u -p -r1.1.1.1 source_encoding.t --- gnu/usr.bin/perl/lib/source/source_encoding.t 26 Dec 2025 22:12:45 -0000 1.1.1.1 +++ gnu/usr.bin/perl/lib/source/source_encoding.t 29 Mar 2026 16:31:44 -0000 @@ -44,8 +44,13 @@ if (fresh_perl_like(<<~'EOT', EOT "", { }, "source encoding can be turned off"); + fresh_perl_like(<<~'EOT', + use v5.41.0; my $var = "¶"; + EOT + qr/Use of non-ASCII character 0x[[:xdigit:]]{2} illegal/, + { }, ">= 'use statement affects rest of current line'"); } -else { # Above test depends on the previous one; if that failed, use this +else { # Above tests depend on the previous one; if that failed, use this # alternate one fresh_perl_is(<<~'EOT', use source::encoding 'ascii'; Index: gnu/usr.bin/perl/plan9/config_sh.sample =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/plan9/config_sh.sample,v diff -u -p -a -u -p -r1.20 config_sh.sample --- gnu/usr.bin/perl/plan9/config_sh.sample 26 Dec 2025 22:14:21 -0000 1.20 +++ gnu/usr.bin/perl/plan9/config_sh.sample 29 Mar 2026 16:31:45 -0000 @@ -35,8 +35,8 @@ api_subversion='0' api_version='42' api_versionstring='5.42.0' ar='ar' -archlib='/sys/lib/perl5/5.42.0/386' -archlibexp='/sys/lib/perl5/5.42.0/386' +archlib='/sys/lib/perl5/5.42.2/386' +archlibexp='/sys/lib/perl5/5.42.2/386' archname64='' archname='386' archobjs='' @@ -833,17 +833,17 @@ inc_version_list=' ' inc_version_list_init='0' incpath='' inews='' -installarchlib='/sys/lib/perl/5.42.0/386' +installarchlib='/sys/lib/perl/5.42.2/386' installbin='/usr/bin' installman1dir='/sys/man/1pub' installman3dir='/sys/man/2pub' installprefix='/usr' installprefixexp='/usr' -installprivlib='/sys/lib/perl/5.42.0' +installprivlib='/sys/lib/perl/5.42.2' installscript='/usr/bin' -installsitearch='/sys/lib/perl/5.42.0/site_perl/386' +installsitearch='/sys/lib/perl/5.42.2/site_perl/386' installsitebin='/usr/bin' -installsitelib='/sys/lib/perl/5.42.0/site_perl' +installsitelib='/sys/lib/perl/5.42.2/site_perl' installstyle='lib/perl5' installusrbinperl='undef' installvendorarch='' @@ -971,8 +971,8 @@ pmake='' pr='' prefix='/usr' prefixexp='/usr' -privlib='/sys/lib/perl/5.42.0' -privlibexp='/sys/lib/perl/5.42.0' +privlib='/sys/lib/perl/5.42.2' +privlibexp='/sys/lib/perl/5.42.2' procselfexe='' prototype='define' ptrsize='4' @@ -1037,13 +1037,13 @@ sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 0' sig_size='50' signal_t='void' -sitearch='/sys/lib/perl/5.42.0/site_perl/386' +sitearch='/sys/lib/perl/5.42.2/site_perl/386' sitearchexp='/sys/lib/perl/site_perl/386' sitebin='/usr/bin' sitebinexp='/usr/bin' -sitelib='/sys/lib/perl/5.42.0/site_perl' -sitelib_stem='/sys/lib/perl/5.42.0/site_perl' -sitelibexp='/sys/lib/perl/5.42.0/site_perl' +sitelib='/sys/lib/perl/5.42.2/site_perl' +sitelib_stem='/sys/lib/perl/5.42.2/site_perl' +sitelibexp='/sys/lib/perl/5.42.2/site_perl' siteprefix='/usr' siteprefixexp='/usr' sizesize='4' @@ -1078,7 +1078,7 @@ stdio_stream_array='' strerror_r_proto='0' strings='/sys/include/ape/string.h' submit='' -subversion='0' +subversion='2' sysman='/sys/man/1pub' tail='' tar='' @@ -1163,8 +1163,8 @@ vendorlib_stem='' vendorlibexp='' vendorprefix='' vendorprefixexp='' -version='5.42.0' -version_patchlevel_string='version 42 subversion 0' +version='5.42.2' +version_patchlevel_string='version 42 subversion 2' versiononly='undef' vi='' xlibpth='' @@ -1179,7 +1179,7 @@ config_args='' config_argc=0 PERL_REVISION=5 PERL_VERSION=42 -PERL_SUBVERSION=0 +PERL_SUBVERSION=2 PERL_API_REVISION=5 PERL_API_VERSION=42 PERL_API_SUBVERSION=0 Index: gnu/usr.bin/perl/pod/perl.pod =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/pod/perl.pod,v diff -u -p -a -u -p -r1.46 perl.pod --- gnu/usr.bin/perl/pod/perl.pod 26 Dec 2025 22:16:26 -0000 1.46 +++ gnu/usr.bin/perl/pod/perl.pod 29 Mar 2026 16:31:45 -0000 @@ -181,10 +181,13 @@ aux h2ph h2xs perlbug pl2pm pod2html pod perlhist Perl history records perldelta Perl changes since previous version + perl5421delta Perl changes in version 5.42.1 perl5420delta Perl changes in version 5.42.0 + perl5403delta Perl changes in version 5.40.3 perl5402delta Perl changes in version 5.40.2 perl5401delta Perl changes in version 5.40.1 perl5400delta Perl changes in version 5.40.0 + perl5385delta Perl changes in version 5.38.5 perl5384delta Perl changes in version 5.38.4 perl5383delta Perl changes in version 5.38.3 perl5382delta Perl changes in version 5.38.2 Index: gnu/usr.bin/perl/pod/perl5385delta.pod =================================================================== RCS file: gnu/usr.bin/perl/pod/perl5385delta.pod diff -N gnu/usr.bin/perl/pod/perl5385delta.pod --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ gnu/usr.bin/perl/pod/perl5385delta.pod 29 Mar 2026 16:31:45 -0000 @@ -0,0 +1,125 @@ +=encoding utf8 + +=head1 NAME + +perl5385delta - what is new for perl v5.38.5 + +=head1 DESCRIPTION + +This document describes differences between the 5.38.4 release and the 5.38.5 +release. + +If you are upgrading from an earlier release such as 5.38.3, first read +L, which describes differences between 5.38.3 and 5.38.4. + +=head1 Security + +=head2 [CVE-2025-40909] Perl threads have a working directory race condition where file operations may target unintended paths + +Perl thread cloning had a working directory race condition where file +operations may target unintended paths. Perl 5.38 will no longer chdir to each +handle. + +This problem was discovered by Vincent Lefèvre via +[L] and assigned +[L] +by the L. + +Fixes were provided via [L] +and [L]. + +=head1 Incompatible Changes + +There are no changes intentionally incompatible with 5.38.4. If any exist, +they are bugs, and we request that you submit a report. See L below. + +=head1 Modules and Pragmata + +=head2 Updated Modules and Pragmata + +=over 4 + +=item * + +L has been upgraded from version 5.20250413_38 to 5.20250803_38. + +=back + +=head1 Documentation + +=head2 Changes to Existing Documentation + +We have attempted to update the documentation to reflect the changes listed in +this document. If you find any we have missed, open an issue at +L. + +=head1 Testing + +Tests were added and changed to reflect the other additions and changes in this +release. + +=head1 Acknowledgements + +Perl 5.38.5 represents approximately 4 months of development since Perl 5.38.4 +and contains approximately 3,300 lines of changes across 46 files from 8 +authors. + +Excluding auto-generated files, documentation and release tools, there were +approximately 1,100 lines of changes to 7 .pm, .t, .c and .h files. + +Perl continues to flourish into its fourth decade thanks to a vibrant community +of users and developers. The following people are known to have contributed +the improvements that became Perl 5.38.5: + +James E Keenan, Karen Etheridge, Leon Timmermans, Lukas Mai, Philippe Bruhat +(BooK), Richard Leach, Steve Hay, Thibault Duponchelle. + +The list above is almost certainly incomplete as it is automatically generated +from version control history. In particular, it does not include the names of +the (very much appreciated) contributors who reported issues to the Perl bug +tracker. + +Many of the changes included in this version originated in the CPAN modules +included in Perl's core. We're grateful to the entire CPAN community for +helping Perl to flourish. + +For a more complete list of all of Perl's historical contributors, please see +the F file in the Perl source distribution. + +=head1 Reporting Bugs + +If you find what you think is a bug, you might check the perl bug database at +L. There may also be information at +L, the Perl Home Page. + +If you believe you have an unreported bug, please open an issue at +L. Be sure to trim your bug down to a +tiny but sufficient test case. + +If the bug you are reporting has security implications which make it +inappropriate to send to a public issue tracker, then see +L for details of how to +report the issue. + +=head1 Give Thanks + +If you wish to thank the Perl 5 Porters for the work we had done in Perl 5, you +can do so by running the C program: + + perlthanks + +This will send an email to the Perl 5 Porters list with your show of thanks. + +=head1 SEE ALSO + +The F file for an explanation of how to view exhaustive details on +what changed. + +The F file for how to build Perl. + +The F file for general stuff. + +The F and F files for copyright information. + +=cut Index: gnu/usr.bin/perl/pod/perl5403delta.pod =================================================================== RCS file: gnu/usr.bin/perl/pod/perl5403delta.pod diff -N gnu/usr.bin/perl/pod/perl5403delta.pod --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ gnu/usr.bin/perl/pod/perl5403delta.pod 29 Mar 2026 16:31:45 -0000 @@ -0,0 +1,125 @@ +=encoding utf8 + +=head1 NAME + +perl5403delta - what is new for perl v5.40.3 + +=head1 DESCRIPTION + +This document describes differences between the 5.40.2 release and the 5.40.3 +release. + +If you are upgrading from an earlier release such as 5.40.1, first read +L, which describes differences between 5.40.1 and 5.40.2. + +=head1 Security + +=head2 [CVE-2025-40909] Perl threads have a working directory race condition where file operations may target unintended paths + +Perl thread cloning had a working directory race condition where file +operations may target unintended paths. Perl 5.40 will no longer chdir to each +handle. + +This problem was discovered by Vincent Lefèvre via +[L] and assigned +[L] +by the L. + +Fixes were provided via [L] +and [L]. + +=head1 Incompatible Changes + +There are no changes intentionally incompatible with 5.40.2. If any exist, +they are bugs, and we request that you submit a report. See L below. + +=head1 Modules and Pragmata + +=head2 Updated Modules and Pragmata + +=over 4 + +=item * + +L has been upgraded from version 5.20250413_40 to 5.20250803_40. + +=back + +=head1 Documentation + +=head2 Changes to Existing Documentation + +We have attempted to update the documentation to reflect the changes listed in +this document. If you find any we have missed, open an issue at +L. + +=head1 Testing + +Tests were added and changed to reflect the other additions and changes in this +release. + +=head1 Acknowledgements + +Perl 5.40.3 represents approximately 4 months of development since Perl 5.40.2 +and contains approximately 3,400 lines of changes across 43 files from 7 +authors. + +Excluding auto-generated files, documentation and release tools, there were +approximately 1,100 lines of changes to 6 .pm, .t, .c and .h files. + +Perl continues to flourish into its fourth decade thanks to a vibrant community +of users and developers. The following people are known to have contributed +the improvements that became Perl 5.40.3: + +Karen Etheridge, Leon Timmermans, Lukas Mai, Philippe Bruhat (BooK), Richard +Leach, Steve Hay, Thibault Duponchelle. + +The list above is almost certainly incomplete as it is automatically generated +from version control history. In particular, it does not include the names of +the (very much appreciated) contributors who reported issues to the Perl bug +tracker. + +Many of the changes included in this version originated in the CPAN modules +included in Perl's core. We're grateful to the entire CPAN community for +helping Perl to flourish. + +For a more complete list of all of Perl's historical contributors, please see +the F file in the Perl source distribution. + +=head1 Reporting Bugs + +If you find what you think is a bug, you might check the perl bug database at +L. There may also be information at +L, the Perl Home Page. + +If you believe you have an unreported bug, please open an issue at +L. Be sure to trim your bug down to a +tiny but sufficient test case. + +If the bug you are reporting has security implications which make it +inappropriate to send to a public issue tracker, then see +L for details of how to +report the issue. + +=head1 Give Thanks + +If you wish to thank the Perl 5 Porters for the work we had done in Perl 5, you +can do so by running the C program: + + perlthanks + +This will send an email to the Perl 5 Porters list with your show of thanks. + +=head1 SEE ALSO + +The F file for an explanation of how to view exhaustive details on +what changed. + +The F file for how to build Perl. + +The F file for general stuff. + +The F and F files for copyright information. + +=cut Index: gnu/usr.bin/perl/pod/perl5420delta.pod =================================================================== RCS file: gnu/usr.bin/perl/pod/perl5420delta.pod diff -N gnu/usr.bin/perl/pod/perl5420delta.pod --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ gnu/usr.bin/perl/pod/perl5420delta.pod 29 Mar 2026 16:31:45 -0000 @@ -0,0 +1,1556 @@ +=encoding utf8 + +=head1 NAME + +perl5420delta - what is new for perl v5.42.0 + +=head1 DESCRIPTION + +This document describes differences between the 5.42.0 release and the 5.40.0 +release. + +=head1 Core Enhancements + +=head2 More CORE:: subs + +C has been added as a subroutine to the C namespace. + +Previously, code like C<&CORE::chdir($dir)> or C<< my $ref = \&CORE::chdir; +$ref->($dir) >> would throw an error saying C<&CORE::chdir cannot be called +directly>. These cases are now fully supported. + +=head2 New pragma C> + +This allows you to declare that the portion of a program for the +remainder of the lexical scope of this pragma is encoded either entirely +in ASCII (for S>) or if UTF-8 is allowed +as well (for S>). No other encodings are +accepted. The second form is entirely equivalent to S>, and +may be used interchangeably with that. + +The purpose of this pragma is to catch cases early where you forgot to +specify S>. + +S> is automatically enabled within the +lexical scope of a S> or higher. + +S> turns off all this checking for the remainder of +its lexical scope. The meaning of non-ASCII characters is then undefined. + +=head2 New C<:writer> attribute on field variables + +Classes defined using C are now able to automatically +create writer accessors for scalar fields, by using the C<:writer> attribute, +similar to the way that C<:reader> already creates reader accessors. + + class Point { + field $x :reader :writer :param; + field $y :reader :writer :param; + } + + my $p = Point->new( x => 20, y => 40 ); + $p->set_x(60); + +=head2 New C and C operators + +Two new experimental features have been added, which introduce the +list-processing operators C and C. + + use v5.42; + use feature 'keyword_all'; + no warnings 'experimental::keyword_all'; + + my @numbers = ... + + if ( all { $_ % 2 == 0 } @numbers ) { + say "All the numbers are even"; + } + +These keywords operate similarly to C except that they only +ever return true or false, testing if any (or all) of the elements in +the list make the testing block yield true. Because of this they can +short-circuit, avoiding the need to test any further elements if a given +element determines the eventual result. + +These are inspired by the same-named functions in the L module, +except that they are implemented as direct core operators, and thus perform +faster, and do not produce an additional subroutine call stack frame for +invoking the code block. + +The feature flags enabling those keywords have been named +L|feature/"The 'keyword_any' feature"> +and L|feature/"The 'keyword_all' feature"> +to avoid confusion with the ability of the C module +to refer to all of its features by using the C<:all> +export tag. [L] + +The related experimental warning flags are consequently named +C and C. + +=head2 Apostrophe as a global name separator can be disabled + +This was deprecated in Perl 5.38 and removed as scheduled in perl +5.41.3, but after some discussion has been reinstated by default. + +This can be controlled with the C +feature which is enabled by default, but is disabled from the 5.41 +feature bundle onwards. + +If you want to disable use within your own code you can explicitly +disable the feature: + + no feature "apostrophe_as_package_separator"; + +Note that disabling this feature only prevents use of apostrophe as a +package separator within code; symbolic references still treat C<'> as +C<::> with the feature disabled: + + my $symref = "My'Module'Var"; + # default features + my $x = $My'Module'Var; # fine + no feature "apostrophe_as_package_separator"; + no strict "refs"; + my $y = $$symref; # like $My::Module::Var + my $z = $My'Module'Var; # syntax error + +[L] + +=head2 Lexical method declaration using C + +Like C since Perl version 5.18, C can now be prefixed with the +C keyword. This declares a subroutine that has lexical, rather than +package visibility. See L for more detail. + +=head2 Lexical method invocation operator C<< ->& >> + +Along with the ability to declare methods lexically, this release also permits +invoking a lexical subroutine as if it were a method, bypassing the usual +name-based method resolution. + +Combined with lexical method declaration, these two new abilities create the +effect of having private methods. + +=head2 Switch and Smart Match operator kept, behind a feature + +The "switch" feature and the smartmatch operator, C<~~>, were introduced in +v5.10. Their behavior was significantly changed in v5.10.1. When the +"experiment" system was added in v5.18.0, switch and smartmatch were +retroactively declared experimental. Over the years, proposals to fix or +supplement the features have come and gone. + +They were deprecated in Perl v5.38.0 and scheduled for removal in +Perl v5.42.0. After extensive discussion their removal has been indefinitely +postponed. Using them no longer produces a deprecation warning. + +Switch itself still requires the C feature, which is enabled +by default for feature bundles from v5.9.5 through to v5.34. Switch +remains disabled in feature bundles 5.35 and later, but can be +separately enabled: + + # no switch here + use v5.10; + # switch here + use v5.36; + # no switch here + use feature "switch"; + # switch here + +Smart match now requires the C feature, which is enabled +by default and included in all feature bundles up to 5.40. It is +disabled for the 5.41 feature bundle and later, but can be separately +enabled: + + # smartmatch here + use v5.41; + # no smartmatch here + use feature "smartmatch"; + # smartmatch here + +[L] + +=head2 Unicode 16.0 supported + +Perl now supports Unicode 16.0 +L including the changes +introduced in 15.1 L. + +=head2 Assigning logical xor C<^^=> operator + +Perl 5.40.0 introduced the logical medium-precedence exclusive-or operator +C<^^>. It was not noticed at the time that the assigning variant C<^^=> was +also missing. This is now added. + +=head1 Security + +=head2 [CVE-2024-56406] Heap buffer overflow vulnerability with tr// + +A heap buffer overflow vulnerability was discovered in Perl. + +When there are non-ASCII bytes in the left-hand-side of the C operator, +C can overflow the destination pointer C. + + $ perl -e '$_ = "\x{FF}" x 1000000; tr/\xFF/\x{100}/;' + Segmentation fault (core dumped) + +It is believed that this vulnerability can enable Denial of Service or +Arbitrary Code Execution attacks on platforms that lack sufficient defenses. + +This problem was discovered by Nathan Mills and assigned +[L] +by the L. + +The patch to fix this issue (L<87f42aa0e0096e9a346c9672aa3a0bd3bef8c1dd|https://github.com/Perl/perl5/commit/87f42aa0e0096e9a346c9672aa3a0bd3bef8c1dd>) is applicable to all perls that are vulnerable, including those +out-of-support. + +=head2 [CVE-2025-40909] Perl threads have a working directory race condition where file operations may target unintended paths + +Perl thread cloning had a working directory race condition where file +operations may target unintended paths. Perl 5.42 will no longer chdir +to each handle. + +This problem was discovered by Vincent Lefèvre via [L] +and assigned [L] +by the L. + +Fixes were provided via [L] +and [L]. + +=head1 Incompatible Changes + +=head2 Removed containing function references for functions without eval + +Perl 5.40 reintroduced unconditional references from functions to their +containing functions to fix a bug introduced in Perl 5.18 that broke the +special behaviour of C in package C which is used by the +debugger. + +In some cases this change led to circular reference chains between closures and +other existing references, resulting in memory leaks. + +This change has been reverted, fixing +[L] but re-breaking +[L]. + +This means the reference loops won't occur, and that lexical variables and +functions from enclosing functions may not be visible in the debugger. + +Note that calling C in a function unconditionally causes a function +to reference its enclosing functions as it always has. + +=head1 Performance Enhancements + +=over 4 + +=item * + +Constant-folded strings are now shareable via the Copy-on-Write mechanism. +[L] + +The following code would previously have allocated eleven string buffers, +each containing one million "A"s: + + my @scalars; push @scalars, ("A" x 1_000_000) for 0..9; + +Now a single buffer is allocated and shared between a CONST OP and +the ten scalar elements of C<@scalars>. + +Note that any code using this sort of constant to simulate memory leaks +(perhaps in test files) must now permute the string in order to trigger +a string copy and the allocation of separate buffers. For example, +C<("A" x 1_000_000).time> might be a suitable small change. + +=item * + +C now runs at the same speed regardless of the internal +representation of its operand, as long as the only characters being +translated are ASCII-range, for example C. Previously, if +the internal encoding was UTF-8, a slower, more general implementation +was used. + +=item * + +Code that uses the C function from the L module to generate +a list of index/value pairs out of an array or list which is then passed into +a two-variable C list to unpack those again is now optimised to be +more efficient. + + my @array = (...); + + foreach my ($idx, $val) (builtin::indexed @array) { + ... + } + +Z<> + + foreach my ($idx, $val) (builtin::indexed LIST...) { + ... + } + +In particular, a temporary list twice the size of the original is no longer +generated. Instead, the loop iterates down the original array or list +in-place directly, in the same way that C or +C would do. + +=item * + +The peephole optimizer recognises the following zero-offset C patterns +and swaps in a new dedicated operator (C). +[L] + + substr($x, 0, ...) + substr($x, 0, ..., '') + +=item * + +The stringification of integers by L and L, +when coming from an C, is now more efficient. +[L] + +=item * + +String reversal from a single argument, when the string buffer is not +"swiped", is now done in a single pass and is noticeably faster. +The extent of the improvement is compiler & hardware dependent. +[L] + +=back + +=head1 Modules and Pragmata + +=head2 Updated Modules and Pragmata + +=over 4 + +=item * + +L has been upgraded from version 3.02_001 to 3.04. + +=item * + +L has been upgraded from version 1.76 to 1.85. + +=item * + +L has been upgraded from version 1.25 to 1.27. + +=item * + +L has been upgraded from version 0.014 to 0.019. + +=item * + +L has been upgraded from version 2.212 to 2.213. + +=item * + +L has been upgraded from version 2.212 to 2.213. + +=item * + +L has been upgraded from version 0.36 to 0.38. + +=item * + +L has been upgraded from version 2.36 to 2.38. + +=item * + +L has been upgraded from version 0.018 to 0.020. + +=item * + +L has been upgraded from version 2.189 to 2.192. + +=item * + +L has been upgraded from version 1.08 to 1.09. + +=item * + +L has been upgraded from version 0.06 to 0.07. + +=item * + +L has been upgraded from version 1.34 to 1.36. + +=item * + +L has been upgraded from version 3.72 to 3.73. + +=item * + +L has been upgraded from version 2.58_01 to 2.59. + +=item * + +L has been upgraded from version 1.56 to 1.57. + +=item * + +L has been upgraded from version 0.032 to 0.035. + +=item * + +L has been upgraded from version 5.78 to 5.79. + +=item * + +L has been upgraded from version 0.280240 to 0.280242. + +=item * + +L has been upgraded from version 7.70 to 7.76. + +=item * + +L has been upgraded from version 3.51 to 3.57. + +=item * + +L has been upgraded from version 3.51 to 3.57. + +=item * + +L has been upgraded from version 1.18 to 1.20. + +=item * + +L has been upgraded from version 1.89 to 1.97. + +=item * + +L has been upgraded from version 2.25 to 2.27. + +=item * + +L has been upgraded from version 3.90 to 3.94. + +=item * + +L has been upgraded from version 2.57 to 2.58. + +=item * + +L has been upgraded from version 0.088 to 0.090. + +=item * + +L has been upgraded from version 2.212 to 2.213. + +=item * + +L has been upgraded from version 0.42 to 0.43. + +=item * + +L has been upgraded from version 1.22 to 1.24. + +=item * + +L has been upgraded from version 1.12 to 1.13. + +=item * + +L has been upgraded from version 2.003002 to 2.005002. + +=item * + +L has been upgraded from version 0.5018 to 0.5020. + +=item * + +L has been upgraded from version 1.62 to 1.63. + +=item * + +L has been upgraded from version 1.16 to 1.17. + +=item * + +L has been upgraded from version 5.20240609 to 5.20250702. + +=item * + +L has been upgraded from version 1.17 to 1.18. + +=item * + +L has been upgraded from version 1.18 to 1.20. + +=item * + +L has been upgraded from version 1.65 to 1.69. + +=item * + +L has been upgraded from version 1.37 to 1.40. + +=item * + +L has been upgraded from version 0.241 to 0.244. + +=item * + +L has been upgraded from version 5.20240218 to 5.20250619. + +=item * + +L has been upgraded from version 2.03 to 2.05. + +=item * + +L has been upgraded from version 5.01_02 to v6.0.2. + +=item * + +L has been upgraded from version 2.20 to 2.23. + +=item * + +L has been upgraded from version 0.47 to 0.48. + +=item * + +L has been upgraded from version 2.46 to 2.47. + +=item * + +L has been upgraded from version 1.63 to 1.68_01. + +=item * + +L has been upgraded from version 1.07 to 1.08. + +=item * + +L has been upgraded from version 1.27 to 1.28. + +=item * + +L has been upgraded from version 2.05 to 2.06. + +=item * + +L has been upgraded from version 3.32 to 3.37. + +=item * + +L has been upgraded from version 1.13 to 1.14. + +=item * + +L has been upgraded from version 0.018 to 0.024. + +=item * + +L has been upgraded from version 3.48 to 3.50. + +=item * + +L has been upgraded from version 1.302199 to 1.302210. + +=item * + +L has been upgraded from version 3.05 to 3.06. + +=item * + +L has been upgraded from version 2.40 to 2.43. + +=item * + +L has been upgraded from version 1.69 to 1.70. + +=item * + +L has been upgraded from version 1.09 to 1.10. + +=item * + +L has been upgraded from version 1.40 to 1.41. + +=item * + +L has been upgraded from version 1.9777 to 1.9778. + +=item * + +L has been upgraded from version 1.3401_01 to 1.36. + +=item * + +L has been upgraded from version 0.78 to 0.81. + +=item * + +L has been upgraded from version 1.25 to 1.27. + +=item * + +L has been upgraded from version 0.9930 to 0.9933. + +=item * + +L has been upgraded from version 1.13 to 1.15. + +=item * + +L has been upgraded from version 1.69 to 1.74. + +=item * + +L has been upgraded from version 0.59 to 0.59_01. + +=item * + +L has been upgraded from version 1.36 to 1.43. + +=back + +=head1 Documentation + +=head2 Changes to Existing Documentation + +We have attempted to update the documentation to reflect the changes +listed in this document. If you find any we have missed, open an issue +at L. + +Additionally, the following selected changes have been made: + +=head3 L + +=over 4 + +=item * + +Combined the documentation for several groups of related functions +into single entries. + +=item * + +All forms of C are now documented together. + +=item * + +C is now documented with C and additional notes added. +The long C forms are now listed when available. + +=back + +=head3 L + +=over 4 + +=item * + +Binary and octal floating-point constants (such as C<012.345p-2> and +C<0b101.11p-1>) are now documented. This feature was first introduced in perl +5.22.0 together with hexadecimal floating-point constants and had a few bug +fixes in perl 5.28.0, but it was never formally documented. +[L] + +=back + +=head3 L + +=over 4 + +=item * + +Clarified the description of C and C in relation +to built-in types and class names. + +=item * + +Clarified that perl C is stable (and has been since v5.8.0). + +=item * + +The recommended alternatives to the C function were updated to modern modules +recommended by the L. +[L] + +=back + +=head3 L + +=over 4 + +=item * + +The list of Steering Council and Core Team members have been updated, following the conclusion of +the latest election on 2024-07-17. + +=back + +=head3 L + +=over 4 + +=item * + +Added some description of "real" Cs compared to "fake" Cs. + +=item * + +Documentation was updated to reflect that mixing C, C, and +C vs C, C, and C are not allowed, and mixing +pointers between the 2 classes of APIs is not allowed. Updates made in +L and L. + +=item * + +Additional caveats have been added to the description of C. + +=back + +=head3 L + +=over 4 + +=item * + +Portions of perlop are supposed to be ordered so that all the operators +wth the same precedence are in a single section, and the sections are +ordered so that the highest precedence operators appear first. +This ordering has now been restored. Other reorganization was done to +improve clarity, with more basic operations described before ones that +depend on them. + +=item * + +The documentation for here-docs has been cleaned up and reorganized. +Indented here-docs were formerly documented separately, now the two +types have interwoven documentation which is more compact, and easier to +understand. + +=item * + +The documentation of the C operator has been expanded. + +=item * + +Outdated advice about using relational string operators in UTF-8 locales +has been removed. Use L for the best results, but +these operators will give adequate results on many platforms. + +=item * + +Normalized alignment of verbatim sections, fixing how they are displayed by +some Pod viewers that strip indentation. + +=back + +=head3 L + +=over 4 + +=item * + +Entries for C<$#> and C<$*> have been amended to note that use of them result in a compilation +error, not a warning. + +=back + +=head1 Diagnostics + +The following additions or changes have been made to diagnostic output, +including warnings and fatal error messages. For the complete list of +diagnostic messages, see L. + +=head2 New Diagnostics + +=head3 New Errors + +=over 4 + +=item * + +L + +(F) This pragma forbids non-ASCII characters within its scope. + +=item * + +L + +(F) The subroutine indicated hasn't been defined, or if it was, it has +since been undefined. + +This error could also indicate a mistyped package separator, when a +single colon was typed instead of two colons. For example, C +would be parsed as the label C followed by an unqualified function +name: C. [L] + +=back + +=head3 New Warnings + +=over 4 + +=item * + +L<__CLASS__ is experimental|perldiag/"__CLASS__ is experimental"> + +(S experimental::class) This warning is emitted if you use the C<__CLASS__> +keyword of C. This keyword is currently +experimental and its behaviour may change in future releases of Perl. + +=item * + +L<%s() attempted on handle %s opened with open()|perldiag/"%s() attempted on handle %s opened with open()"> + +(W io) You called readdir(), telldir(), seekdir(), rewinddir() or +closedir() on a handle that was opened with open(). If you want to +use these functions to traverse the contents of a directory, you need +to open the handle with opendir(). + +[L] + +=item * + +L + +(W precedence) You wrote something like + + !$x < $y # parsed as: (!$x) < $y + !$x eq $y # parsed as: (!$x) eq $y + !$x =~ /regex/ # parsed as: (!$x) =~ /regex/ + !$obj isa Some::Class # parsed as: (!$obj) isa Some::Class + +but because C has higher precedence than comparison operators, C<=~>, and +C, this is interpreted as comparing/matching the logical negation of the +first operand, instead of negating the result of the comparison/match. + +To disambiguate, either use a negated comparison/binding operator: + + $x >= $y + $x ne $y + $x !~ /regex/ + +... or parentheses: + + !($x < $y) + !($x eq $y) + !($x =~ /regex/) + !($obj isa Some::Class) + +... or the low-precedence C operator: + + not $x < $y + not $x eq $y + not $x =~ /regex/ + not $obj isa Some::Class + +(If you did mean to compare the boolean result of negating the first operand, +parenthesize as C<< (!$x) < $y >>, C<< (!$x) eq $y >>, etc.) + +Note: this warning does not trigger for code like C, +i.e. where double negation (C) is used as a convert-to-boolean operator. + +=back + +=head2 Changes to Existing Diagnostics + +=over 4 + +=item * + +L<%s() attempted on invalid dirhandle %s|perldiag/"%s() attempted on invalid dirhandle %s"> + +This was consolidated from separate messages for readdir(), telldir(), +seekdir(), rewinddir() and closedir() as part of refactoring for +[L]. + +=item * + +L + +This warning now triggers for use of a chained comparison like C<< 0 < $x < 1 >>. +[L] + +=item * + +L + +Prevent this warning when accessing a function parameter in C<@_> that +is an lvalue reference to an untied hash element where the key was +undefined. This warning is still produced at the point of call. +[L] + +=back + +=head1 Utility Changes + +=head2 F + +=over 4 + +=item * + +Separate installation (without overwriting installed modules) is now the default. + +=item * + +Documentation is significantly enhanced. + +=back + +=head1 Configuration and Compilation + +=over 4 + +=item * + +Fix compilation on platforms (e.g. "Gentoo Prefix") with only a C locale [L] +Bug first reported downstream L + +=item * + +The (mostly undocumented) configuration macro C has been +removed. When enabled (e.g. with C<./Configure -A ccflags=-DPERL_STRICT_CR>), +it would make the perl parser throw a fatal error when it encountered a CR +(carriage return) character in source files. The default (and now only) +behavior of the perl parser is to strip CRs paired with newline characters and +otherwise treat them as whitespace. + +(C was originally introduced in perl 5.005 to optionally +restore backward compatibility with perl 5.004, which had made CR in source +files an error. Before that, CR was accepted, but retained literally in quoted +multi-line constructs such as here-documents, even at the end of a line.) + +=item * + +Similarly, the (even less documented) configuration macro C has +been removed. When enabled, it would install a default source filter to strip +carriage returns from source code before the parser proper got to see it. + +=back + +=head1 Testing + +Tests were added and changed to reflect the other additions and +changes in this release. Furthermore, these significant changes were +made: + +=over 4 + +=item * + +A new F test script was added as a place for TODO tests +for known unfixed bugs. Patches are welcome to add to this file. + +=item * + +Added testing of the perl headers against the C++ compiler +corresponding to the C compiler perl is being built with. +[L] + +=back + +=head1 Platform Support + +=head2 Platform-Specific Notes + +=over 4 + +=item arm64 Darwin + +Fix arm64 darwin hints when using use64bitall with Configure [L] + +=item Android + +Changes to F for Android [L] related to [L]. + +=item Cygwin + +F: fix several silly/terrible C errors. [L] + +Supply an explicit base address for C that cannot +conflict with those generated by C<--enable-auto-image-base>. [L][L] + +=item MacOS (Darwin) + +Collation of strings using locales on MacOS 15 (Darwin 24) and up has +been turned off due to a failed assertion in its libc. + +If earlier versions are also experiencing issues (such as failures in +F), you can explicitly disable locale collation by adding the +C<-Accflags=-DNO_LOCALE_COLLATE> option to your invocation of C<./Configure>, +or just C<-DNO_LOCALE_COLLATE> to the C and C +variables in F. + +=back + +=head1 Internal Changes + +=over 4 + +=item * + +The L> function is introduced. This is an +enhanced version of L>, which is retained for +backwards compatibility. Both are to call L when you have +the year, month, hour, etc. The new function handles UTF8ness for you, +and allows you to specify if you want the possibility of daylight +savings time to be considered. C never considers DST. + +=item * + +The C, C, and C +functions are no longer experimental. + +=item * + +Calls to L with the C flag +set also ensure the SV parameters constructed from the C +parameter are released before C returns. Previously they +were released on the next L. [L] + +=item * + +When built with the C<-DDEBUGGING> compile option, perl API functions that +take pointers to distinct types of SVs (AVs, HVs or CVs) will check the +C of the passed values to ensure they are valid. Additionally, +internal code within core functions that attempts to extract AVs, HVs or CVs +from reference values passed in will also perform such checks. + +While this has been entirely tested by normal Perl CI testing, there may +still be some corner-cases where these constraints are violated in +otherwise-valid calls. These may require further investigation if they are +found, and specific code to be adjusted to account for it. + +=item * + +The C function has been expanded to include additional information +about the recent C and C ops, as well as for +C and C which had not been done previously. + +=item * + +C now also has the facility to print extra debugging information +about custom operators, if those operators register a helper function via the +new C element of the C structure. For more information, see the +relevant additions to L. + +=item * + +New API functions are introduced to convert strings encoded in UTF-8 to +their ordinal code point equivalent. These are safe to use by default, +and generally more convenient to use than the existing ones. + +L> and L> replace +L> (which is retained for backwards +compatibility), but you should convert to use the new forms, as likely +you aren't using the old one safely. + +To convert in the opposite direction, you can now use +L>. This is not a new function, but a new synonym +for L>. It is added so you don't have to learn +two sets of names. + +There are also two new functions, L> and +L> which do the same thing except when +the input string represents a code point that Unicode doesn't accept as +legal for interchange, using either the strict original definition +(C), or the looser one given by +L +(C). When the input string represents one of the +restricted code points, these functions return the Unicode +C instead. + +Also L> is a synonym for C, for use +when you want to emphasize that the entire range of Perl extended UTF-8 +is acceptable. + +There are also replacement functions for the three more specialized +conversion functions that you are unlikely to need to use. Again, the +old forms are kept for backwards compatibility, but you should convert +to use the new forms. + +L> replaces L>. + +L> replaces L>. + +L> replaces +L>. + +Also added are the inverse functions L> +and L>, which are synonyms for the existing +functions, L> and +L> respectively. These are provided only +so you don't have to learn two sets of names. + +=item * + +Three new API functions are introduced to convert strings encoded in +UTF-8 to native bytes format (if possible). These are easier to use +than the existing ones, and they avoid unnecessary memory allocations. +The functions are L> which is used +when it is ok for the input string to be overwritten with the converted +result; and L> and +L> when the original string must be +preserved intact. C returns the result in a +temporary using L/C that will automatically be +destroyed. With C, you are responsible for +freeing the newly allocated memory that is returned if the conversion is +successful. + +The latter two functions are designed to replace +L> which creates memory unnecessarily, or +unnecessarily large. + +=item * + +New API functions L|perlapi/valid_identifier_pve>, +L|perlapi/valid_identifier_pvn> and +L|perlapi/valid_identifier_sv> have been added, which +test if a string would be considered by Perl to be a valid identifier name. + +=item * + +When assigning from an SVt_IV into a SVt_NV (or vice versa), providing that +both are "bodyless" types, Perl_sv_setsv_flags will now just change the +destination type to match the source type. Previously, an SVt_IV would have +been upgraded to a SVt_PVNV to store an NV, and an SVt_NV would have been +upgraded to a SVt_PVIV to store an IV. This change prevents the need to +allocate - and later free - the relevant body struct. + +=item * + +Two new API functions are introduced to convert strings encoded in +native bytes format to UTF-8. These return the string unchanged if its +UTF-8 representation is the same as the original. Otherwise, new memory +is allocated to contain the converted string. This is in contrast to +the existing L> which always allocates new +memory. The new functions are L> and +L>. +L> arranges for the new memory to +automatically be freed. With C, you are +responsible for freeing any newly allocated memory. + +=item * + +The way that subroutine signatures are parsed by the parser grammar has been +changed. + +Previously, when parsing individual signature parameters, the parser would +accumulate an C optree fragment for each parameter on the parser +stack, collecting them in an C sequence, before finally building the +complete argument handling optree itself, in a large action block defined +directly in F. + +In the new approach, all the optree generation is handled by newly-defined +functions in F which are called by the action blocks in the parser. +These do not keep state on the parser stack, but instead in a dedicated memory +structure referenced by the main C structure. This is intended to +be largely opaque to other code, and accessed only via the new functions. + +This new arrangement is intended to allow more flexible code generation and +additional features to be developed in the future. + +=item * + +Three new API functions have been added to interact with the regexp global +match position stored in an SV. These are C, +C and C. Using these +API functions avoids XS modules needing to know about or interact directly +with the way this position is currently stored, which involves the +C magic type. + +=item * + +New C API macro + +A new API macro has been added, which is used to obtain the second string +buffer out of a "vstring" SV, in a manner similar to the C macro which +obtains the regular string buffer out of a regular SV. + + STRLEN len; + const char *vstr_pv = SvVSTRING(sv, vstr_len); + +See L>. + +=back + +=head1 Selected Bug Fixes + +=over 4 + +=item * + +Fix null pointer dereference in S_SvREFCNT_dec [L]. + +=item * + +Fix feature 'class' Segmentation fault in DESTROY [L]. + +=item * + +C now returns real booleans (as its documentation describes), not +integers. This means the result of a failed C now stringifies to C<''>, +not C<'0'>. + +[L] + +=item * + +Compound assignment operators return lvalues that can be further modified: + + ($x &= $y) += $z; + # Equivalent to: + # $x &= $y; + # $x += $z; + +However, the separate numeric/string bitwise operators provided by L feature|feature/The 'bitwise' feature>, C<< &= ^= |= &.= ^.= |.= >>, +did not return such lvalues: + + use feature qw(bitwise); + ($x &= $y) += $z; + # Used to die: + # Can't modify numeric bitwise and (&) in addition (+) at ... + +This has been corrected. [L] + +=item * + +Starting in v5.39.8, L> would crash or produce odd errors +(such as C) when given a format +string that wasn't actually a string, but a number, C, or an object +(even one with overloaded string conversion). + +Now C stringifies its first argument, as before. +[L] + +Also, fix C [L]. + +=item * + +C and C now SvPV_force() the supplied +SV unless it is read only. This will remove CoW from the SV and +prevents code that writes through the generated pointer from modifying +the value of other SVs that happen the share the same CoWed string +buffer. + +Note: this does not make C safe, if the SV is magical +then any writes to the buffer will likely be discarded on the next +read. [L] + +=item * + +Enforce C for bareword file handles +that have strictness removed because they are used in open() with a +"dup" mode, such as in C<< open my $fh, ">&", THISHANDLE >>. [L] + +=item * + +Using C to tail call, or using the call_sv() and related APIs to +call, any of trim(), refaddr(), reftype(), ceil(), floor() or +stringify() in the C package would crash or assert due to a +C handling bug. [L] + +=item * + +Fix sv_gets() to accept a C append offset instead of C. +This prevents integer overflows when appending to a large C for +C aka C and C. +L + +=item * + +Fixed an issue where C failed to correctly identify +certain invalid UTF-8 sequences as invalid. Specifically, sequences +that start with continuation bytes or unassigned bytes could cause +unexpected behavior or a panic. This fix ensures that such invalid +sequences are now properly detected and handled. This correction +also resolves related issues in modules that handle UTF-8 processing, +such as C. + +=item * + +The perl parser would erroneously parse some POD directives +as if they were C<=cut>. Some other POD directives +whose names start with I, prematurely terminating an embedded POD section. +The following cases were affected: I followed by a digit (e.g. +C<=cut2studio>), I followed by an underscore (e.g. C<=cut_grass>), and in +string C, any identifier starting with I (e.g. C<=cute>). +[L] + +=item * + +Builds with C<-msse> and quadmath on 32-bit x86 systems would crash +with a misaligned access early in the build. [L] + +=item * + +On threaded builds on POSIX-like systems, if the perl signal handler +receives a signal, we now resend the signal to the main perl thread. Previously +this would crash. [L] + +=item * + +Declaring a lexically scoped array or hash using C within a subroutine +and then immediately returning no longer triggers a "Bizarre copy of HASH/ARRAY +in subroutine exit" error. [L] + +=item * + +C didn't properly clear C which could result in +out of date cached numeric versions of the value being used on a +second evaluation. Properly clear any cached values. [L] + +=item * + +L and L are no longer limited to 31-bit +values and can use all the available bits on a platform for their POS and +SIZE arguments. +[L] + +=item * + +L is now better behaved if VAR is not a plain string. If VAR +is a tied variable, it calls C once; previously, it would also call +C, but without using the result. If VAR is a reference, the referenced +entity has its refcount properly decremented when VAR is turned into a string; +previously, it would leak memory. +[L] + +=item * + +The C<$SIG{__DIE__}> and C<$SIG{__WARN__}> handlers can no longer be invoked +recursively, either deliberately or by accident, as described in +L. That is, when an exception (or warning) triggers a call to a +C<$SIG{__DIE__}> (or C<$SIG{__WARN__}>) handler, further exceptions (or +warnings) are processed directly, ignoring C<%SIG> until the original +C<$SIG{__DIE__}> (or C<$SIG{__WARN__}>) handler call returns. +[L], [L], [L] + +=item * + +The C for an object and C for the +object's stash weren't always NULL or not-NULL, confusing C +(and hence Devel::Peek's C) into crashing on an object with no +defined fields in some cases. [L] + +=item * + +When comparing strings when using a UTF-8 locale, the behavior was +previously undefined if either or both contained an above-Unicode code +point, such as 0x110000. Now all such code points will collate the same +as the highest Unicode code point, U+10FFFF. [L] + +=item * + +In regexes, the contents of C<\g{...}> backreferences are now properly +validated. Previously, C<\g{1 FOO}> was silently parsed as C<\g{1}>, ignoring +everything after the first number. +[L] + +=item * + +A run-time pattern which contained a code block which recursed back to the +same bit of code which ran that match, could cause a crash. +[L] + +For example: + + my $r = qr/... (?{ foo() if ... }) .../; + sub foo { $string =~ $r } + foo() + +=item * + +In some cases an C would not add integer parts to the source +lines saved by the debugger. [L] + +=item * + +In debugging mode, perl saves source lines from all files +(plus an indication of whether each line is breakable) +for use by the debugger. The internal storage format has been +optimized to use less memory. +This should save 24 bytes per stored line for 64-bit +systems, more for C<-Duselongdouble> or C<-Dusequadmath> builds. +Discussed in [L]. + +=item * + +Ensure cloning the save stack for fork emulation doesn't duplicate +freeing the RExC state. [L] + +=item * + +Smartmatch against a code reference that uses a loop exit such as +C would crash perl. [L] + +=item * + +Class initializers and C blocks, per L, that +called C or other loop exits would crash perl. Same cause as +for [L]. + +=item * + +Exceptions thrown and caught entirely within a C or C +block no longer stop the outer run-loop. + +Code such as the following would stop running the contents of the C +block once the inner exception in the inner C/C block was caught. +This has now been fixed, and runs as expected. ([L]). + + defer { + try { die "It breaks\n"; } + catch ($e) { warn $e } + + say "This line would never run"; + } + +=item * + +L now clears the error flag if an error occurs when +reading and that error is C or C. This allows +code that depended on C to clear all errors to ignore +these relatively harmless errors. [L] + +=item * + +L|perlfunc/open> automatically creates an anonymous temporary file +when passed C as a filename: + + open(my $fh, "+>", undef) or die ... + +This is supposed to work only when the undefined value is the one returned by +the C function. + +In perls before 5.41.3, this caused a problem due to the fact that the same +undefined value can be generated by lookups of non-existent hash keys or array +elements, which can lead to bugs in user-level code (reported as [L]). + +In 5.41.3, additional checks based on the syntax tree of the call site were +added, which fixed this issue for some number of common cases, though not all +of them, at the cost of breaking the ability of APIs that wrap C to +expose its anonymous file mode. A notable example of such an API is autodie. + +This release reverts to the old problem in preference to the new one for the +time being. + +=back + +=head1 Obituaries + +=head2 Abe Timmerman + +Abe Timmerman (ABELTJE) passed away on August 15, 2024. + +Since 2002, Abe built and maintained the L project: "a +set of scripts and modules that try to run the Perl core tests on as +many configurations as possible and combine the results into an easy to +read report". Smoking Perl on as many platforms and configurations as +possible has been instrumental in finding bugs and developing patches +for those bugs. + +Abe was a regular attendee of the Perl Toolchain Summit (née Perl QA +Hackathon), the Dutch Perl Workshop and the Amsterdam.pm user group +meetings. With his kindness, his smile and his laugh, he helped make +Perl and its community better. + +Abeltje's memorial card said "Grab every opportunity to have a drink of +bubbly. This is an opportunity". We'll miss you Abe, and we'll have a +drink of bubbly in your honor. + +=head2 Andrew Main + +Andrew Main (ZEFRAM) passed away on March 10, 2025. + +Zefram was a brilliant person, seemingly knowledgeable in everything +and happy to impart his knowledge and share his striking insights with a +gentle, technical demeanor that often failed to convey the genuine care +with which he communicated. + +It would be impossible to overstate the impact that Zefram has had on +both the language and culture of Perl over the years. From his countless +contributions to the code-base, to his often quirky but always distinctive +appearances at conferences and gatherings, his influence and memory are +sure to endure long into the future. + +Zefram wished to have no designated memorial location in +meatspace. His designated memorial location in cyberspace is +L. + +=head1 Acknowledgements + +Perl 5.42.0 represents approximately 13 months of development since Perl +5.40.0 and contains approximately 280,000 lines of changes across 1,600 +files from 65 authors. + +Excluding auto-generated files, documentation and release tools, there were +approximately 94,000 lines of changes to 860 .pm, .t, .c and .h files. + +Perl continues to flourish into its fourth decade thanks to a vibrant +community of users and developers. The following people are known to have +contributed the improvements that became Perl 5.42.0: + +Aaron Dill, Andrei Horodniceanu, Andrew Ruthven, Antanas Vaitkus, Aristotle +Pagaltzis, Branislav Zahradník, brian d foy, Chad Granum, Chris 'BinGOs' +Williams, Craig A. Berry, Dabrien 'Dabe' Murphy, Dagfinn Ilmari Mannsåker, +Dan Book, Daniel Dragan, Dan Jacobson, David Cantrell, David Mitchell, E. +Choroba, Ed J, Ed Sabol, Elvin Aslanov, Eric Herman, Erik Huelsmann, Gianni +Ceccarelli, Graham Knop, hbmaclean, H.Merijn Brand, iabyn, James E Keenan, +James Raspass, Johan Vromans, Karen Etheridge, Karl Williamson, Leon +Timmermans, Lukas Mai, Marek Rouchal, Marin Tsanov, Mark Fowler, Masahiro +Honma, Max Maischein, Paul Evans, Paul Johnson, Paul Marquess, Peter +Eisentraut, Peter John Acklam, Philippe Bruhat (BooK), pyrrhlin, Reini +Urban, Richard Leach, Robert Rothenberg, Robin Ragged, Russ Allbery, Scott +Baker, Sergei Zhmylev, Sevan Janiyan, Sisyphus, Štěpán Němec, Steve Hay, +TAKAI Kousuke, Thibault Duponchelle, Todd Rinaldo, Tony Cook, Unicode +Consortium, Vladimír Marek, Yves Orton. + +The list above is almost certainly incomplete as it is automatically +generated from version control history. In particular, it does not include +the names of the (very much appreciated) contributors who reported issues to +the Perl bug tracker. + +Many of the changes included in this version originated in the CPAN modules +included in Perl's core. We're grateful to the entire CPAN community for +helping Perl to flourish. + +For a more complete list of all of Perl's historical contributors, please +see the F file in the Perl source distribution. + +=head1 Reporting Bugs + +If you find what you think is a bug, you might check the perl bug database +at L. There may also be information at +L, the Perl Home Page. + +If you believe you have an unreported bug, please open an issue at +L. Be sure to trim your bug down to a +tiny but sufficient test case. + +If the bug you are reporting has security implications which make it +inappropriate to send to a public issue tracker, then see +L +for details of how to report the issue. + +=head1 Give Thanks + +If you wish to thank the Perl 5 Porters for the work we had done in Perl 5, +you can do so by running the C program: + + perlthanks + +This will send an email to the Perl 5 Porters list with your show of thanks. + +=head1 SEE ALSO + +The F file for an explanation of how to view exhaustive details on +what changed. + +The F file for how to build Perl. + +The F file for general stuff. + +The F and F files for copyright information. + +=cut Index: gnu/usr.bin/perl/pod/perl5421delta.pod =================================================================== RCS file: gnu/usr.bin/perl/pod/perl5421delta.pod diff -N gnu/usr.bin/perl/pod/perl5421delta.pod --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ gnu/usr.bin/perl/pod/perl5421delta.pod 29 Mar 2026 16:31:45 -0000 @@ -0,0 +1,209 @@ +=encoding utf8 + +=head1 NAME + +perl5421delta - what is new for perl v5.42.1 + +=head1 DESCRIPTION + +This document describes differences between the 5.42.0 release and the 5.42.1 +release. + +If you are upgrading from an earlier release such as 5.40.0, first read +L, which describes differences between 5.40.0 and 5.42.0. + +=head1 Incompatible Changes + +There are no changes intentionally incompatible with Perl 5.42.0. If any +exist, they are bugs, and we request that you submit a report. See +L below. + +=head1 Modules and Pragmata + +=head2 Updated Modules and Pragmata + +=over 4 + +=item * + +L has been upgraded from version 5.20250702 to 5.20260308. + +=item * + +L has been upgraded from version 2.23 to 2.23_01. + +=back + +=head1 Documentation + +=head2 Changes to Existing Documentation + +We have attempted to update the documentation to reflect the changes listed in +this document. If you find any we have missed, open an issue at +L. + +=head1 Configuration and Compilation + +=over 4 + +=item * + +It is now possible to pass to F the values dealing with POSIX locale +categories, overriding its automatic calculation of these. This enables +cross-compilation to work. The easiest way to do this is to extract the C +program that does the calculation from F and then run it on the +target machine, and then pass the values it outputs to F on the +other machine. F has examples. +[L] + +=back + +=head1 Testing + +Tests were added and changed to reflect the other additions and changes in this +release. + +=head1 Platform Support + +=head2 Platform-Specific Notes + +=over 4 + +=item AIX + +Thread-safe locale handling has been turned off on all releases due to +apparent bugs in the underlying operating system support. +[L] + +=item Win32 + +Fix builds with C defined but C not defined. + +=back + +=head1 Selected Bug Fixes + +=over 4 + +=item * + +S> now turns on S> for the +remainder of the line (besides subsequent lines). +[L] + +=item * + +Perl 5.42.0 does not handle the transition to/from daylight savings time +properly. The time and/or timezone can be off by an hour in the intervals +surrounding such transitions. This is a regression from earlier releases, and +is now fixed. This bug was evident from perl space in the L +function, and in XS code with any of L, +L, or L. +[L] + +=item * + +Certain constructs involving a two-variable C loop would crash the perl +compiler in Perl 5.42.0: + + # Two-variable for loop over a list returned from a method call: + for my ($x, $y) (Some::Class->foo()) { ... } + for my ($x, $y) ($object->foo()) { ... } + +and + + # Two-variable for loop over a list returned from a call to a + # lexical(ly imported) subroutine, all inside a lexically scoped + # or anonymous subroutine: + my sub foo { ... } + my $fn = sub { + for my ($x, $y) (foo()) { ... } + }; + + use builtin qw(indexed); # lexical import! + my sub bar { + for my ($x, $y) (indexed(...)) { ... } + } + +These have been fixed. +[L] + +=item * + +Since Perl 5.32.0, the second branch of a ternary condition operator wasn't +getting the correct autovivification context applied. For example in something +like + + @{ $cond ? $h{foo} : $h{bar} } = ...; + +the first branch would correctly autovivify C<$h{foo}> to an array ref, but the +second branch might incorrectly autovivify C<$h{bar}> to a hash ref. +[L]. + +=back + +=head1 Acknowledgements + +Perl 5.42.1 represents approximately 8 months of development since Perl 5.42.0 +and contains approximately 7,200 lines of changes across 55 files from 12 +authors. + +Excluding auto-generated files, documentation and release tools, there were +approximately 1,700 lines of changes to 16 .pm, .t, .c and .h files. + +Perl continues to flourish into its fourth decade thanks to a vibrant community +of users and developers. The following people are known to have contributed +the improvements that became Perl 5.42.1: + +David Mitchell, Eric Herman, Karen Etheridge, Karl Williamson, Lukas Mai, Max +Maischein, Philippe Bruhat (BooK), Richard Leach, Steve Hay, Thibault +Duponchelle, Tony Cook, Yitzchak Scott-Thoennes. + +The list above is almost certainly incomplete as it is automatically generated +from version control history. In particular, it does not include the names of +the (very much appreciated) contributors who reported issues to the Perl bug +tracker. + +Many of the changes included in this version originated in the CPAN modules +included in Perl's core. We're grateful to the entire CPAN community for +helping Perl to flourish. + +For a more complete list of all of Perl's historical contributors, please see +the F file in the Perl source distribution. + +=head1 Reporting Bugs + +If you find what you think is a bug, you might check the perl bug database at +L. There may also be information at +L, the Perl Home Page. + +If you believe you have an unreported bug, please open an issue at +L. Be sure to trim your bug down to a +tiny but sufficient test case. + +If the bug you are reporting has security implications which make it +inappropriate to send to a public issue tracker, then see +L for details of how to +report the issue. + +=head1 Give Thanks + +If you wish to thank the Perl 5 Porters for the work we had done in Perl 5, you +can do so by running the C program: + + perlthanks + +This will send an email to the Perl 5 Porters list with your show of thanks. + +=head1 SEE ALSO + +The F file for an explanation of how to view exhaustive details on +what changed. + +The F file for how to build Perl. + +The F file for general stuff. + +The F and F files for copyright information. + +=cut Index: gnu/usr.bin/perl/pod/perldelta.pod =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/pod/perldelta.pod,v diff -u -p -a -u -p -r1.29 perldelta.pod --- gnu/usr.bin/perl/pod/perldelta.pod 26 Dec 2025 22:14:21 -0000 1.29 +++ gnu/usr.bin/perl/pod/perldelta.pod 29 Mar 2026 16:31:45 -0000 @@ -2,318 +2,35 @@ =head1 NAME -perldelta - what is new for perl v5.42.0 +perldelta - what is new for perl v5.42.2 =head1 DESCRIPTION -This document describes differences between the 5.42.0 release and the 5.40.0 +This document describes differences between the 5.42.1 release and the 5.42.2 release. -=head1 Core Enhancements - -=head2 More CORE:: subs - -C has been added as a subroutine to the C namespace. - -Previously, code like C<&CORE::chdir($dir)> or C<< my $ref = \&CORE::chdir; -$ref->($dir) >> would throw an error saying C<&CORE::chdir cannot be called -directly>. These cases are now fully supported. - -=head2 New pragma C> - -This allows you to declare that the portion of a program for the -remainder of the lexical scope of this pragma is encoded either entirely -in ASCII (for S>) or if UTF-8 is allowed -as well (for S>). No other encodings are -accepted. The second form is entirely equivalent to S>, and -may be used interchangeably with that. - -The purpose of this pragma is to catch cases early where you forgot to -specify S>. - -S> is automatically enabled within the -lexical scope of a S> or higher. - -S> turns off all this checking for the remainder of -its lexical scope. The meaning of non-ASCII characters is then undefined. - -=head2 New C<:writer> attribute on field variables - -Classes defined using C are now able to automatically -create writer accessors for scalar fields, by using the C<:writer> attribute, -similar to the way that C<:reader> already creates reader accessors. - - class Point { - field $x :reader :writer :param; - field $y :reader :writer :param; - } - - my $p = Point->new( x => 20, y => 40 ); - $p->set_x(60); - -=head2 New C and C operators - -Two new experimental features have been added, which introduce the -list-processing operators C and C. - - use v5.42; - use feature 'keyword_all'; - no warnings 'experimental::keyword_all'; - - my @numbers = ... - - if ( all { $_ % 2 == 0 } @numbers ) { - say "All the numbers are even"; - } - -These keywords operate similarly to C except that they only -ever return true or false, testing if any (or all) of the elements in -the list make the testing block yield true. Because of this they can -short-circuit, avoiding the need to test any further elements if a given -element determines the eventual result. - -These are inspired by the same-named functions in the L module, -except that they are implemented as direct core operators, and thus perform -faster, and do not produce an additional subroutine call stack frame for -invoking the code block. - -The feature flags enabling those keywords have been named -L|feature/"The 'keyword_any' feature"> -and L|feature/"The 'keyword_all' feature"> -to avoid confusion with the ability of the C module -to refer to all of its features by using the C<:all> -export tag. [L] - -The related experimental warning flags are consequently named -C and C. - -=head2 Apostrophe as a global name separator can be disabled - -This was deprecated in Perl 5.38 and removed as scheduled in perl -5.41.3, but after some discussion has been reinstated by default. - -This can be controlled with the C -feature which is enabled by default, but is disabled from the 5.41 -feature bundle onwards. - -If you want to disable use within your own code you can explicitly -disable the feature: - - no feature "apostrophe_as_package_separator"; - -Note that disabling this feature only prevents use of apostrophe as a -package separator within code; symbolic references still treat C<'> as -C<::> with the feature disabled: - - my $symref = "My'Module'Var"; - # default features - my $x = $My'Module'Var; # fine - no feature "apostrophe_as_package_separator"; - no strict "refs"; - my $y = $$symref; # like $My::Module::Var - my $z = $My'Module'Var; # syntax error - -[L] - -=head2 Lexical method declaration using C - -Like C since Perl version 5.18, C can now be prefixed with the -C keyword. This declares a subroutine that has lexical, rather than -package visibility. See L for more detail. - -=head2 Lexical method invocation operator C<< ->& >> - -Along with the ability to declare methods lexically, this release also permits -invoking a lexical subroutine as if it were a method, bypassing the usual -name-based method resolution. - -Combined with lexical method declaration, these two new abilities create the -effect of having private methods. - -=head2 Switch and Smart Match operator kept, behind a feature - -The "switch" feature and the smartmatch operator, C<~~>, were introduced in -v5.10. Their behavior was significantly changed in v5.10.1. When the -"experiment" system was added in v5.18.0, switch and smartmatch were -retroactively declared experimental. Over the years, proposals to fix or -supplement the features have come and gone. - -They were deprecated in Perl v5.38.0 and scheduled for removal in -Perl v5.42.0. After extensive discussion their removal has been indefinitely -postponed. Using them no longer produces a deprecation warning. - -Switch itself still requires the C feature, which is enabled -by default for feature bundles from v5.9.5 through to v5.34. Switch -remains disabled in feature bundles 5.35 and later, but can be -separately enabled: - - # no switch here - use v5.10; - # switch here - use v5.36; - # no switch here - use feature "switch"; - # switch here - -Smart match now requires the C feature, which is enabled -by default and included in all feature bundles up to 5.40. It is -disabled for the 5.41 feature bundle and later, but can be separately -enabled: - - # smartmatch here - use v5.41; - # no smartmatch here - use feature "smartmatch"; - # smartmatch here - -[L] - -=head2 Unicode 16.0 supported - -Perl now supports Unicode 16.0 -L including the changes -introduced in 15.1 L. - -=head2 Assigning logical xor C<^^=> operator - -Perl 5.40.0 introduced the logical medium-precedence exclusive-or operator -C<^^>. It was not noticed at the time that the assigning variant C<^^=> was -also missing. This is now added. +If you are upgrading from an earlier release such as 5.42.0, first read +L, which describes differences between 5.42.0 and 5.42.1. =head1 Security -=head2 [CVE-2024-56406] Heap buffer overflow vulnerability with tr// - -A heap buffer overflow vulnerability was discovered in Perl. - -When there are non-ASCII bytes in the left-hand-side of the C operator, -C can overflow the destination pointer C. +=head2 [CVE-2026-4176] Vulnerability in Compress::Raw::Zlib - $ perl -e '$_ = "\x{FF}" x 1000000; tr/\xFF/\x{100}/;' - Segmentation fault (core dumped) +L is included in Perl as a dual-life core module, and was +vulnerable to [L] +due to a vendored version of zlib which had several vulnerabilities, including +[L]. + +This problem was assigned +[L] by the +L. -It is believed that this vulnerability can enable Denial of Service or -Arbitrary Code Execution attacks on platforms that lack sufficient defenses. - -This problem was discovered by Nathan Mills and assigned -[L] -by the L. - -The patch to fix this issue (L<87f42aa0e0096e9a346c9672aa3a0bd3bef8c1dd|https://github.com/Perl/perl5/commit/87f42aa0e0096e9a346c9672aa3a0bd3bef8c1dd>) is applicable to all perls that are vulnerable, including those -out-of-support. - -=head2 [CVE-2025-40909] Perl threads have a working directory race condition where file operations may target unintended paths - -Perl thread cloning had a working directory race condition where file -operations may target unintended paths. Perl 5.42 will no longer chdir -to each handle. - -This problem was discovered by Vincent Lefèvre via [L] -and assigned [L] -by the L. - -Fixes were provided via [L] -and [L]. =head1 Incompatible Changes -=head2 Removed containing function references for functions without eval - -Perl 5.40 reintroduced unconditional references from functions to their -containing functions to fix a bug introduced in Perl 5.18 that broke the -special behaviour of C in package C which is used by the -debugger. - -In some cases this change led to circular reference chains between closures and -other existing references, resulting in memory leaks. - -This change has been reverted, fixing -[L] but re-breaking -[L]. - -This means the reference loops won't occur, and that lexical variables and -functions from enclosing functions may not be visible in the debugger. - -Note that calling C in a function unconditionally causes a function -to reference its enclosing functions as it always has. - -=head1 Performance Enhancements - -=over 4 - -=item * - -Constant-folded strings are now shareable via the Copy-on-Write mechanism. -[L] - -The following code would previously have allocated eleven string buffers, -each containing one million "A"s: - - my @scalars; push @scalars, ("A" x 1_000_000) for 0..9; - -Now a single buffer is allocated and shared between a CONST OP and -the ten scalar elements of C<@scalars>. - -Note that any code using this sort of constant to simulate memory leaks -(perhaps in test files) must now permute the string in order to trigger -a string copy and the allocation of separate buffers. For example, -C<("A" x 1_000_000).time> might be a suitable small change. - -=item * - -C now runs at the same speed regardless of the internal -representation of its operand, as long as the only characters being -translated are ASCII-range, for example C. Previously, if -the internal encoding was UTF-8, a slower, more general implementation -was used. - -=item * - -Code that uses the C function from the L module to generate -a list of index/value pairs out of an array or list which is then passed into -a two-variable C list to unpack those again is now optimised to be -more efficient. - - my @array = (...); - - foreach my ($idx, $val) (builtin::indexed @array) { - ... - } - -Z<> - - foreach my ($idx, $val) (builtin::indexed LIST...) { - ... - } - -In particular, a temporary list twice the size of the original is no longer -generated. Instead, the loop iterates down the original array or list -in-place directly, in the same way that C or -C would do. - -=item * - -The peephole optimizer recognises the following zero-offset C patterns -and swaps in a new dedicated operator (C). -[L] - - substr($x, 0, ...) - substr($x, 0, ..., '') - -=item * - -The stringification of integers by L and L, -when coming from an C, is now more efficient. -[L] - -=item * - -String reversal from a single argument, when the string buffer is not -"swiped", is now done in a single pass and is noticeably faster. -The extent of the improvement is compiler & hardware dependent. -[L] - -=back +There are no changes intentionally incompatible with 5.42.1. If any exist, +they are bugs, and we request that you submit a report. See L +below. =head1 Modules and Pragmata @@ -323,1220 +40,73 @@ The extent of the improvement is compile =item * -L has been upgraded from version 3.02_001 to 3.04. - -=item * - -L has been upgraded from version 1.76 to 1.85. - -=item * - -L has been upgraded from version 1.25 to 1.27. - -=item * - -L has been upgraded from version 0.014 to 0.019. - -=item * - -L has been upgraded from version 2.212 to 2.213. - -=item * - -L has been upgraded from version 2.212 to 2.213. - -=item * - -L has been upgraded from version 0.36 to 0.38. - -=item * - -L has been upgraded from version 2.36 to 2.38. - -=item * - -L has been upgraded from version 0.018 to 0.020. - -=item * - -L has been upgraded from version 2.189 to 2.192. - -=item * - -L has been upgraded from version 1.08 to 1.09. - -=item * - -L has been upgraded from version 0.06 to 0.07. - -=item * - -L has been upgraded from version 1.34 to 1.36. - -=item * - -L has been upgraded from version 3.72 to 3.73. - -=item * - -L has been upgraded from version 2.58_01 to 2.59. - -=item * - -L has been upgraded from version 1.56 to 1.57. - -=item * - -L has been upgraded from version 0.032 to 0.035. - -=item * - -L has been upgraded from version 5.78 to 5.79. - -=item * - -L has been upgraded from version 0.280240 to 0.280242. - -=item * - -L has been upgraded from version 7.70 to 7.76. - -=item * - -L has been upgraded from version 3.51 to 3.57. - -=item * - -L has been upgraded from version 3.51 to 3.57. - -=item * - -L has been upgraded from version 1.18 to 1.20. - -=item * - -L has been upgraded from version 1.89 to 1.97. - -=item * - -L has been upgraded from version 2.25 to 2.27. - -=item * - -L has been upgraded from version 3.90 to 3.94. - -=item * - -L has been upgraded from version 2.57 to 2.58. - -=item * - -L has been upgraded from version 0.088 to 0.090. - -=item * - -L has been upgraded from version 2.212 to 2.213. - -=item * - -L has been upgraded from version 0.42 to 0.43. - -=item * - -L has been upgraded from version 1.22 to 1.24. - -=item * - -L has been upgraded from version 1.12 to 1.13. - -=item * - -L has been upgraded from version 2.003002 to 2.005002. - -=item * - -L has been upgraded from version 0.5018 to 0.5020. - -=item * - -L has been upgraded from version 1.62 to 1.63. - -=item * - -L has been upgraded from version 1.16 to 1.17. +L has been upgraded from version 2.213 to 2.222. =item * -L has been upgraded from version 5.20240609 to 5.20250702. +L has been upgraded from version 5.20260308 to 5.20260329_42. -=item * - -L has been upgraded from version 1.17 to 1.18. - -=item * - -L has been upgraded from version 1.18 to 1.20. - -=item * - -L has been upgraded from version 1.65 to 1.69. - -=item * - -L has been upgraded from version 1.37 to 1.40. - -=item * - -L has been upgraded from version 0.241 to 0.244. - -=item * - -L has been upgraded from version 5.20240218 to 5.20250619. - -=item * - -L has been upgraded from version 2.03 to 2.05. - -=item * - -L has been upgraded from version 5.01_02 to v6.0.2. - -=item * - -L has been upgraded from version 2.20 to 2.23. - -=item * - -L has been upgraded from version 0.47 to 0.48. - -=item * - -L has been upgraded from version 2.46 to 2.47. - -=item * - -L has been upgraded from version 1.63 to 1.68_01. - -=item * - -L has been upgraded from version 1.07 to 1.08. - -=item * - -L has been upgraded from version 1.27 to 1.28. - -=item * - -L has been upgraded from version 2.05 to 2.06. - -=item * - -L has been upgraded from version 3.32 to 3.37. - -=item * - -L has been upgraded from version 1.13 to 1.14. - -=item * - -L has been upgraded from version 0.018 to 0.024. - -=item * - -L has been upgraded from version 3.48 to 3.50. - -=item * +=back -L has been upgraded from version 1.302199 to 1.302210. +=head1 Documentation -=item * +=head2 Changes to Existing Documentation -L has been upgraded from version 3.05 to 3.06. +We have attempted to update the documentation to reflect the changes listed in +this document. If you find any we have missed, open an issue at +L. -=item * +=head1 Testing -L has been upgraded from version 2.40 to 2.43. - -=item * - -L has been upgraded from version 1.69 to 1.70. - -=item * - -L has been upgraded from version 1.09 to 1.10. - -=item * - -L has been upgraded from version 1.40 to 1.41. - -=item * - -L has been upgraded from version 1.9777 to 1.9778. - -=item * - -L has been upgraded from version 1.3401_01 to 1.36. - -=item * - -L has been upgraded from version 0.78 to 0.81. - -=item * - -L has been upgraded from version 1.25 to 1.27. - -=item * - -L has been upgraded from version 0.9930 to 0.9933. - -=item * - -L has been upgraded from version 1.13 to 1.15. - -=item * - -L has been upgraded from version 1.69 to 1.74. - -=item * - -L has been upgraded from version 0.59 to 0.59_01. - -=item * - -L has been upgraded from version 1.36 to 1.43. - -=back - -=head1 Documentation - -=head2 Changes to Existing Documentation - -We have attempted to update the documentation to reflect the changes -listed in this document. If you find any we have missed, open an issue -at L. - -Additionally, the following selected changes have been made: - -=head3 L - -=over 4 - -=item * - -Combined the documentation for several groups of related functions -into single entries. - -=item * - -All forms of C are now documented together. - -=item * - -C is now documented with C and additional notes added. -The long C forms are now listed when available. - -=back - -=head3 L - -=over 4 - -=item * - -Binary and octal floating-point constants (such as C<012.345p-2> and -C<0b101.11p-1>) are now documented. This feature was first introduced in perl -5.22.0 together with hexadecimal floating-point constants and had a few bug -fixes in perl 5.28.0, but it was never formally documented. -[L] - -=back - -=head3 L - -=over 4 - -=item * - -Clarified the description of C and C in relation -to built-in types and class names. - -=item * - -Clarified that perl C is stable (and has been since v5.8.0). - -=item * - -The recommended alternatives to the C function were updated to modern modules -recommended by the L. -[L] - -=back - -=head3 L - -=over 4 - -=item * - -The list of Steering Council and Core Team members have been updated, following the conclusion of -the latest election on 2024-07-17. - -=back - -=head3 L - -=over 4 - -=item * - -Added some description of "real" Cs compared to "fake" Cs. - -=item * - -Documentation was updated to reflect that mixing C, C, and -C vs C, C, and C are not allowed, and mixing -pointers between the 2 classes of APIs is not allowed. Updates made in -L and L. - -=item * - -Additional caveats have been added to the description of C. - -=back - -=head3 L - -=over 4 - -=item * - -Portions of perlop are supposed to be ordered so that all the operators -wth the same precedence are in a single section, and the sections are -ordered so that the highest precedence operators appear first. -This ordering has now been restored. Other reorganization was done to -improve clarity, with more basic operations described before ones that -depend on them. - -=item * - -The documentation for here-docs has been cleaned up and reorganized. -Indented here-docs were formerly documented separately, now the two -types have interwoven documentation which is more compact, and easier to -understand. - -=item * - -The documentation of the C operator has been expanded. - -=item * - -Outdated advice about using relational string operators in UTF-8 locales -has been removed. Use L for the best results, but -these operators will give adequate results on many platforms. - -=item * - -Normalized alignment of verbatim sections, fixing how they are displayed by -some Pod viewers that strip indentation. - -=back - -=head3 L - -=over 4 - -=item * - -Entries for C<$#> and C<$*> have been amended to note that use of them result in a compilation -error, not a warning. - -=back - -=head1 Diagnostics - -The following additions or changes have been made to diagnostic output, -including warnings and fatal error messages. For the complete list of -diagnostic messages, see L. - -=head2 New Diagnostics - -=head3 New Errors - -=over 4 - -=item * - -L - -(F) This pragma forbids non-ASCII characters within its scope. - -=item * - -L - -(F) The subroutine indicated hasn't been defined, or if it was, it has -since been undefined. - -This error could also indicate a mistyped package separator, when a -single colon was typed instead of two colons. For example, C -would be parsed as the label C followed by an unqualified function -name: C. [L] - -=back - -=head3 New Warnings - -=over 4 - -=item * - -L<__CLASS__ is experimental|perldiag/"__CLASS__ is experimental"> - -(S experimental::class) This warning is emitted if you use the C<__CLASS__> -keyword of C. This keyword is currently -experimental and its behaviour may change in future releases of Perl. - -=item * - -L<%s() attempted on handle %s opened with open()|perldiag/"%s() attempted on handle %s opened with open()"> - -(W io) You called readdir(), telldir(), seekdir(), rewinddir() or -closedir() on a handle that was opened with open(). If you want to -use these functions to traverse the contents of a directory, you need -to open the handle with opendir(). - -[L] - -=item * - -L - -(W precedence) You wrote something like - - !$x < $y # parsed as: (!$x) < $y - !$x eq $y # parsed as: (!$x) eq $y - !$x =~ /regex/ # parsed as: (!$x) =~ /regex/ - !$obj isa Some::Class # parsed as: (!$obj) isa Some::Class - -but because C has higher precedence than comparison operators, C<=~>, and -C, this is interpreted as comparing/matching the logical negation of the -first operand, instead of negating the result of the comparison/match. - -To disambiguate, either use a negated comparison/binding operator: - - $x >= $y - $x ne $y - $x !~ /regex/ - -... or parentheses: - - !($x < $y) - !($x eq $y) - !($x =~ /regex/) - !($obj isa Some::Class) - -... or the low-precedence C operator: - - not $x < $y - not $x eq $y - not $x =~ /regex/ - not $obj isa Some::Class - -(If you did mean to compare the boolean result of negating the first operand, -parenthesize as C<< (!$x) < $y >>, C<< (!$x) eq $y >>, etc.) - -Note: this warning does not trigger for code like C, -i.e. where double negation (C) is used as a convert-to-boolean operator. - -=back - -=head2 Changes to Existing Diagnostics - -=over 4 - -=item * - -L<%s() attempted on invalid dirhandle %s|perldiag/"%s() attempted on invalid dirhandle %s"> - -This was consolidated from separate messages for readdir(), telldir(), -seekdir(), rewinddir() and closedir() as part of refactoring for -[L]. - -=item * - -L - -This warning now triggers for use of a chained comparison like C<< 0 < $x < 1 >>. -[L] - -=item * - -L - -Prevent this warning when accessing a function parameter in C<@_> that -is an lvalue reference to an untied hash element where the key was -undefined. This warning is still produced at the point of call. -[L] - -=back - -=head1 Utility Changes - -=head2 F - -=over 4 - -=item * - -Separate installation (without overwriting installed modules) is now the default. - -=item * - -Documentation is significantly enhanced. - -=back - -=head1 Configuration and Compilation - -=over 4 - -=item * - -Fix compilation on platforms (e.g. "Gentoo Prefix") with only a C locale [L] -Bug first reported downstream L - -=item * - -The (mostly undocumented) configuration macro C has been -removed. When enabled (e.g. with C<./Configure -A ccflags=-DPERL_STRICT_CR>), -it would make the perl parser throw a fatal error when it encountered a CR -(carriage return) character in source files. The default (and now only) -behavior of the perl parser is to strip CRs paired with newline characters and -otherwise treat them as whitespace. - -(C was originally introduced in perl 5.005 to optionally -restore backward compatibility with perl 5.004, which had made CR in source -files an error. Before that, CR was accepted, but retained literally in quoted -multi-line constructs such as here-documents, even at the end of a line.) - -=item * - -Similarly, the (even less documented) configuration macro C has -been removed. When enabled, it would install a default source filter to strip -carriage returns from source code before the parser proper got to see it. - -=back - -=head1 Testing - -Tests were added and changed to reflect the other additions and -changes in this release. Furthermore, these significant changes were -made: - -=over 4 - -=item * - -A new F test script was added as a place for TODO tests -for known unfixed bugs. Patches are welcome to add to this file. - -=item * - -Added testing of the perl headers against the C++ compiler -corresponding to the C compiler perl is being built with. -[L] - -=back - -=head1 Platform Support - -=head2 Platform-Specific Notes - -=over 4 - -=item arm64 Darwin - -Fix arm64 darwin hints when using use64bitall with Configure [L] - -=item Android - -Changes to F for Android [L] related to [L]. - -=item Cygwin - -F: fix several silly/terrible C errors. [L] - -Supply an explicit base address for C that cannot -conflict with those generated by C<--enable-auto-image-base>. [L][L] - -=item MacOS (Darwin) - -Collation of strings using locales on MacOS 15 (Darwin 24) and up has -been turned off due to a failed assertion in its libc. - -If earlier versions are also experiencing issues (such as failures in -F), you can explicitly disable locale collation by adding the -C<-Accflags=-DNO_LOCALE_COLLATE> option to your invocation of C<./Configure>, -or just C<-DNO_LOCALE_COLLATE> to the C and C -variables in F. - -=back - -=head1 Internal Changes - -=over 4 - -=item * - -The L> function is introduced. This is an -enhanced version of L>, which is retained for -backwards compatibility. Both are to call L when you have -the year, month, hour, etc. The new function handles UTF8ness for you, -and allows you to specify if you want the possibility of daylight -savings time to be considered. C never considers DST. - -=item * - -The C, C, and C -functions are no longer experimental. - -=item * - -Calls to L with the C flag -set also ensure the SV parameters constructed from the C -parameter are released before C returns. Previously they -were released on the next L. [L] - -=item * - -When built with the C<-DDEBUGGING> compile option, perl API functions that -take pointers to distinct types of SVs (AVs, HVs or CVs) will check the -C of the passed values to ensure they are valid. Additionally, -internal code within core functions that attempts to extract AVs, HVs or CVs -from reference values passed in will also perform such checks. - -While this has been entirely tested by normal Perl CI testing, there may -still be some corner-cases where these constraints are violated in -otherwise-valid calls. These may require further investigation if they are -found, and specific code to be adjusted to account for it. - -=item * - -The C function has been expanded to include additional information -about the recent C and C ops, as well as for -C and C which had not been done previously. - -=item * - -C now also has the facility to print extra debugging information -about custom operators, if those operators register a helper function via the -new C element of the C structure. For more information, see the -relevant additions to L. - -=item * - -New API functions are introduced to convert strings encoded in UTF-8 to -their ordinal code point equivalent. These are safe to use by default, -and generally more convenient to use than the existing ones. - -L> and L> replace -L> (which is retained for backwards -compatibility), but you should convert to use the new forms, as likely -you aren't using the old one safely. - -To convert in the opposite direction, you can now use -L>. This is not a new function, but a new synonym -for L>. It is added so you don't have to learn -two sets of names. - -There are also two new functions, L> and -L> which do the same thing except when -the input string represents a code point that Unicode doesn't accept as -legal for interchange, using either the strict original definition -(C), or the looser one given by -L -(C). When the input string represents one of the -restricted code points, these functions return the Unicode -C instead. - -Also L> is a synonym for C, for use -when you want to emphasize that the entire range of Perl extended UTF-8 -is acceptable. - -There are also replacement functions for the three more specialized -conversion functions that you are unlikely to need to use. Again, the -old forms are kept for backwards compatibility, but you should convert -to use the new forms. - -L> replaces L>. - -L> replaces L>. - -L> replaces -L>. - -Also added are the inverse functions L> -and L>, which are synonyms for the existing -functions, L> and -L> respectively. These are provided only -so you don't have to learn two sets of names. - -=item * - -Three new API functions are introduced to convert strings encoded in -UTF-8 to native bytes format (if possible). These are easier to use -than the existing ones, and they avoid unnecessary memory allocations. -The functions are L> which is used -when it is ok for the input string to be overwritten with the converted -result; and L> and -L> when the original string must be -preserved intact. C returns the result in a -temporary using L/C that will automatically be -destroyed. With C, you are responsible for -freeing the newly allocated memory that is returned if the conversion is -successful. - -The latter two functions are designed to replace -L> which creates memory unnecessarily, or -unnecessarily large. - -=item * - -New API functions L|perlapi/valid_identifier_pve>, -L|perlapi/valid_identifier_pvn> and -L|perlapi/valid_identifier_sv> have been added, which -test if a string would be considered by Perl to be a valid identifier name. - -=item * - -When assigning from an SVt_IV into a SVt_NV (or vice versa), providing that -both are "bodyless" types, Perl_sv_setsv_flags will now just change the -destination type to match the source type. Previously, an SVt_IV would have -been upgraded to a SVt_PVNV to store an NV, and an SVt_NV would have been -upgraded to a SVt_PVIV to store an IV. This change prevents the need to -allocate - and later free - the relevant body struct. - -=item * - -Two new API functions are introduced to convert strings encoded in -native bytes format to UTF-8. These return the string unchanged if its -UTF-8 representation is the same as the original. Otherwise, new memory -is allocated to contain the converted string. This is in contrast to -the existing L> which always allocates new -memory. The new functions are L> and -L>. -L> arranges for the new memory to -automatically be freed. With C, you are -responsible for freeing any newly allocated memory. - -=item * - -The way that subroutine signatures are parsed by the parser grammar has been -changed. - -Previously, when parsing individual signature parameters, the parser would -accumulate an C optree fragment for each parameter on the parser -stack, collecting them in an C sequence, before finally building the -complete argument handling optree itself, in a large action block defined -directly in F. - -In the new approach, all the optree generation is handled by newly-defined -functions in F which are called by the action blocks in the parser. -These do not keep state on the parser stack, but instead in a dedicated memory -structure referenced by the main C structure. This is intended to -be largely opaque to other code, and accessed only via the new functions. - -This new arrangement is intended to allow more flexible code generation and -additional features to be developed in the future. - -=item * - -Three new API functions have been added to interact with the regexp global -match position stored in an SV. These are C, -C and C. Using these -API functions avoids XS modules needing to know about or interact directly -with the way this position is currently stored, which involves the -C magic type. - -=item * - -New C API macro - -A new API macro has been added, which is used to obtain the second string -buffer out of a "vstring" SV, in a manner similar to the C macro which -obtains the regular string buffer out of a regular SV. - - STRLEN len; - const char *vstr_pv = SvVSTRING(sv, vstr_len); - -See L>. - -=back - -=head1 Selected Bug Fixes - -=over 4 - -=item * - -Fix null pointer dereference in S_SvREFCNT_dec [L]. - -=item * - -Fix feature 'class' Segmentation fault in DESTROY [L]. - -=item * - -C now returns real booleans (as its documentation describes), not -integers. This means the result of a failed C now stringifies to C<''>, -not C<'0'>. - -[L] - -=item * - -Compound assignment operators return lvalues that can be further modified: - - ($x &= $y) += $z; - # Equivalent to: - # $x &= $y; - # $x += $z; - -However, the separate numeric/string bitwise operators provided by L feature|feature/The 'bitwise' feature>, C<< &= ^= |= &.= ^.= |.= >>, -did not return such lvalues: - - use feature qw(bitwise); - ($x &= $y) += $z; - # Used to die: - # Can't modify numeric bitwise and (&) in addition (+) at ... - -This has been corrected. [L] - -=item * - -Starting in v5.39.8, L> would crash or produce odd errors -(such as C) when given a format -string that wasn't actually a string, but a number, C, or an object -(even one with overloaded string conversion). - -Now C stringifies its first argument, as before. -[L] - -Also, fix C [L]. - -=item * - -C and C now SvPV_force() the supplied -SV unless it is read only. This will remove CoW from the SV and -prevents code that writes through the generated pointer from modifying -the value of other SVs that happen the share the same CoWed string -buffer. - -Note: this does not make C safe, if the SV is magical -then any writes to the buffer will likely be discarded on the next -read. [L] - -=item * - -Enforce C for bareword file handles -that have strictness removed because they are used in open() with a -"dup" mode, such as in C<< open my $fh, ">&", THISHANDLE >>. [L] - -=item * - -Using C to tail call, or using the call_sv() and related APIs to -call, any of trim(), refaddr(), reftype(), ceil(), floor() or -stringify() in the C package would crash or assert due to a -C handling bug. [L] - -=item * - -Fix sv_gets() to accept a C append offset instead of C. -This prevents integer overflows when appending to a large C for -C aka C and C. -L - -=item * - -Fixed an issue where C failed to correctly identify -certain invalid UTF-8 sequences as invalid. Specifically, sequences -that start with continuation bytes or unassigned bytes could cause -unexpected behavior or a panic. This fix ensures that such invalid -sequences are now properly detected and handled. This correction -also resolves related issues in modules that handle UTF-8 processing, -such as C. - -=item * - -The perl parser would erroneously parse some POD directives -as if they were C<=cut>. Some other POD directives -whose names start with I, prematurely terminating an embedded POD section. -The following cases were affected: I followed by a digit (e.g. -C<=cut2studio>), I followed by an underscore (e.g. C<=cut_grass>), and in -string C, any identifier starting with I (e.g. C<=cute>). -[L] - -=item * - -Builds with C<-msse> and quadmath on 32-bit x86 systems would crash -with a misaligned access early in the build. [L] - -=item * - -On threaded builds on POSIX-like systems, if the perl signal handler -receives a signal, we now resend the signal to the main perl thread. Previously -this would crash. [L] - -=item * - -Declaring a lexically scoped array or hash using C within a subroutine -and then immediately returning no longer triggers a "Bizarre copy of HASH/ARRAY -in subroutine exit" error. [L] - -=item * - -C didn't properly clear C which could result in -out of date cached numeric versions of the value being used on a -second evaluation. Properly clear any cached values. [L] - -=item * - -L and L are no longer limited to 31-bit -values and can use all the available bits on a platform for their POS and -SIZE arguments. -[L] - -=item * - -L is now better behaved if VAR is not a plain string. If VAR -is a tied variable, it calls C once; previously, it would also call -C, but without using the result. If VAR is a reference, the referenced -entity has its refcount properly decremented when VAR is turned into a string; -previously, it would leak memory. -[L] - -=item * - -The C<$SIG{__DIE__}> and C<$SIG{__WARN__}> handlers can no longer be invoked -recursively, either deliberately or by accident, as described in -L. That is, when an exception (or warning) triggers a call to a -C<$SIG{__DIE__}> (or C<$SIG{__WARN__}>) handler, further exceptions (or -warnings) are processed directly, ignoring C<%SIG> until the original -C<$SIG{__DIE__}> (or C<$SIG{__WARN__}>) handler call returns. -[L], [L], [L] - -=item * - -The C for an object and C for the -object's stash weren't always NULL or not-NULL, confusing C -(and hence Devel::Peek's C) into crashing on an object with no -defined fields in some cases. [L] - -=item * - -When comparing strings when using a UTF-8 locale, the behavior was -previously undefined if either or both contained an above-Unicode code -point, such as 0x110000. Now all such code points will collate the same -as the highest Unicode code point, U+10FFFF. [L] - -=item * - -In regexes, the contents of C<\g{...}> backreferences are now properly -validated. Previously, C<\g{1 FOO}> was silently parsed as C<\g{1}>, ignoring -everything after the first number. -[L] - -=item * - -A run-time pattern which contained a code block which recursed back to the -same bit of code which ran that match, could cause a crash. -[L] - -For example: - - my $r = qr/... (?{ foo() if ... }) .../; - sub foo { $string =~ $r } - foo() - -=item * - -In some cases an C would not add integer parts to the source -lines saved by the debugger. [L] - -=item * - -In debugging mode, perl saves source lines from all files -(plus an indication of whether each line is breakable) -for use by the debugger. The internal storage format has been -optimized to use less memory. -This should save 24 bytes per stored line for 64-bit -systems, more for C<-Duselongdouble> or C<-Dusequadmath> builds. -Discussed in [L]. - -=item * - -Ensure cloning the save stack for fork emulation doesn't duplicate -freeing the RExC state. [L] - -=item * - -Smartmatch against a code reference that uses a loop exit such as -C would crash perl. [L] - -=item * - -Class initializers and C blocks, per L, that -called C or other loop exits would crash perl. Same cause as -for [L]. - -=item * - -Exceptions thrown and caught entirely within a C or C -block no longer stop the outer run-loop. - -Code such as the following would stop running the contents of the C -block once the inner exception in the inner C/C block was caught. -This has now been fixed, and runs as expected. ([L]). - - defer { - try { die "It breaks\n"; } - catch ($e) { warn $e } - - say "This line would never run"; - } - -=item * - -L now clears the error flag if an error occurs when -reading and that error is C or C. This allows -code that depended on C to clear all errors to ignore -these relatively harmless errors. [L] - -=item * - -L|perlfunc/open> automatically creates an anonymous temporary file -when passed C as a filename: - - open(my $fh, "+>", undef) or die ... - -This is supposed to work only when the undefined value is the one returned by -the C function. - -In perls before 5.41.3, this caused a problem due to the fact that the same -undefined value can be generated by lookups of non-existent hash keys or array -elements, which can lead to bugs in user-level code (reported as [L]). - -In 5.41.3, additional checks based on the syntax tree of the call site were -added, which fixed this issue for some number of common cases, though not all -of them, at the cost of breaking the ability of APIs that wrap C to -expose its anonymous file mode. A notable example of such an API is autodie. - -This release reverts to the old problem in preference to the new one for the -time being. - -=back - -=head1 Obituaries - -=head2 Abe Timmerman - -Abe Timmerman (ABELTJE) passed away on August 15, 2024. - -Since 2002, Abe built and maintained the L project: "a -set of scripts and modules that try to run the Perl core tests on as -many configurations as possible and combine the results into an easy to -read report". Smoking Perl on as many platforms and configurations as -possible has been instrumental in finding bugs and developing patches -for those bugs. - -Abe was a regular attendee of the Perl Toolchain Summit (née Perl QA -Hackathon), the Dutch Perl Workshop and the Amsterdam.pm user group -meetings. With his kindness, his smile and his laugh, he helped make -Perl and its community better. - -Abeltje's memorial card said "Grab every opportunity to have a drink of -bubbly. This is an opportunity". We'll miss you Abe, and we'll have a -drink of bubbly in your honor. - -=head2 Andrew Main - -Andrew Main (ZEFRAM) passed away on March 10, 2025. - -Zefram was a brilliant person, seemingly knowledgeable in everything -and happy to impart his knowledge and share his striking insights with a -gentle, technical demeanor that often failed to convey the genuine care -with which he communicated. - -It would be impossible to overstate the impact that Zefram has had on -both the language and culture of Perl over the years. From his countless -contributions to the code-base, to his often quirky but always distinctive -appearances at conferences and gatherings, his influence and memory are -sure to endure long into the future. - -Zefram wished to have no designated memorial location in -meatspace. His designated memorial location in cyberspace is -L. +Tests were added and changed to reflect the other additions and changes in this +release. =head1 Acknowledgements -Perl 5.42.0 represents approximately 13 months of development since Perl -5.40.0 and contains approximately 280,000 lines of changes across 1,600 -files from 65 authors. +Perl 5.42.2 represents approximately 3 weeks of development since Perl 5.42.1 +and contains approximately 2,900 lines of changes across 57 files from 6 +authors. Excluding auto-generated files, documentation and release tools, there were -approximately 94,000 lines of changes to 860 .pm, .t, .c and .h files. +approximately 1,900 lines of changes to 23 .pm, .t, .c and .h files. -Perl continues to flourish into its fourth decade thanks to a vibrant -community of users and developers. The following people are known to have -contributed the improvements that became Perl 5.42.0: - -Aaron Dill, Andrei Horodniceanu, Andrew Ruthven, Antanas Vaitkus, Aristotle -Pagaltzis, Branislav Zahradník, brian d foy, Chad Granum, Chris 'BinGOs' -Williams, Craig A. Berry, Dabrien 'Dabe' Murphy, Dagfinn Ilmari Mannsåker, -Dan Book, Daniel Dragan, Dan Jacobson, David Cantrell, David Mitchell, E. -Choroba, Ed J, Ed Sabol, Elvin Aslanov, Eric Herman, Erik Huelsmann, Gianni -Ceccarelli, Graham Knop, hbmaclean, H.Merijn Brand, iabyn, James E Keenan, -James Raspass, Johan Vromans, Karen Etheridge, Karl Williamson, Leon -Timmermans, Lukas Mai, Marek Rouchal, Marin Tsanov, Mark Fowler, Masahiro -Honma, Max Maischein, Paul Evans, Paul Johnson, Paul Marquess, Peter -Eisentraut, Peter John Acklam, Philippe Bruhat (BooK), pyrrhlin, Reini -Urban, Richard Leach, Robert Rothenberg, Robin Ragged, Russ Allbery, Scott -Baker, Sergei Zhmylev, Sevan Janiyan, Sisyphus, Štěpán Němec, Steve Hay, -TAKAI Kousuke, Thibault Duponchelle, Todd Rinaldo, Tony Cook, Unicode -Consortium, Vladimír Marek, Yves Orton. - -The list above is almost certainly incomplete as it is automatically -generated from version control history. In particular, it does not include -the names of the (very much appreciated) contributors who reported issues to -the Perl bug tracker. +Perl continues to flourish into its fourth decade thanks to a vibrant community +of users and developers. The following people are known to have contributed +the improvements that became Perl 5.42.2: + +Eric Herman, James E Keenan, Olaf Alders, Paul Marquess, Richard Leach, Steve +Hay. + +The list above is almost certainly incomplete as it is automatically generated +from version control history. In particular, it does not include the names of +the (very much appreciated) contributors who reported issues to the Perl bug +tracker. Many of the changes included in this version originated in the CPAN modules included in Perl's core. We're grateful to the entire CPAN community for helping Perl to flourish. -For a more complete list of all of Perl's historical contributors, please -see the F file in the Perl source distribution. +For a more complete list of all of Perl's historical contributors, please see +the F file in the Perl source distribution. =head1 Reporting Bugs -If you find what you think is a bug, you might check the perl bug database -at L. There may also be information at +If you find what you think is a bug, you might check the perl bug database at +L. There may also be information at L, the Perl Home Page. If you believe you have an unreported bug, please open an issue at -L. Be sure to trim your bug down to a +L. Be sure to trim your bug down to a tiny but sufficient test case. If the bug you are reporting has security implications which make it -inappropriate to send to a public issue tracker, then see -L -for details of how to report the issue. +inappropriate to send to a public issue tracker, then see L for details of how to report the issue. =head1 Give Thanks -If you wish to thank the Perl 5 Porters for the work we had done in Perl 5, -you can do so by running the C program: +If you wish to thank the Perl 5 Porters for the work we had done in Perl 5, you +can do so by running the C program: perlthanks Index: gnu/usr.bin/perl/pod/perlhist.pod =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/pod/perlhist.pod,v diff -u -p -a -u -p -r1.32 perlhist.pod --- gnu/usr.bin/perl/pod/perlhist.pod 26 Dec 2025 22:14:21 -0000 1.32 +++ gnu/usr.bin/perl/pod/perlhist.pod 29 Mar 2026 16:31:45 -0000 @@ -66,746 +66,782 @@ the strings?). =head1 THE RECORDS - Pump- Release Date Notes - kin (by no means - Holder comprehensive, - see Changes* - for details) + Pumpkin Release Date Notes + Holder (by no means + comprehensive, + see Changes* + for details) ====================================================================== - Larry 0 Classified. Don't ask. + Larry 0 Classified. Don't ask. - Larry 1.000 1987-Dec-18 + Larry 1.000 1987-Dec-18 - 1.001..10 1988-Jan-30 - 1.011..14 1988-Feb-02 - Schwern 1.0.15 2002-Dec-18 Modernization - Richard 1.0_16 2003-Dec-18 - - Larry 2.000 1988-Jun-05 - - 2.001 1988-Jun-28 - - Larry 3.000 1989-Oct-18 - - 3.001 1989-Oct-26 - 3.002..4 1989-Nov-11 - 3.005 1989-Nov-18 - 3.006..8 1989-Dec-22 - 3.009..13 1990-Mar-02 - 3.014 1990-Mar-13 - 3.015 1990-Mar-14 - 3.016..18 1990-Mar-28 - 3.019..27 1990-Aug-10 User subs. - 3.028 1990-Aug-14 - 3.029..36 1990-Oct-17 - 3.037 1990-Oct-20 - 3.040 1990-Nov-10 - 3.041 1990-Nov-13 - 3.042..43 1991-Jan-?? - 3.044 1991-Jan-12 - - Larry 4.000 1991-Mar-21 - - 4.001..3 1991-Apr-12 - 4.004..9 1991-Jun-07 - 4.010 1991-Jun-10 - 4.011..18 1991-Nov-05 - 4.019 1991-Nov-11 Stable. - 4.020..33 1992-Jun-08 - 4.034 1992-Jun-11 - 4.035 1992-Jun-23 - Larry 4.036 1993-Feb-05 Very stable. - - 5.000alpha1 1993-Jul-31 - 5.000alpha2 1993-Aug-16 - 5.000alpha3 1993-Oct-10 - 5.000alpha4 1993-???-?? - 5.000alpha5 1993-???-?? - 5.000alpha6 1994-Mar-18 - 5.000alpha7 1994-Mar-25 - Andy 5.000alpha8 1994-Apr-04 - Larry 5.000alpha9 1994-May-05 ext appears. - 5.000alpha10 1994-Jun-11 - 5.000alpha11 1994-Jul-01 - Andy 5.000a11a 1994-Jul-07 To fit 14. - 5.000a11b 1994-Jul-14 - 5.000a11c 1994-Jul-19 - 5.000a11d 1994-Jul-22 - Larry 5.000alpha12 1994-Aug-04 - Andy 5.000a12a 1994-Aug-08 - 5.000a12b 1994-Aug-15 - 5.000a12c 1994-Aug-22 - 5.000a12d 1994-Aug-22 - 5.000a12e 1994-Aug-22 - 5.000a12f 1994-Aug-24 - 5.000a12g 1994-Aug-24 - 5.000a12h 1994-Aug-24 - Larry 5.000beta1 1994-Aug-30 - Andy 5.000b1a 1994-Sep-06 - Larry 5.000beta2 1994-Sep-14 Core slushified. - Andy 5.000b2a 1994-Sep-14 - 5.000b2b 1994-Sep-17 - 5.000b2c 1994-Sep-17 - Larry 5.000beta3 1994-Sep-?? - Andy 5.000b3a 1994-Sep-18 - 5.000b3b 1994-Sep-22 - 5.000b3c 1994-Sep-23 - 5.000b3d 1994-Sep-27 - 5.000b3e 1994-Sep-28 - 5.000b3f 1994-Sep-30 - 5.000b3g 1994-Oct-04 - Andy 5.000b3h 1994-Oct-07 - Larry? 5.000gamma 1994-Oct-13? - - Larry 5.000 1994-Oct-17 - - Andy 5.000a 1994-Dec-19 - 5.000b 1995-Jan-18 - 5.000c 1995-Jan-18 - 5.000d 1995-Jan-18 - 5.000e 1995-Jan-18 - 5.000f 1995-Jan-18 - 5.000g 1995-Jan-18 - 5.000h 1995-Jan-18 - 5.000i 1995-Jan-26 - 5.000j 1995-Feb-07 - 5.000k 1995-Feb-11 - 5.000l 1995-Feb-21 - 5.000m 1995-Feb-28 - 5.000n 1995-Mar-07 - 5.000o 1995-Mar-13? - - Larry 5.001 1995-Mar-13 - - Andy 5.001a 1995-Mar-15 - 5.001b 1995-Mar-31 - 5.001c 1995-Apr-07 - 5.001d 1995-Apr-14 - 5.001e 1995-Apr-18 Stable. - 5.001f 1995-May-31 - 5.001g 1995-May-25 - 5.001h 1995-May-25 - 5.001i 1995-May-30 - 5.001j 1995-Jun-05 - 5.001k 1995-Jun-06 - 5.001l 1995-Jun-06 Stable. - 5.001m 1995-Jul-02 Very stable. - 5.001n 1995-Oct-31 Very unstable. - 5.002beta1 1995-Nov-21 - 5.002b1a 1995-Dec-04 - 5.002b1b 1995-Dec-04 - 5.002b1c 1995-Dec-04 - 5.002b1d 1995-Dec-04 - 5.002b1e 1995-Dec-08 - 5.002b1f 1995-Dec-08 - Tom 5.002b1g 1995-Dec-21 Doc release. - Andy 5.002b1h 1996-Jan-05 - 5.002b2 1996-Jan-14 - Larry 5.002b3 1996-Feb-02 - Andy 5.002gamma 1996-Feb-11 - Larry 5.002delta 1996-Feb-27 - - Larry 5.002 1996-Feb-29 Prototypes. - - Charles 5.002_01 1996-Mar-25 - - 5.003 1996-Jun-25 Security release. - - 5.003_01 1996-Jul-31 - Nick 5.003_02 1996-Aug-10 - Andy 5.003_03 1996-Aug-28 - 5.003_04 1996-Sep-02 - 5.003_05 1996-Sep-12 - 5.003_06 1996-Oct-07 - 5.003_07 1996-Oct-10 - Chip 5.003_08 1996-Nov-19 - 5.003_09 1996-Nov-26 - 5.003_10 1996-Nov-29 - 5.003_11 1996-Dec-06 - 5.003_12 1996-Dec-19 - 5.003_13 1996-Dec-20 - 5.003_14 1996-Dec-23 - 5.003_15 1996-Dec-23 - 5.003_16 1996-Dec-24 - 5.003_17 1996-Dec-27 - 5.003_18 1996-Dec-31 - 5.003_19 1997-Jan-04 - 5.003_20 1997-Jan-07 - 5.003_21 1997-Jan-15 - 5.003_22 1997-Jan-16 - 5.003_23 1997-Jan-25 - 5.003_24 1997-Jan-29 - 5.003_25 1997-Feb-04 - 5.003_26 1997-Feb-10 - 5.003_27 1997-Feb-18 - 5.003_28 1997-Feb-21 - 5.003_90 1997-Feb-25 Ramping up to the 5.004 release. - 5.003_91 1997-Mar-01 - 5.003_92 1997-Mar-06 - 5.003_93 1997-Mar-10 - 5.003_94 1997-Mar-22 - 5.003_95 1997-Mar-25 - 5.003_96 1997-Apr-01 - 5.003_97 1997-Apr-03 Fairly widely used. - 5.003_97a 1997-Apr-05 - 5.003_97b 1997-Apr-08 - 5.003_97c 1997-Apr-10 - 5.003_97d 1997-Apr-13 - 5.003_97e 1997-Apr-15 - 5.003_97f 1997-Apr-17 - 5.003_97g 1997-Apr-18 - 5.003_97h 1997-Apr-24 - 5.003_97i 1997-Apr-25 - 5.003_97j 1997-Apr-28 - 5.003_98 1997-Apr-30 - 5.003_99 1997-May-01 - 5.003_99a 1997-May-09 - p54rc1 1997-May-12 Release Candidates. - p54rc2 1997-May-14 - - Chip 5.004 1997-May-15 A major maintenance release. - - Tim 5.004_01-t1 1997-???-?? The 5.004 maintenance track. - 5.004_01-t2 1997-Jun-11 aka perl5.004m1t2 - 5.004_01 1997-Jun-13 - 5.004_01_01 1997-Jul-29 aka perl5.004m2t1 - 5.004_01_02 1997-Aug-01 aka perl5.004m2t2 - 5.004_01_03 1997-Aug-05 aka perl5.004m2t3 - 5.004_02 1997-Aug-07 - 5.004_02_01 1997-Aug-12 aka perl5.004m3t1 - 5.004_03-t2 1997-Aug-13 aka perl5.004m3t2 - 5.004_03 1997-Sep-05 - 5.004_04-t1 1997-Sep-19 aka perl5.004m4t1 - 5.004_04-t2 1997-Sep-23 aka perl5.004m4t2 - 5.004_04-t3 1997-Oct-10 aka perl5.004m4t3 - 5.004_04-t4 1997-Oct-14 aka perl5.004m4t4 - 5.004_04 1997-Oct-15 - 5.004_04-m1 1998-Mar-04 (5.004m5t1) Maint. trials for - 5.004_05. - 5.004_04-m2 1998-May-01 - 5.004_04-m3 1998-May-15 - 5.004_04-m4 1998-May-19 - 5.004_05-MT5 1998-Jul-21 - 5.004_05-MT6 1998-Oct-09 - 5.004_05-MT7 1998-Nov-22 - 5.004_05-MT8 1998-Dec-03 - Chip 5.004_05-MT9 1999-Apr-26 - 5.004_05 1999-Apr-29 - - Malcolm 5.004_50 1997-Sep-09 The 5.005 development track. - 5.004_51 1997-Oct-02 - 5.004_52 1997-Oct-15 - 5.004_53 1997-Oct-16 - 5.004_54 1997-Nov-14 - 5.004_55 1997-Nov-25 - 5.004_56 1997-Dec-18 - 5.004_57 1998-Feb-03 - 5.004_58 1998-Feb-06 - 5.004_59 1998-Feb-13 - 5.004_60 1998-Feb-20 - 5.004_61 1998-Feb-27 - 5.004_62 1998-Mar-06 - 5.004_63 1998-Mar-17 - 5.004_64 1998-Apr-03 - 5.004_65 1998-May-15 - 5.004_66 1998-May-29 - Sarathy 5.004_67 1998-Jun-15 - 5.004_68 1998-Jun-23 - 5.004_69 1998-Jun-29 - 5.004_70 1998-Jul-06 - 5.004_71 1998-Jul-09 - 5.004_72 1998-Jul-12 - 5.004_73 1998-Jul-13 - 5.004_74 1998-Jul-14 5.005 beta candidate. - 5.004_75 1998-Jul-15 5.005 beta1. - 5.004_76 1998-Jul-21 5.005 beta2. - - Sarathy 5.005 1998-Jul-22 Oneperl. - - Sarathy 5.005_01 1998-Jul-27 The 5.005 maintenance track. - 5.005_02-T1 1998-Aug-02 - 5.005_02-T2 1998-Aug-05 - 5.005_02 1998-Aug-08 - Graham 5.005_03-MT1 1998-Nov-30 - 5.005_03-MT2 1999-Jan-04 - 5.005_03-MT3 1999-Jan-17 - 5.005_03-MT4 1999-Jan-26 - 5.005_03-MT5 1999-Jan-28 - 5.005_03-MT6 1999-Mar-05 - 5.005_03 1999-Mar-28 - Leon 5.005_04-RC1 2004-Feb-05 - 5.005_04-RC2 2004-Feb-18 - 5.005_04 2004-Feb-23 - 5.005_05-RC1 2009-Feb-16 - - Sarathy 5.005_50 1998-Jul-26 The 5.6 development track. - 5.005_51 1998-Aug-10 - 5.005_52 1998-Sep-25 - 5.005_53 1998-Oct-31 - 5.005_54 1998-Nov-30 - 5.005_55 1999-Feb-16 - 5.005_56 1999-Mar-01 - 5.005_57 1999-May-25 - 5.005_58 1999-Jul-27 - 5.005_59 1999-Aug-02 - 5.005_60 1999-Aug-02 - 5.005_61 1999-Aug-20 - 5.005_62 1999-Oct-15 - 5.005_63 1999-Dec-09 - 5.5.640 2000-Feb-02 - 5.5.650 2000-Feb-08 beta1 - 5.5.660 2000-Feb-22 beta2 - 5.5.670 2000-Feb-29 beta3 - 5.6.0-RC1 2000-Mar-09 Release candidate 1. - 5.6.0-RC2 2000-Mar-14 Release candidate 2. - 5.6.0-RC3 2000-Mar-21 Release candidate 3. - - Sarathy 5.6.0 2000-Mar-22 - - Sarathy 5.6.1-TRIAL1 2000-Dec-18 The 5.6 maintenance track. - 5.6.1-TRIAL2 2001-Jan-31 - 5.6.1-TRIAL3 2001-Mar-19 - 5.6.1-foolish 2001-Apr-01 The "fools-gold" release. - 5.6.1 2001-Apr-08 - Rafael 5.6.2-RC1 2003-Nov-08 - 5.6.2 2003-Nov-15 Fix new build issues - - Jarkko 5.7.0 2000-Sep-02 The 5.7 track: Development. - 5.7.1 2001-Apr-09 - 5.7.2 2001-Jul-13 Virtual release candidate 0. - 5.7.3 2002-Mar-05 - 5.8.0-RC1 2002-Jun-01 - 5.8.0-RC2 2002-Jun-21 - 5.8.0-RC3 2002-Jul-13 - - Jarkko 5.8.0 2002-Jul-18 - - Jarkko 5.8.1-RC1 2003-Jul-10 The 5.8 maintenance track - 5.8.1-RC2 2003-Jul-11 - 5.8.1-RC3 2003-Jul-30 - 5.8.1-RC4 2003-Aug-01 - 5.8.1-RC5 2003-Sep-22 - 5.8.1 2003-Sep-25 - Nicholas 5.8.2-RC1 2003-Oct-27 - 5.8.2-RC2 2003-Nov-03 - 5.8.2 2003-Nov-05 - 5.8.3-RC1 2004-Jan-07 - 5.8.3 2004-Jan-14 - 5.8.4-RC1 2004-Apr-05 - 5.8.4-RC2 2004-Apr-15 - 5.8.4 2004-Apr-21 - 5.8.5-RC1 2004-Jul-06 - 5.8.5-RC2 2004-Jul-08 - 5.8.5 2004-Jul-19 - 5.8.6-RC1 2004-Nov-11 - 5.8.6 2004-Nov-27 - 5.8.7-RC1 2005-May-18 - 5.8.7 2005-May-30 - 5.8.8-RC1 2006-Jan-20 - 5.8.8 2006-Jan-31 - 5.8.9-RC1 2008-Nov-10 - 5.8.9-RC2 2008-Dec-06 - 5.8.9 2008-Dec-14 - - Hugo 5.9.0 2003-Oct-27 The 5.9 development track - Rafael 5.9.1 2004-Mar-16 - 5.9.2 2005-Apr-01 - 5.9.3 2006-Jan-28 - 5.9.4 2006-Aug-15 - 5.9.5 2007-Jul-07 - 5.10.0-RC1 2007-Nov-17 - 5.10.0-RC2 2007-Nov-25 - - Rafael 5.10.0 2007-Dec-18 - - David M 5.10.1-RC1 2009-Aug-06 The 5.10 maintenance track - 5.10.1-RC2 2009-Aug-18 - 5.10.1 2009-Aug-22 - - Jesse 5.11.0 2009-Oct-02 The 5.11 development track - 5.11.1 2009-Oct-20 - Leon 5.11.2 2009-Nov-20 - Jesse 5.11.3 2009-Dec-20 - Ricardo 5.11.4 2010-Jan-20 - Steve 5.11.5 2010-Feb-20 - Jesse 5.12.0-RC0 2010-Mar-21 - 5.12.0-RC1 2010-Mar-29 - 5.12.0-RC2 2010-Apr-01 - 5.12.0-RC3 2010-Apr-02 - 5.12.0-RC4 2010-Apr-06 - 5.12.0-RC5 2010-Apr-09 - - Jesse 5.12.0 2010-Apr-12 - - Jesse 5.12.1-RC2 2010-May-13 The 5.12 maintenance track - 5.12.1-RC1 2010-May-09 - 5.12.1 2010-May-16 - 5.12.2-RC2 2010-Aug-31 - 5.12.2 2010-Sep-06 - Ricardo 5.12.3-RC1 2011-Jan-09 - Ricardo 5.12.3-RC2 2011-Jan-14 - Ricardo 5.12.3-RC3 2011-Jan-17 - Ricardo 5.12.3 2011-Jan-21 - Leon 5.12.4-RC1 2011-Jun-08 - Leon 5.12.4 2011-Jun-20 - Dominic 5.12.5 2012-Nov-10 - - Leon 5.13.0 2010-Apr-20 The 5.13 development track - Ricardo 5.13.1 2010-May-20 - Matt 5.13.2 2010-Jun-22 - David G 5.13.3 2010-Jul-20 - Florian 5.13.4 2010-Aug-20 - Steve 5.13.5 2010-Sep-19 - Miyagawa 5.13.6 2010-Oct-20 - BinGOs 5.13.7 2010-Nov-20 - Zefram 5.13.8 2010-Dec-20 - Jesse 5.13.9 2011-Jan-20 - Ævar 5.13.10 2011-Feb-20 - Florian 5.13.11 2011-Mar-20 - Jesse 5.14.0RC1 2011-Apr-20 - Jesse 5.14.0RC2 2011-May-04 - Jesse 5.14.0RC3 2011-May-11 - - Jesse 5.14.0 2011-May-14 The 5.14 maintenance track - Jesse 5.14.1 2011-Jun-16 - Florian 5.14.2-RC1 2011-Sep-19 - 5.14.2 2011-Sep-26 - Dominic 5.14.3 2012-Oct-12 - David M 5.14.4-RC1 2013-Mar-05 - David M 5.14.4-RC2 2013-Mar-07 - David M 5.14.4 2013-Mar-10 - - David G 5.15.0 2011-Jun-20 The 5.15 development track - Zefram 5.15.1 2011-Jul-20 - Ricardo 5.15.2 2011-Aug-20 - Stevan 5.15.3 2011-Sep-20 - Florian 5.15.4 2011-Oct-20 - Steve 5.15.5 2011-Nov-20 - Dave R 5.15.6 2011-Dec-20 - BinGOs 5.15.7 2012-Jan-20 - Max M 5.15.8 2012-Feb-20 - Abigail 5.15.9 2012-Mar-20 - Ricardo 5.16.0-RC0 2012-May-10 - Ricardo 5.16.0-RC1 2012-May-14 - Ricardo 5.16.0-RC2 2012-May-15 - - Ricardo 5.16.0 2012-May-20 The 5.16 maintenance track - Ricardo 5.16.1 2012-Aug-08 - Ricardo 5.16.2 2012-Nov-01 - Ricardo 5.16.3-RC1 2013-Mar-06 - Ricardo 5.16.3 2013-Mar-11 - - Zefram 5.17.0 2012-May-26 The 5.17 development track - Jesse L 5.17.1 2012-Jun-20 - TonyC 5.17.2 2012-Jul-20 - Steve 5.17.3 2012-Aug-20 - Florian 5.17.4 2012-Sep-20 - Florian 5.17.5 2012-Oct-20 - Ricardo 5.17.6 2012-Nov-20 - Dave R 5.17.7 2012-Dec-18 - Aaron 5.17.8 2013-Jan-20 - BinGOs 5.17.9 2013-Feb-20 - Max M 5.17.10 2013-Mar-21 - Ricardo 5.17.11 2013-Apr-20 - - Ricardo 5.18.0-RC1 2013-May-11 The 5.18 maintenance track - Ricardo 5.18.0-RC2 2013-May-12 - Ricardo 5.18.0-RC3 2013-May-13 - Ricardo 5.18.0-RC4 2013-May-15 - Ricardo 5.18.0 2013-May-18 - Ricardo 5.18.1-RC1 2013-Aug-01 - Ricardo 5.18.1-RC2 2013-Aug-03 - Ricardo 5.18.1-RC3 2013-Aug-08 - Ricardo 5.18.1 2013-Aug-12 - Ricardo 5.18.2 2014-Jan-06 - Ricardo 5.18.3-RC1 2014-Sep-17 - Ricardo 5.18.3-RC2 2014-Sep-27 - Ricardo 5.18.3 2014-Oct-01 - Ricardo 5.18.4 2014-Oct-01 - - Ricardo 5.19.0 2013-May-20 The 5.19 development track - David G 5.19.1 2013-Jun-21 - Aristotle 5.19.2 2013-Jul-22 - Steve 5.19.3 2013-Aug-20 - Steve 5.19.4 2013-Sep-20 - Steve 5.19.5 2013-Oct-20 - BinGOs 5.19.6 2013-Nov-20 - Abigail 5.19.7 2013-Dec-20 - Ricardo 5.19.8 2014-Jan-20 - TonyC 5.19.9 2014-Feb-20 - Aaron 5.19.10 2014-Mar-20 - Steve 5.19.11 2014-Apr-20 - - Ricardo 5.20.0-RC1 2014-May-16 The 5.20 maintenance track - Ricardo 5.20.0 2014-May-27 - Steve 5.20.1-RC1 2014-Aug-25 - Steve 5.20.1-RC2 2014-Sep-07 - Steve 5.20.1 2014-Sep-14 - Steve 5.20.2-RC1 2015-Jan-31 - Steve 5.20.2 2015-Feb-14 - Steve 5.20.3-RC1 2015-Aug-22 - Steve 5.20.3-RC2 2015-Aug-29 - Steve 5.20.3 2015-Sep-12 - - Ricardo 5.21.0 2014-May-27 The 5.21 development track - Matthew H 5.21.1 2014-Jun-20 - Abigail 5.21.2 2014-Jul-20 - Peter 5.21.3 2014-Aug-20 - Steve 5.21.4 2014-Sep-20 - Abigail 5.21.5 2014-Oct-20 - BinGOs 5.21.6 2014-Nov-20 - Max M 5.21.7 2014-Dec-20 - Matthew H 5.21.8 2015-Jan-20 - Sawyer X 5.21.9 2015-Feb-20 - Steve 5.21.10 2015-Mar-20 - Steve 5.21.11 2015-Apr-20 - - Ricardo 5.22.0-RC1 2015-May-19 The 5.22 maintenance track - Ricardo 5.22.0-RC2 2015-May-21 - Ricardo 5.22.0 2015-Jun-01 - Steve 5.22.1-RC1 2015-Oct-31 - Steve 5.22.1-RC2 2015-Nov-15 - Steve 5.22.1-RC3 2015-Dec-02 - Steve 5.22.1-RC4 2015-Dec-08 - Steve 5.22.1 2015-Dec-13 - Steve 5.22.2-RC1 2016-Apr-10 - Steve 5.22.2 2016-Apr-29 - Steve 5.22.3-RC1 2016-Jul-17 - Steve 5.22.3-RC2 2016-Jul-25 - Steve 5.22.3-RC3 2016-Aug-11 - Steve 5.22.3-RC4 2016-Oct-12 - Steve 5.22.3-RC5 2017-Jan-02 - Steve 5.22.3 2017-Jan-14 - Steve 5.22.4-RC1 2017-Jul-01 - Steve 5.22.4 2017-Jul-15 - - Ricardo 5.23.0 2015-Jun-20 The 5.23 development track - Matthew H 5.23.1 2015-Jul-20 - Matthew H 5.23.2 2015-Aug-20 - Peter 5.23.3 2015-Sep-20 - Steve 5.23.4 2015-Oct-20 - Abigail 5.23.5 2015-Nov-20 - David G 5.23.6 2015-Dec-21 - Stevan 5.23.7 2016-Jan-20 - Sawyer X 5.23.8 2016-Feb-20 - Abigail 5.23.9 2016-Mar-20 - - Ricardo 5.24.0-RC1 2016-Apr-13 The 5.24 maintenance track - Ricardo 5.24.0-RC2 2016-Apr-23 - Ricardo 5.24.0-RC3 2016-Apr-26 - Ricardo 5.24.0-RC4 2016-May-02 - Ricardo 5.24.0-RC5 2016-May-04 - Ricardo 5.24.0 2016-May-09 - Steve 5.24.1-RC1 2016-Jul-17 - Steve 5.24.1-RC2 2016-Jul-25 - Steve 5.24.1-RC3 2016-Aug-11 - Steve 5.24.1-RC4 2016-Oct-12 - Steve 5.24.1-RC5 2017-Jan-02 - Steve 5.24.1 2017-Jan-14 - Steve 5.24.2-RC1 2017-Jul-01 - Steve 5.24.2 2017-Jul-15 - Steve 5.24.3-RC1 2017-Sep-10 - Steve 5.24.3 2017-Sep-22 - Steve 5.24.4-RC1 2018-Mar-24 - Steve 5.24.4 2018-Apr-14 - - Ricardo 5.25.0 2016-May-09 The 5.25 development track - Sawyer X 5.25.1 2016-May-20 - Matthew H 5.25.2 2016-Jun-20 - Steve 5.25.3 2016-Jul-20 - BinGOs 5.25.4 2016-Aug-20 - Stevan 5.25.5 2016-Sep-20 - Aaron 5.25.6 2016-Oct-20 - Chad 5.25.7 2016-Nov-20 - Sawyer X 5.25.8 2016-Dec-20 - Abigail 5.25.9 2017-Jan-20 - Renee 5.25.10 2017-Feb-20 - Sawyer X 5.25.11 2017-Mar-20 - Sawyer X 5.25.12 2017-Apr-20 - - Sawyer X 5.26.0-RC1 2017-May-11 The 5.26 maintenance track - Sawyer X 5.26.0-RC2 2017-May-23 - Sawyer X 5.26.0 2017-May-30 - Steve 5.26.1-RC1 2017-Sep-10 - Steve 5.26.1 2017-Sep-22 - Steve 5.26.2-RC1 2018-Mar-24 - Steve 5.26.2 2018-Apr-14 - Steve 5.26.3-RC1 2018-Nov-08 - Steve 5.26.3 2018-Nov-29 - - Sawyer X 5.27.0 2017-May-31 The 5.27 development track - Eric 5.27.1 2017-Jun-20 - Aaron 5.27.2 2017-Jul-20 - Matthew H 5.27.3 2017-Aug-21 - John 5.27.4 2017-Sep-20 - Steve 5.27.5 2017-Oct-20 - Ether 5.27.6 2017-Nov-20 - BinGOs 5.27.7 2017-Dec-20 - Abigail 5.27.8 2018-Jan-20 - Renee 5.27.9 2018-Feb-20 - Todd 5.27.10 2018-Mar-20 - Sawyer X 5.27.11 2018-Apr-20 - - Sawyer X 5.28.0-RC1 2018-May-21 The 5.28 maintenance track - Sawyer X 5.28.0-RC2 2018-Jun-06 - Sawyer X 5.28.0-RC3 2018-Jun-18 - Sawyer X 5.28.0-RC4 2018-Jun-19 - Sawyer X 5.28.0 2018-Jun-22 - Steve 5.28.1-RC1 2018-Nov-08 - Steve 5.28.1 2018-Nov-29 - Steve 5.28.2-RC1 2019-Apr-05 - Steve 5.28.2 2019-Apr-19 - Steve 5.28.3-RC1 2020-May-18 - Steve 5.28.3 2020-Jun-01 - - Sawyer X 5.29.0 2018-Jun-26 The 5.29 development track - Steve 5.29.1 2018-Jul-20 - BinGOs 5.29.2 2018-Aug-20 - John 5.29.3 2018-Sep-20 - Aaron 5.29.4 2018-Oct-20 - Ether 5.29.5 2018-Nov-20 - Abigail 5.29.6 2018-Dec-18 - Abigail 5.29.7 2019-Jan-20 - Nicolas R 5.29.8 2019-Feb-20 - Zak Elep 5.29.9 2019-Mar-20 - Sawyer X 5.29.10 2019-Apr-20 - - Sawyer X 5.30.0-RC1 2019-May-11 The 5.30 maintenance track - Sawyer X 5.30.0-RC2 2019-May-17 - Sawyer X 5.30.0 2019-May-22 - Steve 5.30.1-RC1 2019-Oct-27 - Steve 5.30.1 2019-Nov-10 - Steve 5.30.2-RC1 2020-Feb-29 - Steve 5.30.2 2020-Mar-14 - Steve 5.30.3-RC1 2020-May-18 - Steve 5.30.3 2020-Jun-01 - - Sawyer X 5.31.0 2019-May-24 The 5.31 development track - Ether 5.31.1 2019-Jun-20 - Steve 5.31.2 2019-Jul-20 - Tom H 5.31.3 2019-Aug-20 - Max M 5.31.4 2019-Sep-20 - Steve 5.31.5 2019-Oct-20 - BinGOs 5.31.6 2019-Nov-20 - Nicolas R 5.31.7 2019-Dec-20 - Matthew H 5.31.8 2020-Jan-20 - Renee 5.31.9 2020-Feb-20 - Sawyer X 5.31.10 2020-Mar-20 - Sawyer X 5.31.11 2020-Apr-28 - - Sawyer X 5.32.0-RC0 2020-May-30 The 5.32 maintenance track - Sawyer X 5.32.0-RC1 2020-Jun-07 - Sawyer X 5.32.0 2020-Jun-20 - Steve 5.32.1-RC1 2021-Jan-09 - Steve 5.32.1 2021-Jan-23 - - Sawyer X 5.33.0 2020-Jul-17 The 5.33 development track - Ether 5.33.1 2020-Aug-20 - Sawyer X 5.33.2 2020-Sep-20 - Steve 5.33.3 2020-Oct-20 - Tom H 5.33.4 2020-Nov-20 - Max M 5.33.5 2020-Dec-20 - Richard L 5.33.6 2021-Jan-20 - Renee 5.33.7 2021-Feb-20 - Nicolas R 5.33.8 2021-Mar-20 - Todd R 5.33.9 2021-Apr-20 - - Sawyer X 5.34.0-RC1 2021-May-04 The 5.34 maintenance track - Sawyer X 5.34.0-RC2 2021-May-15 - Sawyer X 5.34.0 2021-May-20 - Steve 5.34.1-RC1 2022-Feb-27 - Steve 5.34.1-RC2 2022-Mar-06 - Steve 5.34.1 2022-Mar-13 - Paul E 5.34.2 2023-Nov-25 - Paul E 5.34.3 2023-Nov-29 - - Ricardo 5.35.0 2021-May-20 The 5.35 development track - Max 5.35.1 2021-Jun-20 - Neil B 5.35.2 2021-Jul-23 - Ether 5.35.3 2021-Aug-20 - Matthew H 5.35.4 2021-Sep-20 - Leon T 5.35.5 2021-Oct-21 - Richard L 5.35.6 2021-Nov-20 - Neil B 5.35.7 2021-Dec-20 - Nicolas R 5.35.8 2022-Jan-20 - Renee 5.35.9 2022-Feb-20 - Sawyer X 5.35.10 2022-Mar-20 - Steve 5.35.11 2022-Apr-20 - - Ricardo 5.36.0-RC1 2022-May-20 The 5.36 maintenance track - Ricardo 5.36.0-RC2 2022-May-20 - Ricardo 5.36.0-RC3 2022-May-22 - Ricardo 5.36.0 2022-May-27 - Steve 5.36.1-RC1 2023-Apr-10 - Steve 5.36.1-RC2 2023-Apr-11 - Steve 5.36.1-RC3 2023-Apr-16 - Steve 5.36.1 2023-Apr-23 - Paul E 5.36.2 2023-Nov-25 - Paul E 5.36.3 2023-Nov-29 - - Ricardo 5.37.0 2022-May-27 The 5.37 development track - Matthew H 5.37.1 2022-Jun-20 - Nicolas R 5.37.2 2022-Jul-20 - Neil B 5.37.3 2022-Aug-20 - Ether 5.37.4 2022-Sep-20 - Todd R 5.37.5 2022-Oct-20 - Max M 5.37.6 2022-Nov-20 - Richard L 5.37.7 2022-Dec-20 - Renee 5.37.8 2023-Jan-20 - Ether 5.37.9 2023-Feb-20 - Yves 5.37.10 2023-Mar-20 - Steve 5.37.11 2023-Apr-20 - - Ricardo 5.38.0-RC1 2023-Jun-15 The 5.38 maintenance track - Ricardo 5.38.0-RC2 2023-Jun-23 - Ricardo 5.38.0 2023-Jul-02 - Paul E 5.38.1 2023-Nov-25 - Paul E 5.38.2 2023-Nov-29 - Steve 5.38.3-RC1 2025-Jan-05 - Steve 5.38.3 2025-Jan-18 - Steve 5.38.4-RC1 2025-Mar-30 - Steve 5.38.4 2025-Apr-13 - - Ricardo 5.39.0 2023-Jun-30 The 5.39 development track - Steve 5.39.1 2023-Jul-20 - Paul E 5.39.2 2023-Aug-20 - Matthew H 5.39.3 2023-Sep-20 - Graham K 5.39.4 2023-Oct-25 - Ether 5.39.5 2023-Nov-20 - Philippe 5.39.6 2023-Dec-30 - Max 5.39.7 2024-Jan-20 - Renee 5.39.8 2024-Feb-23 - Paul E 5.39.9 2024-Mar-20 - Paul E 5.39.10 2024-Apr-29 - - Graham K 5.40.0-RC1 2024-May-24 The 5.40 maintenance track - Graham K 5.40.0-RC2 2024-Jun-04 - Graham K 5.40.0 2024-Jun-09 - Steve 5.40.1-RC1 2025-Jan-05 - Steve 5.40.1 2025-Jan-18 - Steve 5.40.2-RC1 2025-Mar-30 - Steve 5.40.2 2025-Apr-13 - - Graham K 5.41.0 2024-Jun-10 The 5.41 development track - Philippe 5.41.1 2024-Jul-02 - Ether 5.41.2 2024-Jul-20 - Philippe 5.41.3 2024-Aug-29 - Thibault 5.41.4 2024-Sep-20 - Richard L 5.41.5 2024-Oct-20 - Thibault 5.41.6 2024-Nov-20 - Max 5.41.7 2024-Dec-20 - Steve 5.41.8 2025-Jan-20 - Richard L 5.41.9 2025-Feb-24 - Lukas 5.41.10 2025-Mar-21 - Ether 5.41.11 2025-Apr-20 - Ether 5.41.12 2025-Apr-21 - Philippe 5.41.13 2025-May-28 - - Thibault 5.42.0-RC1 2025-Jun-24 The 5.42 maintenance track - Thibault 5.42.0-RC2 2025-Jun-27 - Thibault 5.42.0-RC3 2025-Jul-01 - Philippe 5.42.0 2025-Jul-03 + 1.001..10 1988-Jan-30 + 1.011..14 1988-Feb-02 + Schwern 1.0.15 2002-Dec-18 Modernization + Richard 1.0_16 2003-Dec-18 + + Larry 2.000 1988-Jun-05 + + 2.001 1988-Jun-28 + + Larry 3.000 1989-Oct-18 + + 3.001 1989-Oct-26 + 3.002..4 1989-Nov-11 + 3.005 1989-Nov-18 + 3.006..8 1989-Dec-22 + 3.009..13 1990-Mar-02 + 3.014 1990-Mar-13 + 3.015 1990-Mar-14 + 3.016..18 1990-Mar-28 + 3.019..27 1990-Aug-10 User subs. + 3.028 1990-Aug-14 + 3.029..36 1990-Oct-17 + 3.037 1990-Oct-20 + 3.040 1990-Nov-10 + 3.041 1990-Nov-13 + 3.042..43 1991-Jan-?? + 3.044 1991-Jan-12 + + Larry 4.000 1991-Mar-21 + + 4.001..3 1991-Apr-12 + 4.004..9 1991-Jun-07 + 4.010 1991-Jun-10 + 4.011..18 1991-Nov-05 + 4.019 1991-Nov-11 Stable. + 4.020..33 1992-Jun-08 + 4.034 1992-Jun-11 + 4.035 1992-Jun-23 + Larry 4.036 1993-Feb-05 Very stable. + + 5.000alpha1 1993-Jul-31 + 5.000alpha2 1993-Aug-16 + 5.000alpha3 1993-Oct-10 + 5.000alpha4 1993-???-?? + 5.000alpha5 1993-???-?? + 5.000alpha6 1994-Mar-18 + 5.000alpha7 1994-Mar-25 + Andy 5.000alpha8 1994-Apr-04 + Larry 5.000alpha9 1994-May-05 ext appears. + 5.000alpha10 1994-Jun-11 + 5.000alpha11 1994-Jul-01 + Andy 5.000a11a 1994-Jul-07 To fit 14. + 5.000a11b 1994-Jul-14 + 5.000a11c 1994-Jul-19 + 5.000a11d 1994-Jul-22 + Larry 5.000alpha12 1994-Aug-04 + Andy 5.000a12a 1994-Aug-08 + 5.000a12b 1994-Aug-15 + 5.000a12c 1994-Aug-22 + 5.000a12d 1994-Aug-22 + 5.000a12e 1994-Aug-22 + 5.000a12f 1994-Aug-24 + 5.000a12g 1994-Aug-24 + 5.000a12h 1994-Aug-24 + Larry 5.000beta1 1994-Aug-30 + Andy 5.000b1a 1994-Sep-06 + Larry 5.000beta2 1994-Sep-14 Core slushified. + Andy 5.000b2a 1994-Sep-14 + 5.000b2b 1994-Sep-17 + 5.000b2c 1994-Sep-17 + Larry 5.000beta3 1994-Sep-?? + Andy 5.000b3a 1994-Sep-18 + 5.000b3b 1994-Sep-22 + 5.000b3c 1994-Sep-23 + 5.000b3d 1994-Sep-27 + 5.000b3e 1994-Sep-28 + 5.000b3f 1994-Sep-30 + 5.000b3g 1994-Oct-04 + Andy 5.000b3h 1994-Oct-07 + Larry? 5.000gamma 1994-Oct-13? + + Larry 5.000 1994-Oct-17 + + Andy 5.000a 1994-Dec-19 + 5.000b 1995-Jan-18 + 5.000c 1995-Jan-18 + 5.000d 1995-Jan-18 + 5.000e 1995-Jan-18 + 5.000f 1995-Jan-18 + 5.000g 1995-Jan-18 + 5.000h 1995-Jan-18 + 5.000i 1995-Jan-26 + 5.000j 1995-Feb-07 + 5.000k 1995-Feb-11 + 5.000l 1995-Feb-21 + 5.000m 1995-Feb-28 + 5.000n 1995-Mar-07 + 5.000o 1995-Mar-13? + + Larry 5.001 1995-Mar-13 + + Andy 5.001a 1995-Mar-15 + 5.001b 1995-Mar-31 + 5.001c 1995-Apr-07 + 5.001d 1995-Apr-14 + 5.001e 1995-Apr-18 Stable. + 5.001f 1995-May-31 + 5.001g 1995-May-25 + 5.001h 1995-May-25 + 5.001i 1995-May-30 + 5.001j 1995-Jun-05 + 5.001k 1995-Jun-06 + 5.001l 1995-Jun-06 Stable. + 5.001m 1995-Jul-02 Very stable. + 5.001n 1995-Oct-31 Very unstable. + 5.002beta1 1995-Nov-21 + 5.002b1a 1995-Dec-04 + 5.002b1b 1995-Dec-04 + 5.002b1c 1995-Dec-04 + 5.002b1d 1995-Dec-04 + 5.002b1e 1995-Dec-08 + 5.002b1f 1995-Dec-08 + Tom 5.002b1g 1995-Dec-21 Doc release. + Andy 5.002b1h 1996-Jan-05 + 5.002b2 1996-Jan-14 + Larry 5.002b3 1996-Feb-02 + Andy 5.002gamma 1996-Feb-11 + Larry 5.002delta 1996-Feb-27 + + Larry 5.002 1996-Feb-29 Prototypes. + + Charles 5.002_01 1996-Mar-25 + + Charles 5.003 1996-Jun-25 Security release. + + Charles 5.003_01 1996-Jul-31 + Nick 5.003_02 1996-Aug-10 + Andy 5.003_03 1996-Aug-28 + 5.003_04 1996-Sep-02 + 5.003_05 1996-Sep-12 + 5.003_06 1996-Oct-07 + 5.003_07 1996-Oct-10 + Chip 5.003_08 1996-Nov-19 + 5.003_09 1996-Nov-26 + 5.003_10 1996-Nov-29 + 5.003_11 1996-Dec-06 + 5.003_12 1996-Dec-19 + 5.003_13 1996-Dec-20 + 5.003_14 1996-Dec-23 + 5.003_15 1996-Dec-23 + 5.003_16 1996-Dec-24 + 5.003_17 1996-Dec-27 + 5.003_18 1996-Dec-31 + 5.003_19 1997-Jan-04 + 5.003_20 1997-Jan-07 + 5.003_21 1997-Jan-15 + 5.003_22 1997-Jan-16 + 5.003_23 1997-Jan-25 + 5.003_24 1997-Jan-29 + 5.003_25 1997-Feb-04 + 5.003_26 1997-Feb-10 + 5.003_27 1997-Feb-18 + 5.003_28 1997-Feb-21 + 5.003_90 1997-Feb-25 Ramping up to the 5.004 release. + 5.003_91 1997-Mar-01 + 5.003_92 1997-Mar-06 + 5.003_93 1997-Mar-10 + 5.003_94 1997-Mar-22 + 5.003_95 1997-Mar-25 + 5.003_96 1997-Apr-01 + 5.003_97 1997-Apr-03 Fairly widely used. + 5.003_97a 1997-Apr-05 + 5.003_97b 1997-Apr-08 + 5.003_97c 1997-Apr-10 + 5.003_97d 1997-Apr-13 + 5.003_97e 1997-Apr-15 + 5.003_97f 1997-Apr-17 + 5.003_97g 1997-Apr-18 + 5.003_97h 1997-Apr-24 + 5.003_97i 1997-Apr-25 + 5.003_97j 1997-Apr-28 + 5.003_98 1997-Apr-30 + 5.003_99 1997-May-01 + 5.003_99a 1997-May-09 + p54rc1 1997-May-12 Release Candidates. + p54rc2 1997-May-14 + + Chip 5.004 1997-May-15 A major maintenance release. + + Tim 5.004_01-t1 1997-???-?? The 5.004 maintenance track. + 5.004_01-t2 1997-Jun-11 aka perl5.004m1t2 + 5.004_01 1997-Jun-13 + 5.004_01_01 1997-Jul-29 aka perl5.004m2t1 + 5.004_01_02 1997-Aug-01 aka perl5.004m2t2 + 5.004_01_03 1997-Aug-05 aka perl5.004m2t3 + 5.004_02 1997-Aug-07 + 5.004_02_01 1997-Aug-12 aka perl5.004m3t1 + 5.004_03-t2 1997-Aug-13 aka perl5.004m3t2 + 5.004_03 1997-Sep-05 + 5.004_04-t1 1997-Sep-19 aka perl5.004m4t1 + 5.004_04-t2 1997-Sep-23 aka perl5.004m4t2 + 5.004_04-t3 1997-Oct-10 aka perl5.004m4t3 + 5.004_04-t4 1997-Oct-14 aka perl5.004m4t4 + 5.004_04 1997-Oct-15 + 5.004_04-m1 1998-Mar-04 (5.004m5t1) Maint. trials for + 5.004_05. + 5.004_04-m2 1998-May-01 + 5.004_04-m3 1998-May-15 + 5.004_04-m4 1998-May-19 + 5.004_05-MT5 1998-Jul-21 + 5.004_05-MT6 1998-Oct-09 + 5.004_05-MT7 1998-Nov-22 + 5.004_05-MT8 1998-Dec-03 + Chip 5.004_05-MT9 1999-Apr-26 + 5.004_05 1999-Apr-29 + + Malcolm 5.004_50 1997-Sep-09 The 5.005 development track. + 5.004_51 1997-Oct-02 + 5.004_52 1997-Oct-15 + 5.004_53 1997-Oct-16 + 5.004_54 1997-Nov-14 + 5.004_55 1997-Nov-25 + 5.004_56 1997-Dec-18 + 5.004_57 1998-Feb-03 + 5.004_58 1998-Feb-06 + 5.004_59 1998-Feb-13 + 5.004_60 1998-Feb-20 + 5.004_61 1998-Feb-27 + 5.004_62 1998-Mar-06 + 5.004_63 1998-Mar-17 + 5.004_64 1998-Apr-03 + 5.004_65 1998-May-15 + 5.004_66 1998-May-29 + Sarathy 5.004_67 1998-Jun-15 + 5.004_68 1998-Jun-23 + 5.004_69 1998-Jun-29 + 5.004_70 1998-Jul-06 + 5.004_71 1998-Jul-09 + 5.004_72 1998-Jul-12 + 5.004_73 1998-Jul-13 + 5.004_74 1998-Jul-14 5.005 beta candidate. + 5.004_75 1998-Jul-15 5.005 beta1. + 5.004_76 1998-Jul-21 5.005 beta2. + + Sarathy 5.005 1998-Jul-22 Oneperl. + + Sarathy 5.005_01 1998-Jul-27 The 5.005 maintenance track. + 5.005_02-T1 1998-Aug-02 + 5.005_02-T2 1998-Aug-05 + 5.005_02 1998-Aug-08 + Graham 5.005_03-MT1 1998-Nov-30 + 5.005_03-MT2 1999-Jan-04 + 5.005_03-MT3 1999-Jan-17 + 5.005_03-MT4 1999-Jan-26 + 5.005_03-MT5 1999-Jan-28 + 5.005_03-MT6 1999-Mar-05 + 5.005_03 1999-Mar-28 + Leon 5.005_04-RC1 2004-Feb-05 + 5.005_04-RC2 2004-Feb-18 + 5.005_04 2004-Feb-23 + 5.005_05-RC1 2009-Feb-16 + + Sarathy 5.005_50 1998-Jul-26 The 5.6 development track. + 5.005_51 1998-Aug-10 + 5.005_52 1998-Sep-25 + 5.005_53 1998-Oct-31 + 5.005_54 1998-Nov-30 + 5.005_55 1999-Feb-16 + 5.005_56 1999-Mar-01 + 5.005_57 1999-May-25 + 5.005_58 1999-Jul-27 + 5.005_59 1999-Aug-02 + 5.005_60 1999-Aug-02 + 5.005_61 1999-Aug-20 + 5.005_62 1999-Oct-15 + 5.005_63 1999-Dec-09 + 5.5.640 2000-Feb-02 + 5.5.650 2000-Feb-08 beta1 + 5.5.660 2000-Feb-22 beta2 + 5.5.670 2000-Feb-29 beta3 + 5.6.0-RC1 2000-Mar-09 Release candidate 1. + 5.6.0-RC2 2000-Mar-14 Release candidate 2. + 5.6.0-RC3 2000-Mar-21 Release candidate 3. + + Sarathy 5.6.0 2000-Mar-22 + + Sarathy 5.6.1-TRIAL1 2000-Dec-18 The 5.6 maintenance track. + 5.6.1-TRIAL2 2001-Jan-31 + 5.6.1-TRIAL3 2001-Mar-19 + 5.6.1-foolish 2001-Apr-01 The "fools-gold" release. + 5.6.1 2001-Apr-08 + Rafael 5.6.2-RC1 2003-Nov-08 + 5.6.2 2003-Nov-15 Fix new build issues + + Jarkko 5.7.0 2000-Sep-02 The 5.7 track: Development. + 5.7.1 2001-Apr-09 + 5.7.2 2001-Jul-13 Virtual release candidate 0. + 5.7.3 2002-Mar-05 + 5.8.0-RC1 2002-Jun-01 + 5.8.0-RC2 2002-Jun-21 + 5.8.0-RC3 2002-Jul-13 + + Jarkko 5.8.0 2002-Jul-18 + + Jarkko 5.8.1-RC1 2003-Jul-10 The 5.8 maintenance track + 5.8.1-RC2 2003-Jul-11 + 5.8.1-RC3 2003-Jul-30 + 5.8.1-RC4 2003-Aug-01 + 5.8.1-RC5 2003-Sep-22 + 5.8.1 2003-Sep-25 + Nicholas 5.8.2-RC1 2003-Oct-27 + 5.8.2-RC2 2003-Nov-03 + 5.8.2 2003-Nov-05 + 5.8.3-RC1 2004-Jan-07 + 5.8.3 2004-Jan-14 + 5.8.4-RC1 2004-Apr-05 + 5.8.4-RC2 2004-Apr-15 + 5.8.4 2004-Apr-21 + 5.8.5-RC1 2004-Jul-06 + 5.8.5-RC2 2004-Jul-08 + 5.8.5 2004-Jul-19 + 5.8.6-RC1 2004-Nov-11 + 5.8.6 2004-Nov-27 + 5.8.7-RC1 2005-May-18 + 5.8.7 2005-May-30 + 5.8.8-RC1 2006-Jan-20 + 5.8.8 2006-Jan-31 + 5.8.9-RC1 2008-Nov-10 + 5.8.9-RC2 2008-Dec-06 + 5.8.9 2008-Dec-14 + + Hugo 5.9.0 2003-Oct-27 The 5.9 development track + Rafael 5.9.1 2004-Mar-16 + 5.9.2 2005-Apr-01 + 5.9.3 2006-Jan-28 + 5.9.4 2006-Aug-15 + 5.9.5 2007-Jul-07 + 5.10.0-RC1 2007-Nov-17 + 5.10.0-RC2 2007-Nov-25 + + Rafael 5.10.0 2007-Dec-18 + + David M 5.10.1-RC1 2009-Aug-06 The 5.10 maintenance track + 5.10.1-RC2 2009-Aug-18 + 5.10.1 2009-Aug-22 + + Jesse 5.11.0 2009-Oct-02 The 5.11 development track + 5.11.1 2009-Oct-20 + Leon 5.11.2 2009-Nov-20 + Jesse 5.11.3 2009-Dec-20 + Ricardo 5.11.4 2010-Jan-20 + Steve 5.11.5 2010-Feb-20 + Jesse 5.12.0-RC0 2010-Mar-21 + 5.12.0-RC1 2010-Mar-29 + 5.12.0-RC2 2010-Apr-01 + 5.12.0-RC3 2010-Apr-02 + 5.12.0-RC4 2010-Apr-06 + 5.12.0-RC5 2010-Apr-09 + + Jesse 5.12.0 2010-Apr-12 + + Jesse 5.12.1-RC1 2010-May-09 The 5.12 maintenance track + 5.12.1-RC2 2010-May-13 + 5.12.1 2010-May-16 + 5.12.2-RC1 2010-Aug-31 + 5.12.2 2010-Sep-06 + Ricardo 5.12.3-RC1 2011-Jan-09 + 5.12.3-RC2 2011-Jan-14 + 5.12.3-RC3 2011-Jan-17 + 5.12.3 2011-Jan-21 + Leon 5.12.4-RC1 2011-Jun-08 + 5.12.4 2011-Jun-20 + Dominic 5.12.5 2012-Nov-10 + + Leon 5.13.0 2010-Apr-20 The 5.13 development track + Ricardo 5.13.1 2010-May-20 + Matt 5.13.2 2010-Jun-22 + David G 5.13.3 2010-Jul-20 + Florian 5.13.4 2010-Aug-20 + Steve 5.13.5 2010-Sep-19 + Miyagawa 5.13.6 2010-Oct-20 + BinGOs 5.13.7 2010-Nov-20 + Zefram 5.13.8 2010-Dec-20 + Jesse 5.13.9 2011-Jan-20 + Ævar 5.13.10 2011-Feb-20 + Florian 5.13.11 2011-Mar-20 + Jesse 5.14.0-RC1 2011-Apr-20 + 5.14.0-RC2 2011-May-04 + 5.14.0-RC3 2011-May-11 + + Jesse 5.14.0 2011-May-14 + + Jesse 5.14.1 2011-Jun-16 The 5.14 maintenance track + Florian 5.14.2-RC1 2011-Sep-19 + 5.14.2 2011-Sep-26 + Dominic 5.14.3 2012-Oct-12 + David M 5.14.4-RC1 2013-Mar-05 + 5.14.4-RC2 2013-Mar-07 + 5.14.4 2013-Mar-10 + + David G 5.15.0 2011-Jun-20 The 5.15 development track + Zefram 5.15.1 2011-Jul-20 + Ricardo 5.15.2 2011-Aug-20 + Stevan 5.15.3 2011-Sep-20 + Florian 5.15.4 2011-Oct-20 + Steve 5.15.5 2011-Nov-20 + Dave R 5.15.6 2011-Dec-20 + BinGOs 5.15.7 2012-Jan-20 + Max M 5.15.8 2012-Feb-20 + Abigail 5.15.9 2012-Mar-20 + Ricardo 5.16.0-RC0 2012-May-10 + 5.16.0-RC1 2012-May-14 + 5.16.0-RC2 2012-May-15 + + Ricardo 5.16.0 2012-May-20 + + Ricardo 5.16.1 2012-Aug-08 The 5.16 maintenance track + 5.16.2 2012-Nov-01 + 5.16.3-RC1 2013-Mar-06 + 5.16.3 2013-Mar-11 + + Zefram 5.17.0 2012-May-26 The 5.17 development track + Jesse L 5.17.1 2012-Jun-20 + TonyC 5.17.2 2012-Jul-20 + Steve 5.17.3 2012-Aug-20 + Florian 5.17.4 2012-Sep-20 + 5.17.5 2012-Oct-20 + Ricardo 5.17.6 2012-Nov-20 + Dave R 5.17.7 2012-Dec-18 + Aaron 5.17.8 2013-Jan-20 + BinGOs 5.17.9 2013-Feb-20 + Max M 5.17.10 2013-Mar-21 + Ricardo 5.17.11 2013-Apr-20 + 5.18.0-RC1 2013-May-11 + 5.18.0-RC2 2013-May-12 + 5.18.0-RC3 2013-May-13 + 5.18.0-RC4 2013-May-15 + + Ricardo 5.18.0 2013-May-18 + + Ricardo 5.18.1-RC1 2013-Aug-01 The 5.18 maintenance track + 5.18.1-RC2 2013-Aug-03 + 5.18.1-RC3 2013-Aug-08 + 5.18.1 2013-Aug-12 + 5.18.2 2014-Jan-06 + 5.18.3-RC1 2014-Sep-17 + 5.18.3-RC2 2014-Sep-27 + 5.18.3 2014-Oct-01 + 5.18.4 2014-Oct-01 + + Ricardo 5.19.0 2013-May-20 The 5.19 development track + David G 5.19.1 2013-Jun-21 + Aristotle 5.19.2 2013-Jul-22 + Steve 5.19.3 2013-Aug-20 + 5.19.4 2013-Sep-20 + 5.19.5 2013-Oct-20 + BinGOs 5.19.6 2013-Nov-20 + Abigail 5.19.7 2013-Dec-20 + Ricardo 5.19.8 2014-Jan-20 + TonyC 5.19.9 2014-Feb-20 + Aaron 5.19.10 2014-Mar-20 + Steve 5.19.11 2014-Apr-20 + Ricardo 5.20.0-RC1 2014-May-16 + + Ricardo 5.20.0 2014-May-27 + + Steve 5.20.1-RC1 2014-Aug-25 The 5.20 maintenance track + 5.20.1-RC2 2014-Sep-07 + 5.20.1 2014-Sep-14 + 5.20.2-RC1 2015-Jan-31 + 5.20.2 2015-Feb-14 + 5.20.3-RC1 2015-Aug-22 + 5.20.3-RC2 2015-Aug-29 + 5.20.3 2015-Sep-12 + + Ricardo 5.21.0 2014-May-27 The 5.21 development track + Matthew H 5.21.1 2014-Jun-20 + Abigail 5.21.2 2014-Jul-20 + Peter 5.21.3 2014-Aug-20 + Steve 5.21.4 2014-Sep-20 + Abigail 5.21.5 2014-Oct-20 + BinGOs 5.21.6 2014-Nov-20 + Max M 5.21.7 2014-Dec-20 + Matthew H 5.21.8 2015-Jan-20 + Sawyer X 5.21.9 2015-Feb-20 + Steve 5.21.10 2015-Mar-20 + 5.21.11 2015-Apr-20 + Ricardo 5.22.0-RC1 2015-May-19 + 5.22.0-RC2 2015-May-21 + + Ricardo 5.22.0 2015-Jun-01 + + Steve 5.22.1-RC1 2015-Oct-31 The 5.22 maintenance track + 5.22.1-RC2 2015-Nov-15 + 5.22.1-RC3 2015-Dec-02 + 5.22.1-RC4 2015-Dec-08 + 5.22.1 2015-Dec-13 + 5.22.2-RC1 2016-Apr-10 + 5.22.2 2016-Apr-29 + 5.22.3-RC1 2016-Jul-17 + 5.22.3-RC2 2016-Jul-25 + 5.22.3-RC3 2016-Aug-11 + 5.22.3-RC4 2016-Oct-12 + 5.22.3-RC5 2017-Jan-02 + 5.22.3 2017-Jan-14 + 5.22.4-RC1 2017-Jul-01 + 5.22.4 2017-Jul-15 + + Ricardo 5.23.0 2015-Jun-20 The 5.23 development track + Matthew H 5.23.1 2015-Jul-20 + 5.23.2 2015-Aug-20 + Peter 5.23.3 2015-Sep-20 + Steve 5.23.4 2015-Oct-20 + Abigail 5.23.5 2015-Nov-20 + David G 5.23.6 2015-Dec-21 + Stevan 5.23.7 2016-Jan-20 + Sawyer X 5.23.8 2016-Feb-20 + Abigail 5.23.9 2016-Mar-20 + Ricardo 5.24.0-RC1 2016-Apr-13 + 5.24.0-RC2 2016-Apr-23 + 5.24.0-RC3 2016-Apr-26 + 5.24.0-RC4 2016-May-02 + 5.24.0-RC5 2016-May-04 + + Ricardo 5.24.0 2016-May-09 + + Steve 5.24.1-RC1 2016-Jul-17 The 5.24 maintenance track + 5.24.1-RC2 2016-Jul-25 + 5.24.1-RC3 2016-Aug-11 + 5.24.1-RC4 2016-Oct-12 + 5.24.1-RC5 2017-Jan-02 + 5.24.1 2017-Jan-14 + 5.24.2-RC1 2017-Jul-01 + 5.24.2 2017-Jul-15 + 5.24.3-RC1 2017-Sep-10 + 5.24.3 2017-Sep-22 + 5.24.4-RC1 2018-Mar-24 + 5.24.4 2018-Apr-14 + + Ricardo 5.25.0 2016-May-09 The 5.25 development track + Sawyer X 5.25.1 2016-May-20 + Matthew H 5.25.2 2016-Jun-20 + Steve 5.25.3 2016-Jul-20 + BinGOs 5.25.4 2016-Aug-20 + Stevan 5.25.5 2016-Sep-20 + Aaron 5.25.6 2016-Oct-20 + Chad 5.25.7 2016-Nov-20 + Sawyer X 5.25.8 2016-Dec-20 + Abigail 5.25.9 2017-Jan-20 + Renee 5.25.10 2017-Feb-20 + Sawyer X 5.25.11 2017-Mar-20 + 5.25.12 2017-Apr-20 + 5.26.0-RC1 2017-May-11 + 5.26.0-RC2 2017-May-23 + + Sawyer X 5.26.0 2017-May-30 + + Steve 5.26.1-RC1 2017-Sep-10 The 5.26 maintenance track + 5.26.1 2017-Sep-22 + 5.26.2-RC1 2018-Mar-24 + 5.26.2 2018-Apr-14 + 5.26.3-RC1 2018-Nov-08 + 5.26.3 2018-Nov-29 + + Sawyer X 5.27.0 2017-May-31 The 5.27 development track + Eric 5.27.1 2017-Jun-20 + Aaron 5.27.2 2017-Jul-20 + Matthew H 5.27.3 2017-Aug-21 + John 5.27.4 2017-Sep-20 + Steve 5.27.5 2017-Oct-20 + Ether 5.27.6 2017-Nov-20 + BinGOs 5.27.7 2017-Dec-20 + Abigail 5.27.8 2018-Jan-20 + Renee 5.27.9 2018-Feb-20 + Todd 5.27.10 2018-Mar-20 + Sawyer X 5.27.11 2018-Apr-20 + 5.28.0-RC1 2018-May-21 + 5.28.0-RC2 2018-Jun-06 + 5.28.0-RC3 2018-Jun-18 + 5.28.0-RC4 2018-Jun-19 + + Sawyer X 5.28.0 2018-Jun-22 + + Steve 5.28.1-RC1 2018-Nov-08 The 5.28 maintenance track + 5.28.1 2018-Nov-29 + 5.28.2-RC1 2019-Apr-05 + 5.28.2 2019-Apr-19 + 5.28.3-RC1 2020-May-18 + 5.28.3 2020-Jun-01 + + Sawyer X 5.29.0 2018-Jun-26 The 5.29 development track + Steve 5.29.1 2018-Jul-20 + BinGOs 5.29.2 2018-Aug-20 + John 5.29.3 2018-Sep-20 + Aaron 5.29.4 2018-Oct-20 + Ether 5.29.5 2018-Nov-20 + Abigail 5.29.6 2018-Dec-18 + 5.29.7 2019-Jan-20 + Nicolas R 5.29.8 2019-Feb-20 + Zak Elep 5.29.9 2019-Mar-20 + Sawyer X 5.29.10 2019-Apr-20 + 5.30.0-RC1 2019-May-11 + 5.30.0-RC2 2019-May-17 + + Sawyer X 5.30.0 2019-May-22 + + Steve 5.30.1-RC1 2019-Oct-27 The 5.30 maintenance track + 5.30.1 2019-Nov-10 + 5.30.2-RC1 2020-Feb-29 + 5.30.2 2020-Mar-14 + 5.30.3-RC1 2020-May-18 + 5.30.3 2020-Jun-01 + + Sawyer X 5.31.0 2019-May-24 The 5.31 development track + Ether 5.31.1 2019-Jun-20 + Steve 5.31.2 2019-Jul-20 + Tom H 5.31.3 2019-Aug-20 + Max M 5.31.4 2019-Sep-20 + Steve 5.31.5 2019-Oct-20 + BinGOs 5.31.6 2019-Nov-20 + Nicolas R 5.31.7 2019-Dec-20 + Matthew H 5.31.8 2020-Jan-20 + Renee 5.31.9 2020-Feb-20 + Sawyer X 5.31.10 2020-Mar-20 + 5.31.11 2020-Apr-28 + 5.32.0-RC0 2020-May-30 + 5.32.0-RC1 2020-Jun-07 + + Sawyer X 5.32.0 2020-Jun-20 + + Steve 5.32.1-RC1 2021-Jan-09 The 5.32 maintenance track + 5.32.1 2021-Jan-23 + + Sawyer X 5.33.0 2020-Jul-17 The 5.33 development track + Ether 5.33.1 2020-Aug-20 + Sawyer X 5.33.2 2020-Sep-20 + Steve 5.33.3 2020-Oct-20 + Tom H 5.33.4 2020-Nov-20 + Max M 5.33.5 2020-Dec-20 + Richard L 5.33.6 2021-Jan-20 + Renee 5.33.7 2021-Feb-20 + Nicolas R 5.33.8 2021-Mar-20 + Todd R 5.33.9 2021-Apr-20 + Sawyer X 5.34.0-RC1 2021-May-04 + 5.34.0-RC2 2021-May-15 + + Sawyer X 5.34.0 2021-May-20 + + Steve 5.34.1-RC1 2022-Feb-27 The 5.34 maintenance track + 5.34.1-RC2 2022-Mar-06 + 5.34.1 2022-Mar-13 + Paul E 5.34.2 2023-Nov-25 + 5.34.3 2023-Nov-29 + + Ricardo 5.35.0 2021-May-20 The 5.35 development track + Max 5.35.1 2021-Jun-20 + Neil B 5.35.2 2021-Jul-23 + Ether 5.35.3 2021-Aug-20 + Matthew H 5.35.4 2021-Sep-20 + Leon T 5.35.5 2021-Oct-21 + Richard L 5.35.6 2021-Nov-20 + Neil B 5.35.7 2021-Dec-20 + Nicolas R 5.35.8 2022-Jan-20 + Renee 5.35.9 2022-Feb-20 + Sawyer X 5.35.10 2022-Mar-20 + Steve 5.35.11 2022-Apr-20 + Ricardo 5.36.0-RC1 2022-May-20 + 5.36.0-RC2 2022-May-20 + 5.36.0-RC3 2022-May-22 + + Ricardo 5.36.0 2022-May-27 + + Steve 5.36.1-RC1 2023-Apr-10 The 5.36 maintenance track + 5.36.1-RC2 2023-Apr-11 + 5.36.1-RC3 2023-Apr-16 + 5.36.1 2023-Apr-23 + Paul E 5.36.2 2023-Nov-25 + 5.36.3 2023-Nov-29 + + Ricardo 5.37.0 2022-May-27 The 5.37 development track + Matthew H 5.37.1 2022-Jun-20 + Nicolas R 5.37.2 2022-Jul-20 + Neil B 5.37.3 2022-Aug-20 + Ether 5.37.4 2022-Sep-20 + Todd R 5.37.5 2022-Oct-20 + Max M 5.37.6 2022-Nov-20 + Richard L 5.37.7 2022-Dec-20 + Renee 5.37.8 2023-Jan-20 + Ether 5.37.9 2023-Feb-20 + Yves 5.37.10 2023-Mar-20 + Steve 5.37.11 2023-Apr-20 + Ricardo 5.38.0-RC1 2023-Jun-15 + 5.38.0-RC2 2023-Jun-23 + + Ricardo 5.38.0 2023-Jul-02 + + Paul E 5.38.1 2023-Nov-25 The 5.38 maintenance track + 5.38.2 2023-Nov-29 + Steve 5.38.3-RC1 2025-Jan-05 + 5.38.3 2025-Jan-18 + 5.38.4-RC1 2025-Mar-30 + 5.38.4 2025-Apr-13 + 5.38.5-RC1 2025-Jul-21 + 5.38.5 2025-Aug-03 + + Ricardo 5.39.0 2023-Jun-30 The 5.39 development track + Steve 5.39.1 2023-Jul-20 + Paul E 5.39.2 2023-Aug-20 + Matthew H 5.39.3 2023-Sep-20 + Graham K 5.39.4 2023-Oct-25 + Ether 5.39.5 2023-Nov-20 + Philippe 5.39.6 2023-Dec-30 + Max 5.39.7 2024-Jan-20 + Renee 5.39.8 2024-Feb-23 + Paul E 5.39.9 2024-Mar-20 + 5.39.10 2024-Apr-29 + Graham K 5.40.0-RC1 2024-May-24 + 5.40.0-RC2 2024-Jun-04 + + Graham K 5.40.0 2024-Jun-09 + + Steve 5.40.1-RC1 2025-Jan-05 The 5.40 maintenance track + 5.40.1 2025-Jan-18 + 5.40.2-RC1 2025-Mar-30 + 5.40.2 2025-Apr-13 + 5.40.3-RC1 2025-Jul-21 + 5.40.3 2025-Aug-03 + 5.40.4-RC1 2026-Mar-22 + 5.40.4 2026-Mar-29 + + Graham K 5.41.0 2024-Jun-10 The 5.41 development track + Philippe 5.41.1 2024-Jul-02 + Ether 5.41.2 2024-Jul-20 + Philippe 5.41.3 2024-Aug-29 + Thibault 5.41.4 2024-Sep-20 + Richard L 5.41.5 2024-Oct-20 + Thibault 5.41.6 2024-Nov-20 + Max 5.41.7 2024-Dec-20 + Steve 5.41.8 2025-Jan-20 + Richard L 5.41.9 2025-Feb-24 + Lukas 5.41.10 2025-Mar-21 + Ether 5.41.11 2025-Apr-20 + 5.41.12 2025-Apr-21 + Philippe 5.41.13 2025-May-28 + Thibault 5.42.0-RC1 2025-Jun-24 + 5.42.0-RC2 2025-Jun-27 + 5.42.0-RC3 2025-Jul-01 + + Philippe 5.42.0 2025-Jul-03 + + Steve 5.42.1-RC1 2026-Feb-22 The 5.42 maintenance track + 5.42.1 2026-Mar-08 + 5.42.2-RC1 2026-Mar-22 + 5.42.2 2026-Mar-29 + + Philippe 5.43.0 2025-Jul-03 The 5.43 development track + Richard L 5.43.1 2025-Jul-20 + Ether 5.43.2 2025-Aug-20 + Thibault 5.43.3 2025-Sep-23 + Eric 5.43.4 2025-Oct-22 + Thibault 5.43.5 2025-Nov-20 + Steve 5.43.6 2025-Dec-20 + Max 5.43.7 2026-Jan-19 + Richard L 5.43.8 2026-Feb-20 + Eric 5.43.9 2026-Mar-20 =head2 SELECTED RELEASE SIZES @@ -1244,6 +1280,8 @@ the Perl source distribution for somewha win32 1313 65 1326 65 1331 65 x2p - - - - - - + ====================================================================== + 5.32.0 5.34.0 5.36.0 Configure 588 1 592 1 603 1 @@ -1262,20 +1300,22 @@ the Perl source distribution for somewha vos 12 7 12 7 8 7 win32 1011 47 1001 46 966 45 - 5.38.0 + ====================================================================== + + 5.38.0 5.40.0 5.42.0 - Configure 604 1 - Cross 122 15 - h2pl 13 15 - hints 358 83 - os2 538 70 - plan9 322 20 - Porting 1640 80 - qnx 1 4 - utils 606 52 - vms 544 12 - vos 8 7 - win32 982 45 + Configure 604 1 613 1 613 1 + Cross 122 15 126 15 126 15 + h2pl 13 15 24 15 24 15 + hints 358 83 362 84 362 84 + os2 538 70 580 70 580 70 + plan9 322 20 330 20 330 20 + Porting 1640 80 1660 80 1670 78 + qnx 1 4 5 4 5 4 + utils 606 52 773 52 773 52 + vms 544 12 548 12 547 12 + vos 8 7 12 7 12 7 + win32 982 45 1016 47 1025 47 =head2 SELECTED PATCH SIZES Index: gnu/usr.bin/perl/t/class/gh23511.t =================================================================== RCS file: gnu/usr.bin/perl/t/class/gh23511.t diff -N gnu/usr.bin/perl/t/class/gh23511.t --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ gnu/usr.bin/perl/t/class/gh23511.t 29 Mar 2026 16:31:45 -0000 @@ -0,0 +1,23 @@ +#!./perl + +BEGIN { + chdir 't' if -d 't'; + require './test.pl'; + set_up_inc('../lib'); +} + +use v5.36; +use feature 'class'; +no warnings 'experimental::class'; + +# this used to segfault: GH #23511 +eval <<'CLASS'; +class MyTest { + $id = 6; + field $f1 :reader; + field $f2 :writer; +} +CLASS +like $@, qr/^Global symbol "\$id" requires explicit package name /, "we get the expected 'undeclared variable' error"; + +done_testing; Index: gnu/usr.bin/perl/t/op/ref.t =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/t/op/ref.t,v diff -u -p -a -u -p -r1.21 ref.t --- gnu/usr.bin/perl/t/op/ref.t 28 Jan 2025 01:06:16 -0000 1.21 +++ gnu/usr.bin/perl/t/op/ref.t 29 Mar 2026 16:31:45 -0000 @@ -8,7 +8,7 @@ BEGIN { use strict qw(refs subs); -plan(257); +plan(265); # Test this first before we extend the stack with other operations. # This caused an asan failure due to a bad write past the end of the stack. @@ -911,6 +911,47 @@ EOF my @exp = ("0") x $n; fresh_perl_is($code, "@exp", { stderr => 1 }, 'rt#130861: heap uaf in pp_rv2sv'); +} + +# GH 18669 +# The correct autovivification lvalue ref context should be propagated to +# both branches of a ?:. So in something like: +# @{ $cond ? $h{a} : $h{b} } = ...; +# the helem ops on *both* sides of the conditional should get the DREFAV +# flag set, indicating that if the hash element doesn't exist, it should +# be autovivified as an *array ref*. +# + +{ + my $x = { arr => undef }; + eval { + push(@{ $x->{ decide } ? $x->{ not_here } : $x->{ new } }, "mana"); + }; + + is($@, "", "GH 18669: push on non-existent hash ref entry: no errors"); + is(eval {$x->{new}[0] }, 'mana', + "GH 18669: push on non-existent hash ref entry: autovivifies" + ); + + $x = { arr => undef }; + eval { + push(@{ $x->{ decide } ? $x->{ not_here } : $x->{ arr } }, "mana"); + }; + + is($@, "", "GH 18669: push on undef hash ref entry: no errors"); + is(eval { $x->{arr}[0] }, 'mana', + "GH 18669: push on undef hash ref entry: autovivifies" + ); + + # try both branches + for my $cond (0, 1) { + my %h; + eval { @{ $cond ? $h{p} : $h{q} } = 99; }; + is($@, "", "GH 18669: array assign on $cond cond: no errors"); + is($h{$cond ? 'p' : 'q'}[0], 99, + "GH 18669: array assign on $cond cond: autovivifies" + ); + } } # Bit of a hack to make test.pl happy. There are 3 more tests after it leaves. Index: gnu/usr.bin/perl/t/porting/customized.dat =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/t/porting/customized.dat,v diff -u -p -a -u -p -r1.27 customized.dat --- gnu/usr.bin/perl/t/porting/customized.dat 26 Dec 2025 22:15:23 -0000 1.27 +++ gnu/usr.bin/perl/t/porting/customized.dat 29 Mar 2026 16:31:45 -0000 @@ -10,6 +10,7 @@ MIME::Base64 cpan/MIME-Base64/Base64.xs MIME::Base64 cpan/MIME-Base64/lib/MIME/Base64.pm 18e38d197c7c83f96b24f48bef514e93908e6a82 MIME::Base64 cpan/MIME-Base64/lib/MIME/QuotedPrint.pm 36cbb455ab57b9bbca7e86f50987c8b1df1a8122 Pod::Perldoc cpan/Pod-Perldoc/lib/Pod/Perldoc.pm d97aa26b722e6e3120b19ee0d7cf9af04dfdfb7f +Pod::Simple cpan/Pod-Simple/lib/Pod/Simple/HTMLLegacy.pm 2ccd1b70ca64410a8c05c228ff91420355d3d685 Scalar::Util cpan/Scalar-List-Utils/lib/List/Util.pm 98dbc1cb98d448bd929fe42cf0fc47da978df196 Scalar::Util cpan/Scalar-List-Utils/lib/List/Util/XS.pm 0e2ef5dcbebb5d808edd4b7adec8f6553cdde916 Scalar::Util cpan/Scalar-List-Utils/lib/Scalar/Util.pm dddbfb9e26de572f88598cdf06353902718eb2ec @@ -22,5 +23,5 @@ Win32API::File cpan/Win32API-File/File.p Win32API::File cpan/Win32API-File/File.xs beb870fed4490d2faa547b4a8576b8d64d1d27c5 autodie cpan/autodie/t/utime.t f94c3000b5b23db59df64895594050d7151f8333 podlators pod/perlpodstyle.pod 3430e61d84673b62944ceed6d023bfd5aebe3847 -version vutil.c 8f1e65848649b125b6e2d3a91d54f5e147d12e41 version cpan/version/lib/version.pm aa9f25fe6f6815139a9fb85d817b4e2802732c03 +version vutil.c b575383bee2e6bb4eee1b63cfa2d4efa54401e02 Index: gnu/usr.bin/perl/vms/descrip_mms.template =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/vms/descrip_mms.template,v diff -u -p -a -u -p -r1.17 descrip_mms.template --- gnu/usr.bin/perl/vms/descrip_mms.template 26 Dec 2025 22:14:22 -0000 1.17 +++ gnu/usr.bin/perl/vms/descrip_mms.template 29 Mar 2026 16:31:45 -0000 @@ -298,7 +298,7 @@ utils : $(utils1) $(utils2) $(utils3) $( extra.pods : miniperl @ @extra_pods.com -PERLDELTA_CURRENT = [.pod]perl5420delta.pod +PERLDELTA_CURRENT = [.pod]perl5422delta.pod $(PERLDELTA_CURRENT) : [.pod]perldelta.pod Copy/NoConfirm/Log $(MMS$SOURCE) $(PERLDELTA_CURRENT) Index: gnu/usr.bin/perl/win32/GNUmakefile =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/win32/GNUmakefile,v diff -u -p -a -u -p -r1.32 GNUmakefile --- gnu/usr.bin/perl/win32/GNUmakefile 26 Dec 2025 22:16:26 -0000 1.32 +++ gnu/usr.bin/perl/win32/GNUmakefile 29 Mar 2026 16:31:45 -0000 @@ -63,7 +63,7 @@ INST_TOP := $(INST_DRV)\perl # versioned installation can be obtained by setting INST_TOP above to a # path that includes an arbitrary version string. # -#INST_VER := \5.42.0 +#INST_VER := \5.42.2 # # Comment this out if you DON'T want your perl installation to have @@ -1644,7 +1644,7 @@ utils: $(HAVEMINIPERL) ..\utils\Makefile copy ..\README.tw ..\pod\perltw.pod copy ..\README.vos ..\pod\perlvos.pod copy ..\README.win32 ..\pod\perlwin32.pod - copy ..\pod\perldelta.pod ..\pod\perl5420delta.pod + copy ..\pod\perldelta.pod ..\pod\perl5422delta.pod $(MINIPERL) -I..\lib $(PL2BAT) $(UTILS) $(MINIPERL) -I..\lib ..\autodoc.pl -c "win32\$(CONFIG_H)" .. $(MINIPERL) -I..\lib ..\pod\perlmodlib.PL -q .. @@ -1745,7 +1745,7 @@ distclean: realclean -if exist $(LIBDIR)\Win32API rmdir /s /q $(LIBDIR)\Win32API -if exist $(LIBDIR)\XS rmdir /s /q $(LIBDIR)\XS -cd $(PODDIR) && del /f *.html *.bat roffitall \ - perl5420delta.pod perlaix.pod perlamiga.pod perlandroid.pod \ + perl5422delta.pod perlaix.pod perlamiga.pod perlandroid.pod \ perlapi.pod perlbs2000.pod perlcn.pod perlcygwin.pod \ perlfreebsd.pod perlhaiku.pod perlhpux.pod perlhurd.pod \ perlintern.pod perlirix.pod perljp.pod perlko.pod perllinux.pod \ Index: gnu/usr.bin/perl/win32/Makefile =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/win32/Makefile,v diff -u -p -a -u -p -r1.57 Makefile --- gnu/usr.bin/perl/win32/Makefile 26 Dec 2025 22:16:26 -0000 1.57 +++ gnu/usr.bin/perl/win32/Makefile 29 Mar 2026 16:31:45 -0000 @@ -37,7 +37,7 @@ INST_TOP = $(INST_DRV)\perl # versioned installation can be obtained by setting INST_TOP above to a # path that includes an arbitrary version string. # -#INST_VER = \5.42.0 +#INST_VER = \5.42.2 # # Comment this out if you DON'T want your perl installation to have @@ -1171,7 +1171,7 @@ utils: $(PERLEXE) ..\utils\Makefile copy ..\README.tw ..\pod\perltw.pod copy ..\README.vos ..\pod\perlvos.pod copy ..\README.win32 ..\pod\perlwin32.pod - copy ..\pod\perldelta.pod ..\pod\perl5420delta.pod + copy ..\pod\perldelta.pod ..\pod\perl5422delta.pod cd ..\win32 $(PERLEXE) $(PL2BAT) $(UTILS) $(MINIPERL) -I..\lib ..\autodoc.pl -c "win32\$(CONFIG_H)" .. @@ -1273,7 +1273,7 @@ distclean: realclean -if exist $(LIBDIR)\Win32API rmdir /s /q $(LIBDIR)\Win32API -if exist $(LIBDIR)\XS rmdir /s /q $(LIBDIR)\XS -cd $(PODDIR) && del /f *.html *.bat roffitall \ - perl5420delta.pod perlaix.pod perlamiga.pod perlandroid.pod \ + perl5422delta.pod perlaix.pod perlamiga.pod perlandroid.pod \ perlapi.pod perlbs2000.pod perlcn.pod perlcygwin.pod \ perlfreebsd.pod perlhaiku.pod perlhpux.pod perlhurd.pod \ perlintern.pod perlirix.pod perljp.pod perlko.pod perllinux.pod \ Index: gnu/usr.bin/perl/win32/perllib.c =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/win32/perllib.c,v diff -u -p -a -u -p -r1.18 perllib.c --- gnu/usr.bin/perl/win32/perllib.c 26 Dec 2025 22:14:22 -0000 1.18 +++ gnu/usr.bin/perl/win32/perllib.c 29 Mar 2026 16:31:45 -0000 @@ -51,6 +51,7 @@ xs_init(pTHX) void win32_checkTLS(PerlInterpreter *host_perl) { +#ifdef USE_ITHREADS /* GCurThdId() is lightweight, but b/c of the ctrl-c/signals sometimes firing in other random WinOS threads, that make the TIDs go out of sync. This isn't always an error, although high chance of a SEGV in the next @@ -67,6 +68,13 @@ win32_checkTLS(PerlInterpreter *host_per } host_perl->Isys_intern.cur_tid = tid; } +#else + dTHX; + if (host_perl != my_perl) { + int *nowhere = NULL; + abort(); + } +#endif } EXTERN_C void Index: gnu/usr.bin/perl/win32/pod.mak =================================================================== RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/win32/pod.mak,v diff -u -p -a -u -p -r1.32 pod.mak --- gnu/usr.bin/perl/win32/pod.mak 26 Dec 2025 22:14:22 -0000 1.32 +++ gnu/usr.bin/perl/win32/pod.mak 29 Mar 2026 16:31:45 -0000 @@ -77,10 +77,14 @@ POD = perl.pod \ perl5382delta.pod \ perl5383delta.pod \ perl5384delta.pod \ + perl5385delta.pod \ perl5400delta.pod \ perl5401delta.pod \ perl5402delta.pod \ + perl5403delta.pod \ perl5420delta.pod \ + perl5421delta.pod \ + perl5422delta.pod \ perl561delta.pod \ perl56delta.pod \ perl581delta.pod \ @@ -258,10 +262,14 @@ MAN = perl.man \ perl5382delta.man \ perl5383delta.man \ perl5384delta.man \ + perl5385delta.man \ perl5400delta.man \ perl5401delta.man \ perl5402delta.man \ + perl5403delta.man \ perl5420delta.man \ + perl5421delta.man \ + perl5422delta.man \ perl561delta.man \ perl56delta.man \ perl581delta.man \ @@ -439,10 +447,14 @@ HTML = perl.html \ perl5382delta.html \ perl5383delta.html \ perl5384delta.html \ + perl5385delta.html \ perl5400delta.html \ perl5401delta.html \ perl5402delta.html \ + perl5403delta.html \ perl5420delta.html \ + perl5421delta.html \ + perl5422delta.html \ perl561delta.html \ perl56delta.html \ perl581delta.html \ @@ -620,10 +632,14 @@ TEX = perl.tex \ perl5382delta.tex \ perl5383delta.tex \ perl5384delta.tex \ + perl5385delta.tex \ perl5400delta.tex \ perl5401delta.tex \ perl5402delta.tex \ + perl5403delta.tex \ perl5420delta.tex \ + perl5421delta.tex \ + perl5422delta.tex \ perl561delta.tex \ perl56delta.tex \ perl581delta.tex \