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

![Factory build 
results](https://br.opensuse.org/status/openSUSE:Factory/perl-MIME-tools/standard)

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

![Devel project build 
results](https://br.opensuse.org/status/devel:languages:perl/perl-MIME-tools)



++++++ _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

Reply via email to