Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package perl-HTTP-Date for openSUSE:Factory checked in at 2026-07-23 23:08:21 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/perl-HTTP-Date (Old) and /work/SRC/openSUSE:Factory/.perl-HTTP-Date.new.2004 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "perl-HTTP-Date" Thu Jul 23 23:08:21 2026 rev:15 rq:1366823 version:6.80.0 Changes: -------- --- /work/SRC/openSUSE:Factory/perl-HTTP-Date/perl-HTTP-Date.changes 2026-06-30 15:11:41.996520514 +0200 +++ /work/SRC/openSUSE:Factory/.perl-HTTP-Date.new.2004/perl-HTTP-Date.changes 2026-07-23 23:08:30.712431563 +0200 @@ -1,0 +2,13 @@ +Thu Jul 9 08:48:50 UTC 2026 - Tina Müller <[email protected]> + +- updated to 6.80.0 (6.08) + see /usr/share/doc/packages/perl-HTTP-Date/Changes + + 6.08 2026-07-09 02:04:21Z + + - [SECURITY] Reject input longer than 64 characters in parse_date() + to prevent quadratic regex backtracking (a denial of service) on + hostile date strings. Fixes CVE-2026-14741. (Olaf Alders) + bsc#1271705 + +------------------------------------------------------------------- Old: ---- HTTP-Date-6.07.tar.gz New: ---- HTTP-Date-6.08.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ perl-HTTP-Date.spec ++++++ --- /var/tmp/diff_new_pack.0U8txW/_old 2026-07-23 23:08:31.612462980 +0200 +++ /var/tmp/diff_new_pack.0U8txW/_new 2026-07-23 23:08:31.620463259 +0200 @@ -18,10 +18,10 @@ %define cpan_name HTTP-Date Name: perl-HTTP-Date -Version: 6.70.0 +Version: 6.80.0 Release: 0 -# 6.07 -> normalize -> 6.70.0 -%define cpan_version 6.07 +# 6.08 -> normalize -> 6.80.0 +%define cpan_version 6.08 License: Artistic-1.0 OR GPL-1.0-or-later Summary: HTTP::Date - date conversion routines URL: https://metacpan.org/release/%{cpan_name} @@ -31,6 +31,7 @@ BuildArch: noarch BuildRequires: perl BuildRequires: perl-macros +BuildRequires: perl(Test::More) >= 0.96 BuildRequires: perl(Time::Local) >= 1.28 BuildRequires: perl(Time::Zone) Requires: perl(Time::Local) >= 1.28 @@ -87,6 +88,12 @@ If the date is unrecognized, then the empty list is returned ('undef' in scalar context). +As a safeguard against pathological input, strings longer than 64 +characters are rejected without being parsed. The length is measured on the +string as given, before any leading or trailing whitespace is trimmed, so +heavily padded input may be rejected even if its trimmed payload would fit. +Every date format this module recognizes is far shorter than this limit. + The function is able to parse the following formats: "Wed, 09 Feb 1994 22:23:32 GMT" -- HTTP format ++++++ HTTP-Date-6.07.tar.gz -> HTTP-Date-6.08.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/HTTP-Date-6.07/Changes new/HTTP-Date-6.08/Changes --- old/HTTP-Date-6.07/Changes 2026-06-25 17:12:11.000000000 +0200 +++ new/HTTP-Date-6.08/Changes 2026-07-09 04:04:24.000000000 +0200 @@ -1,5 +1,11 @@ Change history for HTTP-Date +6.08 2026-07-09 02:04:21Z + + - [SECURITY] Reject input longer than 64 characters in parse_date() + to prevent quadratic regex backtracking (a denial of service) on + hostile date strings. Fixes CVE-2026-14741. (Olaf Alders) + 6.07 2026-06-25 15:12:09Z - Add test with Time::Zone (GH#25) (Michal Josef Špaček) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/HTTP-Date-6.07/MANIFEST new/HTTP-Date-6.08/MANIFEST --- old/HTTP-Date-6.07/MANIFEST 2026-06-25 17:12:11.000000000 +0200 +++ new/HTTP-Date-6.08/MANIFEST 2026-07-09 04:04:24.000000000 +0200 @@ -18,6 +18,7 @@ t/00-report-prereqs.t t/date.t t/numeric-date-order.t +t/redos.t t/unicode-digits.t tidyall.ini xt/author/eol.t diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/HTTP-Date-6.07/META.json new/HTTP-Date-6.08/META.json --- old/HTTP-Date-6.07/META.json 2026-06-25 17:12:11.000000000 +0200 +++ new/HTTP-Date-6.08/META.json 2026-07-09 04:04:24.000000000 +0200 @@ -75,7 +75,8 @@ "File::Spec" : "0", "IO::Handle" : "0", "IPC::Open3" : "0", - "Test::More" : "0", + "Test::More" : "0.96", + "Time::HiRes" : "0", "warnings" : "0" } } @@ -94,7 +95,7 @@ "x_IRC" : "irc://irc.perl.org/#lwp", "x_MailingList" : "mailto:[email protected]" }, - "version" : "6.07", + "version" : "6.08", "x_Dist_Zilla" : { "perl" : { "version" : "5.042002" @@ -639,7 +640,7 @@ "branch" : null, "changelog" : "Changes", "signed" : 0, - "tag" : "v6.07", + "tag" : "v6.08", "tag_format" : "v%V", "tag_message" : "v%V" }, @@ -739,6 +740,17 @@ "version" : "6.037" }, { + "class" : "Dist::Zilla::Plugin::Prereqs", + "config" : { + "Dist::Zilla::Plugin::Prereqs" : { + "phase" : "test", + "type" : "requires" + } + }, + "name" : "TestRequires", + "version" : "6.037" + }, + { "class" : "Dist::Zilla::Plugin::Test::ChangesHasContent", "name" : "Test::ChangesHasContent", "version" : "0.011" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/HTTP-Date-6.07/META.yml new/HTTP-Date-6.08/META.yml --- old/HTTP-Date-6.07/META.yml 2026-06-25 17:12:11.000000000 +0200 +++ new/HTTP-Date-6.08/META.yml 2026-07-09 04:04:24.000000000 +0200 @@ -7,7 +7,8 @@ File::Spec: '0' IO::Handle: '0' IPC::Open3: '0' - Test::More: '0' + Test::More: '0.96' + Time::HiRes: '0' warnings: '0' configure_requires: ExtUtils::MakeMaker: '0' @@ -35,7 +36,7 @@ bugtracker: https://github.com/libwww-perl/HTTP-Date/issues homepage: https://github.com/libwww-perl/HTTP-Date repository: https://github.com/libwww-perl/HTTP-Date.git -version: '6.07' +version: '6.08' x_Dist_Zilla: perl: version: '5.042002' @@ -456,7 +457,7 @@ branch: ~ changelog: Changes signed: 0 - tag: v6.07 + tag: v6.08 tag_format: v%V tag_message: v%V Dist::Zilla::Role::Git::Repo: @@ -529,6 +530,14 @@ name: Prereqs version: '6.037' - + class: Dist::Zilla::Plugin::Prereqs + config: + Dist::Zilla::Plugin::Prereqs: + phase: test + type: requires + name: TestRequires + version: '6.037' + - class: Dist::Zilla::Plugin::Test::ChangesHasContent name: Test::ChangesHasContent version: '0.011' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/HTTP-Date-6.07/Makefile.PL new/HTTP-Date-6.08/Makefile.PL --- old/HTTP-Date-6.07/Makefile.PL 2026-06-25 17:12:11.000000000 +0200 +++ new/HTTP-Date-6.08/Makefile.PL 2026-07-09 04:04:24.000000000 +0200 @@ -27,10 +27,11 @@ "File::Spec" => 0, "IO::Handle" => 0, "IPC::Open3" => 0, - "Test::More" => 0, + "Test::More" => "0.96", + "Time::HiRes" => 0, "warnings" => 0 }, - "VERSION" => "6.07", + "VERSION" => "6.08", "test" => { "TESTS" => "t/*.t" } @@ -43,7 +44,8 @@ "File::Spec" => 0, "IO::Handle" => 0, "IPC::Open3" => 0, - "Test::More" => 0, + "Test::More" => "0.96", + "Time::HiRes" => 0, "Time::Local" => "1.28", "Time::Zone" => 0, "strict" => 0, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/HTTP-Date-6.07/README.md new/HTTP-Date-6.08/README.md --- old/HTTP-Date-6.07/README.md 2026-06-25 17:12:11.000000000 +0200 +++ new/HTTP-Date-6.08/README.md 2026-07-09 04:04:24.000000000 +0200 @@ -4,7 +4,7 @@ # VERSION -version 6.07 +version 6.08 # SYNOPSIS @@ -63,6 +63,12 @@ If the date is unrecognized, then the empty list is returned (`undef` in scalar context). + As a safeguard against pathological input, strings longer than 64 + characters are rejected without being parsed. The length is measured on the + string as given, before any leading or trailing whitespace is trimmed, so + heavily padded input may be rejected even if its trimmed payload would fit. + Every date format this module recognizes is far shorter than this limit. + The function is able to parse the following formats: "Wed, 09 Feb 1994 22:23:32 GMT" -- HTTP format diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/HTTP-Date-6.07/cpanfile new/HTTP-Date-6.08/cpanfile --- old/HTTP-Date-6.07/cpanfile 2026-06-25 17:12:11.000000000 +0200 +++ new/HTTP-Date-6.08/cpanfile 2026-07-09 04:04:24.000000000 +0200 @@ -12,7 +12,8 @@ requires "File::Spec" => "0"; requires "IO::Handle" => "0"; requires "IPC::Open3" => "0"; - requires "Test::More" => "0"; + requires "Test::More" => "0.96"; + requires "Time::HiRes" => "0"; requires "warnings" => "0"; }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/HTTP-Date-6.07/dist.ini new/HTTP-Date-6.08/dist.ini --- old/HTTP-Date-6.07/dist.ini 2026-06-25 17:12:11.000000000 +0200 +++ new/HTTP-Date-6.08/dist.ini 2026-07-09 04:04:24.000000000 +0200 @@ -21,6 +21,11 @@ perl = 5.006002 Time::Local = 1.28 +; t/redos.t uses subtest(), which needs a Test::More newer than the one +; bundled with older perls (e.g. 5.10/5.12 ship < 0.96). +[Prereqs / TestRequires] +Test::More = 0.96 + ; We run release tests in travis. but make the changes-has-content test TODO only for master. ; This will prod pull request submitters to add a Changes entry. [Test::ChangesHasContent] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/HTTP-Date-6.07/lib/HTTP/Date.pm new/HTTP-Date-6.08/lib/HTTP/Date.pm --- old/HTTP-Date-6.07/lib/HTTP/Date.pm 2026-06-25 17:12:11.000000000 +0200 +++ new/HTTP-Date-6.08/lib/HTTP/Date.pm 2026-07-09 04:04:24.000000000 +0200 @@ -2,7 +2,7 @@ use strict; -our $VERSION = '6.07'; +our $VERSION = '6.08'; require Exporter; our @ISA = qw(Exporter); @@ -88,6 +88,14 @@ local ($_) = shift; return unless defined; + # Reject over-long input up front, before any regex runs, so hostile + # strings cannot drive the parsing regexes into pathological backtracking. + # Length is measured as given (leading/trailing whitespace included). This + # cap is a security limit, not a tunable: every format we accept is far + # shorter, and the parsing regexes still contain adjacent unbounded + # quantifiers, so raising it demands re-benchmarking against hostile input. + return if length($_) > 64; + # More lax parsing below s/^\s+//; # kill leading space s/^(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)[a-z]*,?\s*//i; # Useless weekday @@ -289,7 +297,7 @@ =head1 VERSION -version 6.07 +version 6.08 =head1 SYNOPSIS @@ -350,6 +358,12 @@ If the date is unrecognized, then the empty list is returned (C<undef> in scalar context). +As a safeguard against pathological input, strings longer than 64 +characters are rejected without being parsed. The length is measured on the +string as given, before any leading or trailing whitespace is trimmed, so +heavily padded input may be rejected even if its trimmed payload would fit. +Every date format this module recognizes is far shorter than this limit. + The function is able to parse the following formats: "Wed, 09 Feb 1994 22:23:32 GMT" -- HTTP format diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/HTTP-Date-6.07/t/00-report-prereqs.dd new/HTTP-Date-6.08/t/00-report-prereqs.dd --- old/HTTP-Date-6.07/t/00-report-prereqs.dd 2026-06-25 17:12:11.000000000 +0200 +++ new/HTTP-Date-6.08/t/00-report-prereqs.dd 2026-07-09 04:04:24.000000000 +0200 @@ -53,7 +53,8 @@ 'File::Spec' => '0', 'IO::Handle' => '0', 'IPC::Open3' => '0', - 'Test::More' => '0', + 'Test::More' => '0.96', + 'Time::HiRes' => '0', 'warnings' => '0' } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/HTTP-Date-6.07/t/redos.t new/HTTP-Date-6.08/t/redos.t --- old/HTTP-Date-6.07/t/redos.t 1970-01-01 01:00:00.000000000 +0100 +++ new/HTTP-Date-6.08/t/redos.t 2026-07-09 04:04:24.000000000 +0200 @@ -0,0 +1,82 @@ +#!perl + +use strict; +use warnings; + +use Test::More; +use Time::HiRes qw(time); +use HTTP::Date qw(str2time parse_date); + +# Regression test: parse_date must not exhibit catastrophic (quadratic) +# backtracking on hostile input. A valid-looking date prefix followed by a +# long interior run of digits, letters, or whitespace and a trailing junk +# character used to force the parsing regex to explore O(N^2) states, so a +# ~40 KB string burned tens of seconds of CPU -- a denial of service. +# parse_date now rejects input longer than the cap below, up front, so such +# strings are handled instantly. + +# The length cap parse_date enforces. It is hardcoded in HTTP::Date (a +# security limit, not a knob), so mirror the value here; keep the two in sync. +my $LIMIT = 64; + +subtest 'length guard rejects over-long input' => sub { + my $good = 'Wed, 09 Feb 1994 22:23:32 GMT'; + ok( defined parse_date($good), 'a normal date parses' ); + + # Padding a date that parses fine on its own pushes it past the limit and + # it is rejected -- a deterministic proof the guard fires, no timing needed. + my $padded = $good . ( q{ } x $LIMIT ); + cmp_ok( + length $padded, '>', $LIMIT, + 'padded string exceeds the length limit' + ); + is( parse_date($padded), undef, 'parse_date rejects over-length input' ); + is( str2time($padded), undef, 'str2time rejects over-length input too' ); +}; + +subtest 'length guard boundary is exactly the cap' => sub { + + # The check is "> $LIMIT", so a string of exactly the limit is still + # considered and one character longer is rejected. Guards against a future + # off-by-one turning the cap into >= (which would reject a legal boundary). + my $limit = $LIMIT; + + my $at_limit = 'Wed, 09 Feb 1994 22:23:32 GMT'; + $at_limit .= q{ } x ( $limit - length $at_limit ); # pad up to the limit + is( length $at_limit, $limit, "test string is exactly $limit bytes" ); + ok( defined parse_date($at_limit), 'input at the limit is still parsed' ); + + my $over_limit = $at_limit . q{ }; # one byte too long + is( length $over_limit, $limit + 1, "test string is $limit + 1 bytes" ); + is( parse_date($over_limit), undef, 'input past the limit is rejected' ); +}; + +subtest 'hostile input is rejected promptly' => sub { + + # Unguarded these scale as O(N^2) and take many seconds; guarded they + # return immediately. The 1-second threshold is deliberately generous so + # the test is not flaky on a loaded machine. Each case targets a distinct + # ambiguous seam in the parsing regex. + my %evil = ( + 'letter run' => '01 Jan 2000 ' . ( 'a' x 10000 ) . '!', + 'digit run' => '01 Jan ' . ( '1' x 10000 ) . '!', + 'space run' => '01 Jan 2000' . ( ' ' x 10000 ) . '!', + ); + + for my $branch ( sort keys %evil ) { + my $str = $evil{$branch}; + + my $t0 = time; + my $got = parse_date($str); + my $elapsed = time - $t0; + + is( $got, undef, "hostile input ($branch) is rejected" ); + cmp_ok( + $elapsed, '<', 1, + sprintf '%s: %d-byte input handled promptly (%.3fs)', + $branch, length $str, $elapsed + ); + } +}; + +done_testing; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/HTTP-Date-6.07/xt/author/eol.t new/HTTP-Date-6.08/xt/author/eol.t --- old/HTTP-Date-6.07/xt/author/eol.t 2026-06-25 17:12:11.000000000 +0200 +++ new/HTTP-Date-6.08/xt/author/eol.t 2026-07-09 04:04:24.000000000 +0200 @@ -13,6 +13,7 @@ 't/00-report-prereqs.t', 't/date.t', 't/numeric-date-order.t', + 't/redos.t', 't/unicode-digits.t' ); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/HTTP-Date-6.07/xt/release/changes_has_content.t new/HTTP-Date-6.08/xt/release/changes_has_content.t --- old/HTTP-Date-6.07/xt/release/changes_has_content.t 2026-06-25 17:12:11.000000000 +0200 +++ new/HTTP-Date-6.08/xt/release/changes_has_content.t 2026-07-09 04:04:24.000000000 +0200 @@ -8,7 +8,7 @@ note 'Checking Changes'; my $changes_file = 'Changes'; -my $newver = '6.07'; +my $newver = '6.08'; my $trial_token = '-TRIAL'; my $encoding = 'UTF-8'; ++++++ _scmsync.obsinfo ++++++ --- /var/tmp/diff_new_pack.0U8txW/_old 2026-07-23 23:08:32.016477084 +0200 +++ /var/tmp/diff_new_pack.0U8txW/_new 2026-07-23 23:08:32.024477362 +0200 @@ -1,6 +1,6 @@ -mtime: 1782463161 -commit: d32addd87af51ae6d9ba50e21140c9c005e34eee058ffab043a9e37cfb928728 +mtime: 1784569350 +commit: d6b8c7dd170100be843628cfc400ae97b67c57ffd18b951fdc031404ae00bc69 url: https://src.opensuse.org/perl/perl-HTTP-Date -revision: d32addd87af51ae6d9ba50e21140c9c005e34eee058ffab043a9e37cfb928728 +revision: d6b8c7dd170100be843628cfc400ae97b67c57ffd18b951fdc031404ae00bc69 projectscmsync: https://src.opensuse.org/perl/_ObsPrj ++++++ build.specials.obscpio ++++++ ++++++ build.specials.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/.gitignore new/.gitignore --- old/.gitignore 1970-01-01 01:00:00.000000000 +0100 +++ new/.gitignore 2026-07-20 19:42:30.000000000 +0200 @@ -0,0 +1 @@ +.osc
