Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package perl-MIME-tools for openSUSE:Factory
checked in at 2026-03-11 20:52:26
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-MIME-tools (Old)
and /work/SRC/openSUSE:Factory/.perl-MIME-tools.new.8177 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "perl-MIME-tools"
Wed Mar 11 20:52:26 2026 rev:41 rq:1338066 version:5.517.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/perl-MIME-tools/perl-MIME-tools.changes
2024-05-15 21:29:01.058849566 +0200
+++
/work/SRC/openSUSE:Factory/.perl-MIME-tools.new.8177/perl-MIME-tools.changes
2026-03-11 20:53:00.468228160 +0100
@@ -1,0 +2,19 @@
+Wed Feb 11 06:21:07 UTC 2026 - Tina Müller <[email protected]>
+
+- updated to 5.517.0 (5.517)
+ see /usr/share/doc/packages/perl-MIME-tools/ChangeLog
+
+ 5.517 2026-02-10 Dianne Skoll <[email protected]>
+ * VERSION 5.517 RELEASED
+ * Add a missing test message file that was causing tests to fail.
+ 5.516 2026-02-10 Dianne Skoll <[email protected]>
+ * VERSION 5.516 RELEASED
+ * Handle MIME parameters of the form param= better (ie,
+ a parameter with no value at all.) It's treated the
+ same as param="" rather than aborting the parse.
+ * Diagnose additional types of malformed MIME as ambiguous.
+ Specifically, an empty boundary parameters like boundary= or
+ boundary="" is treated as ambiguous. Thanks to Stoiko Ivanov
+ <[email protected]> for pointing out this missing case.
+
+-------------------------------------------------------------------
Old:
----
MIME-tools-5.515.tar.gz
New:
----
MIME-tools-5.517.tar.gz
README.md
_scmsync.obsinfo
build.specials.obscpio
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ perl-MIME-tools.spec ++++++
--- /var/tmp/diff_new_pack.B3bvX1/_old 2026-03-11 20:53:01.132255554 +0100
+++ /var/tmp/diff_new_pack.B3bvX1/_new 2026-03-11 20:53:01.136255719 +0100
@@ -1,7 +1,7 @@
#
# spec file for package perl-MIME-tools
#
-# Copyright (c) 2024 SUSE LLC
+# Copyright (c) 2026 SUSE LLC and contributors
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -18,28 +18,29 @@
%define cpan_name MIME-tools
Name: perl-MIME-tools
-Version: 5.515.0
+Version: 5.517.0
Release: 0
-# 5.515 -> normalize -> 5.515.0
-%define cpan_version 5.515
+# 5.517 -> normalize -> 5.517.0
+%define cpan_version 5.517
License: Artistic-1.0 OR GPL-1.0-or-later
Summary: Tools to manipulate MIME messages
URL: https://metacpan.org/release/%{cpan_name}
Source0:
https://cpan.metacpan.org/authors/id/D/DS/DSKOLL/%{cpan_name}-%{cpan_version}.tar.gz
Source1: cpanspec.yml
+Source100: README.md
BuildArch: noarch
BuildRequires: perl
BuildRequires: perl-macros
BuildRequires: perl(ExtUtils::MakeMaker) >= 6.59
BuildRequires: perl(File::Temp) >= 0.18
-BuildRequires: perl(Mail::Field) >= 1.05
-BuildRequires: perl(Mail::Header) >= 1.01
-BuildRequires: perl(Mail::Internet) >= 1.0203
+BuildRequires: perl(Mail::Field) >= 1.50
+BuildRequires: perl(Mail::Header) >= 1.10
+BuildRequires: perl(Mail::Internet) >= 1.20.300
BuildRequires: perl(Test::Deep)
Requires: perl(File::Temp) >= 0.18
-Requires: perl(Mail::Field) >= 1.05
-Requires: perl(Mail::Header) >= 1.01
-Requires: perl(Mail::Internet) >= 1.0203
+Requires: perl(Mail::Field) >= 1.50
+Requires: perl(Mail::Header) >= 1.10
+Requires: perl(Mail::Internet) >= 1.20.300
Provides: perl(MIME::Body) = %{version}
Provides: perl(MIME::Body::File)
Provides: perl(MIME::Body::InCore)
@@ -78,7 +79,7 @@
Tools to manipulate MIME messages
%prep
-%autosetup -n %{cpan_name}-%{cpan_version}
+%autosetup -n %{cpan_name}-%{cpan_version} -p1
find . -type f ! -path "*/t/*" ! -name "*.pl" ! -path "*/bin/*" ! -path
"*/script/*" ! -path "*/scripts/*" ! -name "configure" -print0 | xargs -0 chmod
644
++++++ MIME-tools-5.515.tar.gz -> MIME-tools-5.517.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/MIME-tools-5.515/ChangeLog
new/MIME-tools-5.517/ChangeLog
--- old/MIME-tools-5.515/ChangeLog 2024-04-24 17:32:16.000000000 +0200
+++ new/MIME-tools-5.517/ChangeLog 2026-02-11 03:51:22.000000000 +0100
@@ -1,6 +1,25 @@
+5.517 2026-02-10 Dianne Skoll <[email protected]>
+
+ * VERSION 5.517 RELEASED
+
+ * Add a missing test message file that was causing tests to fail.
+
+5.516 2026-02-10 Dianne Skoll <[email protected]>
+
+ * VERSION 5.516 RELEASED
+
+ * Handle MIME parameters of the form param= better (ie,
+ a parameter with no value at all.) It's treated the
+ same as param="" rather than aborting the parse.
+
+ * Diagnose additional types of malformed MIME as ambiguous.
+ Specifically, an empty boundary parameters like boundary= or
+ boundary="" is treated as ambiguous. Thanks to Stoiko Ivanov
+ <[email protected]> for pointing out this missing case.
+
5.515 2024-04-24 Dianne Skoll <[email protected]>
- * VERSION 5.514 RELEASED
+ * VERSION 5.515 RELEASED
* Fix the "version" setting in META.yml. There are no other changes
since 5.514.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/MIME-tools-5.515/MANIFEST
new/MIME-tools-5.517/MANIFEST
--- old/MIME-tools-5.515/MANIFEST 2024-02-06 19:46:30.000000000 +0100
+++ new/MIME-tools-5.517/MANIFEST 2026-02-11 03:48:51.000000000 +0100
@@ -160,6 +160,8 @@
testmsgs/double-semicolon2.msg
testmsgs/dup-names.msg
testmsgs/dup-names.ref
+testmsgs/empty-boundary.msg
+testmsgs/empty-quoted-boundary.msg
testmsgs/empty-preamble.msg
testmsgs/frag.msg
testmsgs/german-qp.msg
@@ -199,6 +201,7 @@
testmsgs/simple.msg
testmsgs/simple.ref
testmsgs/ticket-60931.msg
+testmsgs/triple-boundary-one-empty.msg
testmsgs/utf8-bom-at-start.msg
testmsgs/uu-junk-extracted.ref
testmsgs/uu-junk-target.msg
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/MIME-tools-5.515/META.yml
new/MIME-tools-5.517/META.yml
--- old/MIME-tools-5.515/META.yml 2024-04-24 17:31:28.000000000 +0200
+++ new/MIME-tools-5.517/META.yml 2026-02-11 03:51:36.000000000 +0100
@@ -37,4 +37,4 @@
perl: 5.8.0
resources:
license: http://dev.perl.org/licenses/
-version: 5.515
+version: 5.517
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/MIME-tools-5.515/MYMETA.json
new/MIME-tools-5.517/MYMETA.json
--- old/MIME-tools-5.515/MYMETA.json 2024-04-24 17:33:54.000000000 +0200
+++ new/MIME-tools-5.517/MYMETA.json 2026-02-11 03:52:31.000000000 +0100
@@ -58,7 +58,7 @@
"http://dev.perl.org/licenses/"
]
},
- "version" : "5.515",
+ "version" : "5.517",
"x_module_name" : "MIME::Tools",
- "x_serialization_backend" : "JSON::PP version 4.07"
+ "x_serialization_backend" : "JSON::PP version 4.16"
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/MIME-tools-5.515/MYMETA.yml
new/MIME-tools-5.517/MYMETA.yml
--- old/MIME-tools-5.515/MYMETA.yml 2024-04-24 17:33:54.000000000 +0200
+++ new/MIME-tools-5.517/MYMETA.yml 2026-02-11 03:52:31.000000000 +0100
@@ -36,6 +36,6 @@
perl: '5.008'
resources:
license: http://dev.perl.org/licenses/
-version: '5.515'
+version: '5.517'
x_module_name: MIME::Tools
x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/MIME-tools-5.515/lib/MIME/Body.pm
new/MIME-tools-5.517/lib/MIME/Body.pm
--- old/MIME-tools-5.515/lib/MIME/Body.pm 2024-04-24 17:31:28.000000000
+0200
+++ new/MIME-tools-5.517/lib/MIME/Body.pm 2026-02-11 03:51:36.000000000
+0100
@@ -141,7 +141,7 @@
use IO::File;
### The package version, both in 1.23 style *and* usable by MakeMaker:
-$VERSION = "5.515";
+$VERSION = "5.517";
#------------------------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/MIME-tools-5.515/lib/MIME/Decoder/Base64.pm
new/MIME-tools-5.517/lib/MIME/Decoder/Base64.pm
--- old/MIME-tools-5.515/lib/MIME/Decoder/Base64.pm 2024-04-24
17:31:28.000000000 +0200
+++ new/MIME-tools-5.517/lib/MIME/Decoder/Base64.pm 2026-02-11
03:51:36.000000000 +0100
@@ -57,7 +57,7 @@
@ISA = qw(MIME::Decoder);
### The package version, both in 1.23 style *and* usable by MakeMaker:
-$VERSION = "5.515";
+$VERSION = "5.517";
### How many bytes to encode at a time (must be a multiple of 3)
my $EncodeChunkLength = 120 * 57;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/MIME-tools-5.515/lib/MIME/Decoder/BinHex.pm
new/MIME-tools-5.517/lib/MIME/Decoder/BinHex.pm
--- old/MIME-tools-5.515/lib/MIME/Decoder/BinHex.pm 2024-04-24
17:31:28.000000000 +0200
+++ new/MIME-tools-5.517/lib/MIME/Decoder/BinHex.pm 2026-02-11
03:51:36.000000000 +0100
@@ -47,7 +47,7 @@
@ISA = qw(MIME::Decoder);
# The package version, both in 1.23 style *and* usable by MakeMaker:
-$VERSION = "5.515";
+$VERSION = "5.517";
#------------------------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/MIME-tools-5.515/lib/MIME/Decoder/Binary.pm
new/MIME-tools-5.517/lib/MIME/Decoder/Binary.pm
--- old/MIME-tools-5.515/lib/MIME/Decoder/Binary.pm 2024-04-24
17:31:28.000000000 +0200
+++ new/MIME-tools-5.517/lib/MIME/Decoder/Binary.pm 2026-02-11
03:51:36.000000000 +0100
@@ -47,7 +47,7 @@
@ISA = qw(MIME::Decoder);
### The package version, both in 1.23 style *and* usable by MakeMaker:
-$VERSION = "5.515";
+$VERSION = "5.517";
### Buffer length:
my $BUFLEN = 8192;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/MIME-tools-5.515/lib/MIME/Decoder/Gzip64.pm
new/MIME-tools-5.517/lib/MIME/Decoder/Gzip64.pm
--- old/MIME-tools-5.515/lib/MIME/Decoder/Gzip64.pm 2024-04-24
17:31:28.000000000 +0200
+++ new/MIME-tools-5.517/lib/MIME/Decoder/Gzip64.pm 2026-02-11
03:51:36.000000000 +0100
@@ -61,7 +61,7 @@
@ISA = qw(MIME::Decoder::Base64);
# The package version, both in 1.23 style *and* usable by MakeMaker:
-$VERSION = "5.515";
+$VERSION = "5.517";
# How to compress stdin to stdout:
$GZIP = "gzip -c";
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/MIME-tools-5.515/lib/MIME/Decoder/NBit.pm
new/MIME-tools-5.517/lib/MIME/Decoder/NBit.pm
--- old/MIME-tools-5.515/lib/MIME/Decoder/NBit.pm 2024-04-24
17:31:28.000000000 +0200
+++ new/MIME-tools-5.517/lib/MIME/Decoder/NBit.pm 2026-02-11
03:51:36.000000000 +0100
@@ -98,7 +98,7 @@
@ISA = qw(MIME::Decoder);
### The package version, both in 1.23 style *and* usable by MakeMaker:
-$VERSION = "5.515";
+$VERSION = "5.517";
### How many bytes to decode at a time?
my $DecodeChunkLength = 8 * 1024;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/MIME-tools-5.515/lib/MIME/Decoder/QuotedPrint.pm
new/MIME-tools-5.517/lib/MIME/Decoder/QuotedPrint.pm
--- old/MIME-tools-5.515/lib/MIME/Decoder/QuotedPrint.pm 2024-04-24
17:31:28.000000000 +0200
+++ new/MIME-tools-5.517/lib/MIME/Decoder/QuotedPrint.pm 2026-02-11
03:51:36.000000000 +0100
@@ -58,7 +58,7 @@
@ISA = qw(MIME::Decoder);
# The package version, both in 1.23 style *and* usable by MakeMaker:
-$VERSION = "5.515";
+$VERSION = "5.517";
#------------------------------
# If we have MIME::QuotedPrint 3.03 or later, use the three-argument
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/MIME-tools-5.515/lib/MIME/Decoder/UU.pm
new/MIME-tools-5.517/lib/MIME/Decoder/UU.pm
--- old/MIME-tools-5.515/lib/MIME/Decoder/UU.pm 2024-04-24 17:31:28.000000000
+0200
+++ new/MIME-tools-5.517/lib/MIME/Decoder/UU.pm 2026-02-11 03:51:36.000000000
+0100
@@ -48,7 +48,7 @@
@ISA = qw(MIME::Decoder);
# The package version, both in 1.23 style *and* usable by MakeMaker:
-$VERSION = "5.515";
+$VERSION = "5.517";
#------------------------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/MIME-tools-5.515/lib/MIME/Decoder.pm
new/MIME-tools-5.517/lib/MIME/Decoder.pm
--- old/MIME-tools-5.515/lib/MIME/Decoder.pm 2024-04-24 17:31:28.000000000
+0200
+++ new/MIME-tools-5.517/lib/MIME/Decoder.pm 2026-02-11 03:51:36.000000000
+0100
@@ -126,7 +126,7 @@
);
### The package version, both in 1.23 style *and* usable by MakeMaker:
-$VERSION = "5.515";
+$VERSION = "5.517";
### Me:
my $ME = 'MIME::Decoder';
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/MIME-tools-5.515/lib/MIME/Entity.pm
new/MIME-tools-5.517/lib/MIME/Entity.pm
--- old/MIME-tools-5.515/lib/MIME/Entity.pm 2024-04-24 17:31:28.000000000
+0200
+++ new/MIME-tools-5.517/lib/MIME/Entity.pm 2026-02-11 03:51:36.000000000
+0100
@@ -255,7 +255,7 @@
#------------------------------
### The package version, both in 1.23 style *and* usable by MakeMaker:
-$VERSION = "5.515";
+$VERSION = "5.517";
### Boundary counter:
my $BCount = 0;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/MIME-tools-5.515/lib/MIME/Field/ConTraEnc.pm
new/MIME-tools-5.517/lib/MIME/Field/ConTraEnc.pm
--- old/MIME-tools-5.515/lib/MIME/Field/ConTraEnc.pm 2024-04-24
17:31:28.000000000 +0200
+++ new/MIME-tools-5.517/lib/MIME/Field/ConTraEnc.pm 2026-02-11
03:51:36.000000000 +0100
@@ -47,7 +47,7 @@
@ISA = qw(MIME::Field::ParamVal);
# The package version, both in 1.23 style *and* usable by MakeMaker:
-$VERSION = "5.515";
+$VERSION = "5.517";
# Install it:
bless([])->register('Content-transfer-encoding');
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/MIME-tools-5.515/lib/MIME/Field/ContDisp.pm
new/MIME-tools-5.517/lib/MIME/Field/ContDisp.pm
--- old/MIME-tools-5.515/lib/MIME/Field/ContDisp.pm 2024-04-24
17:31:28.000000000 +0200
+++ new/MIME-tools-5.517/lib/MIME/Field/ContDisp.pm 2026-02-11
03:51:36.000000000 +0100
@@ -48,7 +48,7 @@
@ISA = qw(MIME::Field::ParamVal);
# The package version, both in 1.23 style *and* usable by MakeMaker:
-$VERSION = "5.515";
+$VERSION = "5.517";
# Install it:
bless([])->register('Content-disposition');
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/MIME-tools-5.515/lib/MIME/Field/ContType.pm
new/MIME-tools-5.517/lib/MIME/Field/ContType.pm
--- old/MIME-tools-5.515/lib/MIME/Field/ContType.pm 2024-04-24
17:31:28.000000000 +0200
+++ new/MIME-tools-5.517/lib/MIME/Field/ContType.pm 2026-02-11
03:51:36.000000000 +0100
@@ -63,7 +63,7 @@
@ISA = qw(MIME::Field::ParamVal);
# The package version, both in 1.23 style *and* usable by MakeMaker:
-$VERSION = "5.515";
+$VERSION = "5.517";
# Install it:
bless([])->register('Content-type');
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/MIME-tools-5.515/lib/MIME/Field/ParamVal.pm
new/MIME-tools-5.517/lib/MIME/Field/ParamVal.pm
--- old/MIME-tools-5.515/lib/MIME/Field/ParamVal.pm 2024-04-24
17:31:28.000000000 +0200
+++ new/MIME-tools-5.517/lib/MIME/Field/ParamVal.pm 2026-02-11
03:51:36.000000000 +0100
@@ -80,7 +80,7 @@
#------------------------------
# The package version, both in 1.23 style *and* usable by MakeMaker:
-$VERSION = "5.515";
+$VERSION = "5.517";
#------------------------------
@@ -220,6 +220,7 @@
my ($self, $raw) = @_;
my %params;
my %dup_params;
+ my %empty_params;
my %rfc2231params;
my %rfc2231encoding_is_used;
my $param;
@@ -242,8 +243,8 @@
$raw =~ m/\G[^;]*(\;$SPCZ)+/og or last; # skip leading
separator
$raw =~ m/\G($PARAMNAME)\s*=\s*/og or last; # give up if not a
param
$param = lc($1);
- $raw =~ m/\G(?:$QUOTED_STRING|($ENCTOKEN)|($TOKEN)|($BADTOKEN))/g or
last; # give up if no value"
- my ($qstr, $enctoken, $token, $badtoken) = ($1, $2, $3, $4, $5);
+ $raw =~ m/\G(?:$QUOTED_STRING|($ENCTOKEN)|($TOKEN)|($BADTOKEN)|())/g or
last;
+ my ($qstr, $enctoken, $token, $badtoken, $empty_value) = ($1, $2, $3,
$4, $5);
if (defined($qstr)) {
# unescape
$qstr =~ s/\\(.)/$1/g;
@@ -264,7 +265,8 @@
}
$val = defined($qstr) ? $qstr :
(defined($enctoken) ? $enctoken :
- (defined($badtoken) ? $badtoken : $token));
+ (defined($badtoken) ? $badtoken :
+ (defined($token) ? $token : $empty_value)));
# Do RFC 2231 processing
# Pick out the parts of the parameter
@@ -291,6 +293,9 @@
}
$params{$param} = $val;
}
+ if (($val // '') eq '') {
+ $empty_params{$param} = 1;
+ }
}
# Extract reconstructed parameters
@@ -316,6 +321,9 @@
$params{$param} = '=?' . $enc . '?Q?' . $val . '?=';
}
}
+ if ($params{$param} eq '') {
+ $empty_params{$param} = 1;
+ }
debug " field param <$param> = <$params{$param}>";
}
@@ -325,6 +333,13 @@
if (%dup_params) {
$params{'@duplicate_parameters'} = [ sort(keys(%dup_params)) ];
}
+
+ # If there are any empty parameters, store them in the
+ # special key '@empty_parameters' which should never be the
+ # name of a real parameter
+ if (%empty_params) {
+ $params{'@empty_parameters'} = [ sort(keys(%empty_params)) ];
+ }
# Done:
\%params;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/MIME-tools-5.515/lib/MIME/Head.pm
new/MIME-tools-5.517/lib/MIME/Head.pm
--- old/MIME-tools-5.515/lib/MIME/Head.pm 2024-04-24 17:31:28.000000000
+0200
+++ new/MIME-tools-5.517/lib/MIME/Head.pm 2026-02-11 03:51:36.000000000
+0100
@@ -142,7 +142,7 @@
'content-id',
];
-# The presence of a duplicated parameters in one of the following
+# The presence of a duplicated or empty parameters in one of the following
# headers in a given MIME entity could indicate an ambiguous parse and
# hence a security risk
my $singleton_parameter_headers =
@@ -159,7 +159,7 @@
#------------------------------
### The package version, both in 1.23 style *and* usable by MakeMaker:
-$VERSION = "5.515";
+$VERSION = "5.517";
### Sanity (we put this test after our own version, for CPAN::):
use Mail::Header 1.06 ();
@@ -225,6 +225,9 @@
if ($self->mime_attr($hdr . '.@duplicate_parameters')) {
return 1;
}
+ if ($self->mime_attr($hdr . '.@empty_parameters')) {
+ return 1;
+ }
}
return 0;
}
@@ -732,11 +735,32 @@
[ 'boundary' ]
-A duplicate "boundary" tag should be treated as a security risk, as should
-duplicate Content-Type headers in a message. Since such messages cannot
-be parsed unambiguously, we strongly recommend that they never be
+Similarly he special sub-field tag C<@empty_parameters> (which can never be
+a real tag) returns an arrayref of tags that had an empty parameter value
+in the header, or C<undef> if no such tags were found. For example, given
+the header:
+
+ Content-Type: multipart/mixed; boundary=;
+
+Then:
+
+ $head->mime_attr('content-type.@emtpy_parameters')
+
+would return:
+
+ [ 'boundary' ]
+
+A duplicate or empty "boundary" tag should be treated as a security risk, as
+should duplicate Content-Type headers in a message. Since such messages
+cannot be parsed unambiguously, we strongly recommend that they never be
delivered to end-users.
+Note also that a parameter explicitly set to blank via something like:
+
+ Content-Type: application/octet-stream; boundary=""
+
+I<will> populate C<@empty_parameters>
+
=cut
sub mime_attr {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/MIME-tools-5.515/lib/MIME/Parser.pm
new/MIME-tools-5.517/lib/MIME/Parser.pm
--- old/MIME-tools-5.515/lib/MIME/Parser.pm 2024-04-24 17:31:28.000000000
+0200
+++ new/MIME-tools-5.517/lib/MIME/Parser.pm 2026-02-11 03:51:36.000000000
+0100
@@ -153,7 +153,7 @@
#------------------------------
### The package version, both in 1.23 style *and* usable by MakeMaker:
-$VERSION = "5.515";
+$VERSION = "5.517";
### How to catenate:
$CAT = '/bin/cat';
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/MIME-tools-5.515/lib/MIME/Tools.pm
new/MIME-tools-5.517/lib/MIME/Tools.pm
--- old/MIME-tools-5.515/lib/MIME/Tools.pm 2024-04-24 17:31:24.000000000
+0200
+++ new/MIME-tools-5.517/lib/MIME/Tools.pm 2026-02-11 03:51:33.000000000
+0100
@@ -28,7 +28,7 @@
Exporter::export_ok_tags('config', 'msgs', 'msgtypes', 'utils');
# The TOOLKIT version, both in 1.23 style *and* usable by MakeMaker:
-$VERSION = "5.515";
+$VERSION = "5.517";
# Configuration (do NOT alter this directly)...
# All legal CONFIG vars *must* be in here, even if only to be set to undef:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/MIME-tools-5.515/lib/MIME/Words.pm
new/MIME-tools-5.517/lib/MIME/Words.pm
--- old/MIME-tools-5.515/lib/MIME/Words.pm 2024-04-24 17:31:28.000000000
+0200
+++ new/MIME-tools-5.517/lib/MIME/Words.pm 2026-02-11 03:51:36.000000000
+0100
@@ -94,7 +94,7 @@
#------------------------------
### The package version, both in 1.23 style *and* usable by MakeMaker:
-$VERSION = "5.515";
+$VERSION = "5.517";
### Nonprintables (controls + x7F + 8bit):
my $NONPRINT = "\\x00-\\x1F\\x7F-\\xFF";
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/MIME-tools-5.515/t/ambiguous-parse.t
new/MIME-tools-5.517/t/ambiguous-parse.t
--- old/MIME-tools-5.515/t/ambiguous-parse.t 2024-02-06 19:44:29.000000000
+0100
+++ new/MIME-tools-5.517/t/ambiguous-parse.t 2026-02-09 17:07:40.000000000
+0100
@@ -2,7 +2,7 @@
use strict;
use warnings;
use Test::Deep;
-use Test::More tests => 20;
+use Test::More tests => 32;
use MIME::Entity;
use MIME::Parser;
@@ -52,3 +52,27 @@
Data => ['Hello, world!']);
ok($entity->ambiguous_content(), 'Newly-built entity correctly detects
ambiguous content');
+$entity = $parser->parse_open('testmsgs/triple-boundary-one-empty.msg');
+$ans = $entity->head->mime_attr('content-type.@duplicate_parameters');
+cmp_deeply($ans, ['boundary'], 'Duplicate "boundary" parameter was detected in
bad message');
+$ans = $entity->head->mime_attr('content-type.@empty_parameters');
+cmp_deeply($ans, ['boundary'], 'Empty "boundary" parameter value was detected
in bad message');
+ok($parser->ambiguous_content(), 'Ambiguous content was detected in message
with 3 boundary parameters, one of them empty');
+ok($entity->ambiguous_content(), 'Entity method matches parser method');
+
+$entity = $parser->parse_open('testmsgs/empty-boundary.msg');
+$ans = $entity->head->mime_attr('content-type.@duplicate_parameters');
+ok(!defined($ans), 'No duplicate parameters');
+$ans = $entity->head->mime_attr('content-type.@empty_parameters');
+cmp_deeply($ans, ['boundary'], 'Empty "boundary" parameter value was detected
in bad message');
+ok($parser->ambiguous_content(), 'Ambiguous content was detected in message
with empty boundary parameter');
+ok($entity->ambiguous_content(), 'Entity method matches parser method');
+
+$entity = $parser->parse_open('testmsgs/empty-quoted-boundary.msg');
+$ans = $entity->head->mime_attr('content-type.@duplicate_parameters');
+ok(!defined($ans), 'No duplicate parameters');
+$ans = $entity->head->mime_attr('content-type.@empty_parameters');
+cmp_deeply($ans, ['boundary'], 'Empty "boundary" parameter value was detected
in bad message');
+ok($parser->ambiguous_content(), 'Ambiguous content was detected in message
with "" boundary parameter');
+ok($entity->ambiguous_content(), 'Entity method matches parser method');
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/MIME-tools-5.515/t/ticket-119568.t
new/MIME-tools-5.517/t/ticket-119568.t
--- old/MIME-tools-5.515/t/ticket-119568.t 2024-04-24 17:33:11.000000000
+0200
+++ new/MIME-tools-5.517/t/ticket-119568.t 2026-02-11 03:52:04.000000000
+0100
@@ -13,7 +13,7 @@
Data => ["Line 1\n", "Line 2\n"],);
my $str = $e->as_string();
-is ($str, "Content-Type: text/plain\nContent-Disposition:
inline\nContent-Transfer-Encoding: binary\nMIME-Version: 1.0\nX-Mailer:
MIME-tools 5.515 (Entity 5.515)\nFrom: dianne\@skoll.ca\nTo:
dfs2\@roaringpenguin.com\nSubject: End-of-line test\n\nLine 1\nLine 2\n", 'Got
expected line endings');
+is ($str, "Content-Type: text/plain\nContent-Disposition:
inline\nContent-Transfer-Encoding: binary\nMIME-Version: 1.0\nX-Mailer:
MIME-tools 5.517 (Entity 5.517)\nFrom: dianne\@skoll.ca\nTo:
dfs2\@roaringpenguin.com\nSubject: End-of-line test\n\nLine 1\nLine 2\n", 'Got
expected line endings');
my $delim = "\r\n";
$MIME::Entity::BOUNDARY_DELIMITER = $delim;
@@ -24,7 +24,7 @@
$str = $e->as_string();
-is ($str, "Content-Type: text/plain${delim}Content-Disposition:
inline${delim}Content-Transfer-Encoding: binary${delim}MIME-Version:
1.0${delim}X-Mailer: MIME-tools 5.515 (Entity 5.515)${delim}From:
dianne\@skoll.ca${delim}To: dfs2\@roaringpenguin.com${delim}Subject:
End-of-line test${delim}${delim}Line 1${delim}Line 2${delim}", 'Got expected
line endings');
+is ($str, "Content-Type: text/plain${delim}Content-Disposition:
inline${delim}Content-Transfer-Encoding: binary${delim}MIME-Version:
1.0${delim}X-Mailer: MIME-tools 5.517 (Entity 5.517)${delim}From:
dianne\@skoll.ca${delim}To: dfs2\@roaringpenguin.com${delim}Subject:
End-of-line test${delim}${delim}Line 1${delim}Line 2${delim}", 'Got expected
line endings');
$e->attach(Data => ["More Text$delim"], Type => "text/plain");
@@ -35,7 +35,7 @@
$e->attach(Data => ["Text$delim"], Type => "text/plain");
$e->attach(Data => ["More Text$delim"], Type => "text/plain");
$str = $e->as_string();
-is ($str, "Content-Type: multipart/mixed;
boundary=\"foo\"${delim}Content-Transfer-Encoding: binary${delim}MIME-Version:
1.0${delim}X-Mailer: MIME-tools 5.515 (Entity 5.515)${delim}From:
dianne\@skoll.ca${delim}To: dfs2\@roaringpenguin.com${delim}Subject:
End-of-line test${delim}${delim}This is a multi-part message in MIME
format...${delim}${delim}--foo${delim}Content-Type:
text/plain${delim}Content-Disposition: inline${delim}Content-Transfer-Encoding:
binary${delim}${delim}Text${delim}${delim}--foo${delim}Content-Type:
text/plain${delim}Content-Disposition: inline${delim}Content-Transfer-Encoding:
binary${delim}${delim}More Text${delim}${delim}--foo--${delim}", 'Got expected
line endings');
+is ($str, "Content-Type: multipart/mixed;
boundary=\"foo\"${delim}Content-Transfer-Encoding: binary${delim}MIME-Version:
1.0${delim}X-Mailer: MIME-tools 5.517 (Entity 5.517)${delim}From:
dianne\@skoll.ca${delim}To: dfs2\@roaringpenguin.com${delim}Subject:
End-of-line test${delim}${delim}This is a multi-part message in MIME
format...${delim}${delim}--foo${delim}Content-Type:
text/plain${delim}Content-Disposition: inline${delim}Content-Transfer-Encoding:
binary${delim}${delim}Text${delim}${delim}--foo${delim}Content-Type:
text/plain${delim}Content-Disposition: inline${delim}Content-Transfer-Encoding:
binary${delim}${delim}More Text${delim}${delim}--foo--${delim}", 'Got expected
line endings');
$e = MIME::Entity->build(From => '[email protected]',
To => '[email protected]',
@@ -45,5 +45,5 @@
$e->attach(Data => ["More Text\n", 'LongLine' x 120], Type => "text/plain",
Encoding => 'Base64');
$str = $e->as_string();
-is ($str, "Content-Type: multipart/mixed;
boundary=\"foo\"${delim}Content-Transfer-Encoding: binary${delim}MIME-Version:
1.0${delim}X-Mailer: MIME-tools 5.515 (Entity 5.515)${delim}From:
dianne\@skoll.ca${delim}To: dfs2\@roaringpenguin.com${delim}Subject:
End-of-line test${delim}${delim}This is a multi-part message in MIME
format...${delim}${delim}--foo${delim}Content-Type:
text/plain${delim}Content-Disposition: inline${delim}Content-Transfer-Encoding:
Base64${delim}${delim}VGV4dAo=${delim}${delim}--foo${delim}Content-Type:
text/plain${delim}Content-Disposition: inline${delim}Content-Transfer-Encoding:
Base64${delim}${delim}TW9yZSBUZXh0CkxvbmdMaW5lTG9uZ0xpbmVMb25nTGluZUxvbmdMaW5lTG9uZ0xpbmVMb25nTGlu${delim}ZUxvbmdMaW5lTG9uZ0xpbmVMb25nTGluZUxvbmdMaW5lTG9uZ0xpbmVMb25nTGluZUxvbmdMaW5l${delim}TG9uZ0xpbmVMb25nTGluZUxvbmdMaW5lTG9uZ0xpbmVMb25nTGluZUxvbmdMaW5lTG9uZ0xpbmVM${delim}b25nTGluZUxvbmdMaW5lTG9uZ0xpbmVMb25nTGluZUxvbmdMaW5lTG9uZ0xpbmVMb25nTGluZUxv${delim}bmdMaW5lTG9uZ0xpbmVMb25nTGluZ
UxvbmdMaW5lTG9uZ0xpbmVMb25nTGluZUxvbmdMaW5lTG9u${delim}Z0xpbmVMb25nTGluZUxvbmdMaW5lTG9uZ0xpbmVMb25nTGluZUxvbmdMaW5lTG9uZ0xpbmVMb25n${delim}TGluZUxvbmdMaW5lTG9uZ0xpbmVMb25nTGluZUxvbmdMaW5lTG9uZ0xpbmVMb25nTGluZUxvbmdM${delim}aW5lTG9uZ0xpbmVMb25nTGluZUxvbmdMaW5lTG9uZ0xpbmVMb25nTGluZUxvbmdMaW5lTG9uZ0xp${delim}bmVMb25nTGluZUxvbmdMaW5lTG9uZ0xpbmVMb25nTGluZUxvbmdMaW5lTG9uZ0xpbmVMb25nTGlu${delim}ZUxvbmdMaW5lTG9uZ0xpbmVMb25nTGluZUxvbmdMaW5lTG9uZ0xpbmVMb25nTGluZUxvbmdMaW5l${delim}TG9uZ0xpbmVMb25nTGluZUxvbmdMaW5lTG9uZ0xpbmVMb25nTGluZUxvbmdMaW5lTG9uZ0xpbmVM${delim}b25nTGluZUxvbmdMaW5lTG9uZ0xpbmVMb25nTGluZUxvbmdMaW5lTG9uZ0xpbmVMb25nTGluZUxv${delim}bmdMaW5lTG9uZ0xpbmVMb25nTGluZUxvbmdMaW5lTG9uZ0xpbmVMb25nTGluZUxvbmdMaW5lTG9u${delim}Z0xpbmVMb25nTGluZUxvbmdMaW5lTG9uZ0xpbmVMb25nTGluZUxvbmdMaW5lTG9uZ0xpbmVMb25n${delim}TGluZUxvbmdMaW5lTG9uZ0xpbmVMb25nTGluZUxvbmdMaW5lTG9uZ0xpbmVMb25nTGluZUxvbmdM${delim}aW5lTG9uZ0xpbmVMb25nTGluZUxvbmdMaW5lTG9uZ0xpbmVMb25nTGluZUxvbmdMaW5lTG9uZ0xp${delim}bmVMb25nTGluZUxvbm
dMaW5lTG9uZ0xpbmVMb25nTGluZUxvbmdMaW5lTG9uZ0xpbmVMb25nTGlu${delim}ZQ==${delim}${delim}--foo--${delim}",
'Got expected line endings for Base64 encoding');
+is ($str, "Content-Type: multipart/mixed;
boundary=\"foo\"${delim}Content-Transfer-Encoding: binary${delim}MIME-Version:
1.0${delim}X-Mailer: MIME-tools 5.517 (Entity 5.517)${delim}From:
dianne\@skoll.ca${delim}To: dfs2\@roaringpenguin.com${delim}Subject:
End-of-line test${delim}${delim}This is a multi-part message in MIME
format...${delim}${delim}--foo${delim}Content-Type:
text/plain${delim}Content-Disposition: inline${delim}Content-Transfer-Encoding:
Base64${delim}${delim}VGV4dAo=${delim}${delim}--foo${delim}Content-Type:
text/plain${delim}Content-Disposition: inline${delim}Content-Transfer-Encoding:
Base64${delim}${delim}TW9yZSBUZXh0CkxvbmdMaW5lTG9uZ0xpbmVMb25nTGluZUxvbmdMaW5lTG9uZ0xpbmVMb25nTGlu${delim}ZUxvbmdMaW5lTG9uZ0xpbmVMb25nTGluZUxvbmdMaW5lTG9uZ0xpbmVMb25nTGluZUxvbmdMaW5l${delim}TG9uZ0xpbmVMb25nTGluZUxvbmdMaW5lTG9uZ0xpbmVMb25nTGluZUxvbmdMaW5lTG9uZ0xpbmVM${delim}b25nTGluZUxvbmdMaW5lTG9uZ0xpbmVMb25nTGluZUxvbmdMaW5lTG9uZ0xpbmVMb25nTGluZUxv${delim}bmdMaW5lTG9uZ0xpbmVMb25nTGluZ
UxvbmdMaW5lTG9uZ0xpbmVMb25nTGluZUxvbmdMaW5lTG9u${delim}Z0xpbmVMb25nTGluZUxvbmdMaW5lTG9uZ0xpbmVMb25nTGluZUxvbmdMaW5lTG9uZ0xpbmVMb25n${delim}TGluZUxvbmdMaW5lTG9uZ0xpbmVMb25nTGluZUxvbmdMaW5lTG9uZ0xpbmVMb25nTGluZUxvbmdM${delim}aW5lTG9uZ0xpbmVMb25nTGluZUxvbmdMaW5lTG9uZ0xpbmVMb25nTGluZUxvbmdMaW5lTG9uZ0xp${delim}bmVMb25nTGluZUxvbmdMaW5lTG9uZ0xpbmVMb25nTGluZUxvbmdMaW5lTG9uZ0xpbmVMb25nTGlu${delim}ZUxvbmdMaW5lTG9uZ0xpbmVMb25nTGluZUxvbmdMaW5lTG9uZ0xpbmVMb25nTGluZUxvbmdMaW5l${delim}TG9uZ0xpbmVMb25nTGluZUxvbmdMaW5lTG9uZ0xpbmVMb25nTGluZUxvbmdMaW5lTG9uZ0xpbmVM${delim}b25nTGluZUxvbmdMaW5lTG9uZ0xpbmVMb25nTGluZUxvbmdMaW5lTG9uZ0xpbmVMb25nTGluZUxv${delim}bmdMaW5lTG9uZ0xpbmVMb25nTGluZUxvbmdMaW5lTG9uZ0xpbmVMb25nTGluZUxvbmdMaW5lTG9u${delim}Z0xpbmVMb25nTGluZUxvbmdMaW5lTG9uZ0xpbmVMb25nTGluZUxvbmdMaW5lTG9uZ0xpbmVMb25n${delim}TGluZUxvbmdMaW5lTG9uZ0xpbmVMb25nTGluZUxvbmdMaW5lTG9uZ0xpbmVMb25nTGluZUxvbmdM${delim}aW5lTG9uZ0xpbmVMb25nTGluZUxvbmdMaW5lTG9uZ0xpbmVMb25nTGluZUxvbmdMaW5lTG9uZ0xp${delim}bmVMb25nTGluZUxvbm
dMaW5lTG9uZ0xpbmVMb25nTGluZUxvbmdMaW5lTG9uZ0xpbmVMb25nTGlu${delim}ZQ==${delim}${delim}--foo--${delim}",
'Got expected line endings for Base64 encoding');
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/MIME-tools-5.515/testmsgs/empty-boundary.msg
new/MIME-tools-5.517/testmsgs/empty-boundary.msg
--- old/MIME-tools-5.515/testmsgs/empty-boundary.msg 1970-01-01
01:00:00.000000000 +0100
+++ new/MIME-tools-5.517/testmsgs/empty-boundary.msg 2026-01-29
14:55:12.000000000 +0100
@@ -0,0 +1,19 @@
+From: Test <[email protected]>
+To: Test <[email protected]>
+Subject: Empty boundary
+MIME-Version: 1.0
+Content-Type: multipart/mixed; boundary = ;
+
+--
+Content-Type: text/plain
+
+Whatever
+
+--
+Content-Type: application/octet-stream
+Content-Transfer-Encoding: base64
+Content-Disposition: attachment; name="wookie.exe"
+
+Z290Y2hhCg==
+
+----
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/MIME-tools-5.515/testmsgs/empty-quoted-boundary.msg
new/MIME-tools-5.517/testmsgs/empty-quoted-boundary.msg
--- old/MIME-tools-5.515/testmsgs/empty-quoted-boundary.msg 1970-01-01
01:00:00.000000000 +0100
+++ new/MIME-tools-5.517/testmsgs/empty-quoted-boundary.msg 2026-02-06
16:58:41.000000000 +0100
@@ -0,0 +1,19 @@
+From: Test <[email protected]>
+To: Test <[email protected]>
+Subject: Empty boundary
+MIME-Version: 1.0
+Content-Type: multipart/mixed; boundary="";
+
+--
+Content-Type: text/plain
+
+Whatever
+
+--
+Content-Type: application/octet-stream
+Content-Transfer-Encoding: base64
+Content-Disposition: attachment; name="wookie.exe"
+
+Z290Y2hhCg==
+
+----
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/MIME-tools-5.515/testmsgs/triple-boundary-one-empty.msg
new/MIME-tools-5.517/testmsgs/triple-boundary-one-empty.msg
--- old/MIME-tools-5.515/testmsgs/triple-boundary-one-empty.msg 1970-01-01
01:00:00.000000000 +0100
+++ new/MIME-tools-5.517/testmsgs/triple-boundary-one-empty.msg 2026-01-28
17:13:44.000000000 +0100
@@ -0,0 +1,21 @@
+From: Test <[email protected]>
+To: Test <[email protected]>
+Subject: Ambiguous boundary
+MIME-Version: 1.0
+Content-Type: multipart/mixed; boundary="bar"; boundary=; boundary="foo"
+
+--foo
+Content-Type: text/plain
+
+Whatever
+
+--bar
+Content-Type: application/octet-stream
+Content-Transfer-Encoding: base64
+Content-Disposition: attachment; name="wookie.exe"
+
+Z290Y2hhCg==
+
+--bar--
+
+--foo--
++++++ README.md ++++++
## Build Results
Current state of perl in openSUSE:Factory is

The current state of perl in the devel project build (devel:languages:perl)

++++++ _scmsync.obsinfo ++++++
mtime: 1770790868
commit: 6ac59af313a37f1716fb79b52300c00a7eeeeec751ec156999efadf286485620
url: https://src.opensuse.org/perl/perl-MIME-tools.git
revision: 6ac59af313a37f1716fb79b52300c00a7eeeeec751ec156999efadf286485620
projectscmsync: https://src.opensuse.org/perl/_ObsPrj
++++++ 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-03-09 19:34:33.000000000 +0100
@@ -0,0 +1 @@
+.osc