Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package roundcubemail for openSUSE:Factory 
checked in at 2026-04-07 16:32:59
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/roundcubemail (Old)
 and      /work/SRC/openSUSE:Factory/.roundcubemail.new.21863 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "roundcubemail"

Tue Apr  7 16:32:59 2026 rev:93 rq:1344706 version:1.6.15

Changes:
--------
--- /work/SRC/openSUSE:Factory/roundcubemail/roundcubemail.changes      
2026-03-23 17:17:11.375210288 +0100
+++ /work/SRC/openSUSE:Factory/.roundcubemail.new.21863/roundcubemail.changes   
2026-04-07 16:48:06.282545875 +0200
@@ -2 +2,18 @@
-Mon Mar 23 08:46:12 UTC 2026 - Lars Vogdt <[email protected]>
+Sun Mar 29 19:44:22 UTC 2026 - Lars Vogdt <[email protected]> - 1.6.15
+
+- update to 1.6.15
+  This is a security update to the stable version 1.6 of Roundcube Webmail.
+  It provides fixes to some regressions introduced in the previous release 
+  as well a recently reported security vulnerability:
+
+    SVG Animate FUNCIRI Attribute Bypass — Remote Image Loading via 
fill/filter/stroke, reported by class_nzm.
+
+  This version is considered stable and we recommend to update all productive
+  installations of Roundcube 1.6.x with it. Please do backup your data before 
updating!
+
+  + Fix regression where mail search would fail on non-ascii search criteria 
(#10121)
+  + Fix regression where some data url images could get ignored/lost (#10128)
+  + Fix SVG Animate FUNCIRI Attribute Bypass — Remote Image Loading via 
fill/filter/stroke
+
+-------------------------------------------------------------------
+Mon Mar 23 08:46:12 UTC 2026 - Lars Vogdt <[email protected]> - 1.6.14

Old:
----
  roundcubemail-1.6.14-complete.tar.gz
  roundcubemail-1.6.14-complete.tar.gz.asc

New:
----
  roundcubemail-1.6.15-complete.tar.gz
  roundcubemail-1.6.15-complete.tar.gz.asc

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ roundcubemail.spec ++++++
--- /var/tmp/diff_new_pack.zC7lsB/_old  2026-04-07 16:48:07.142581410 +0200
+++ /var/tmp/diff_new_pack.zC7lsB/_new  2026-04-07 16:48:07.150581741 +0200
@@ -20,7 +20,7 @@
 %define roundcubeconfigpath %{_sysconfdir}/%{name}
 
 Name:           roundcubemail
-Version:        1.6.14
+Version:        1.6.15
 Release:        0
 Summary:        A browser-based multilingual IMAP client
 License:        BSD-3-Clause AND GPL-2.0-only AND GPL-3.0-or-later

++++++ roundcubemail-1.6.14-complete.tar.gz -> 
roundcubemail-1.6.15-complete.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/roundcubemail-1.6.14/CHANGELOG.md 
new/roundcubemail-1.6.15/CHANGELOG.md
--- old/roundcubemail-1.6.14/CHANGELOG.md       2026-03-18 14:55:38.000000000 
+0100
+++ new/roundcubemail-1.6.15/CHANGELOG.md       2026-03-29 11:48:48.000000000 
+0200
@@ -1,5 +1,11 @@
 # Changelog Roundcube Webmail
 
+## Release 1.6.15
+
+- Fix regression where mail search would fail on non-ascii search criteria 
(#10121)
+- Fix regression where some data url images could get ignored/lost (#10128)
+- Fix SVG Animate FUNCIRI Attribute Bypass — Remote Image Loading via 
fill/filter/stroke
+
 ## Release 1.6.14
 
 - Fix Postgres connection using IPv6 address (#10104)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/roundcubemail-1.6.14/composer.lock 
new/roundcubemail-1.6.15/composer.lock
--- old/roundcubemail-1.6.14/composer.lock      2026-03-18 14:55:39.000000000 
+0100
+++ new/roundcubemail-1.6.15/composer.lock      2026-03-29 11:48:48.000000000 
+0200
@@ -1658,15 +1658,15 @@
     "packages-dev": [],
     "aliases": [],
     "minimum-stability": "stable",
-    "stability-flags": {},
+    "stability-flags": [],
     "prefer-stable": false,
     "prefer-lowest": false,
     "platform": {
         "php": ">=7.3.0"
     },
-    "platform-dev": {},
+    "platform-dev": [],
     "platform-overrides": {
         "php": "7.3"
     },
-    "plugin-api-version": "2.9.0"
+    "plugin-api-version": "2.2.0"
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/roundcubemail-1.6.14/index.php 
new/roundcubemail-1.6.15/index.php
--- old/roundcubemail-1.6.14/index.php  2026-03-18 14:55:38.000000000 +0100
+++ new/roundcubemail-1.6.15/index.php  2026-03-29 11:48:48.000000000 +0200
@@ -2,7 +2,7 @@
 /**
  +-------------------------------------------------------------------------+
  | Roundcube Webmail IMAP Client                                           |
- | Version 1.6.14                                                           |
+ | Version 1.6.15                                                           |
  |                                                                         |
  | Copyright (C) The Roundcube Dev Team                                    |
  |                                                                         |
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/roundcubemail-1.6.14/installer/index.php 
new/roundcubemail-1.6.15/installer/index.php
--- old/roundcubemail-1.6.14/installer/index.php        2026-03-18 
14:55:38.000000000 +0100
+++ new/roundcubemail-1.6.15/installer/index.php        2026-03-29 
11:48:47.000000000 +0200
@@ -3,7 +3,7 @@
 /**
  +-------------------------------------------------------------------------+
  | Roundcube Webmail setup tool                                            |
- | Version 1.6.14                                                         |
+ | Version 1.6.15                                                         |
  |                                                                         |
  | Copyright (C) The Roundcube Dev Team                                    |
  |                                                                         |
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/roundcubemail-1.6.14/program/actions/mail/search.php 
new/roundcubemail-1.6.15/program/actions/mail/search.php
--- old/roundcubemail-1.6.14/program/actions/mail/search.php    2026-03-18 
14:55:38.000000000 +0100
+++ new/roundcubemail-1.6.15/program/actions/mail/search.php    2026-03-29 
11:48:47.000000000 +0200
@@ -56,6 +56,10 @@
         // add list filter string
         $search_str = $filter && $filter != 'ALL' ? $filter : '';
 
+        // We pass the filter as-is into IMAP SEARCH command. A newline could 
be used
+        // to inject extra commands, so we remove these.
+        $search_str = preg_replace('/[\r\n]+/', ' ', $search_str);
+
         if ($search_interval = self::search_interval_criteria($interval)) {
             $search_str .= ' ' . $search_interval;
         }
@@ -71,10 +75,6 @@
         $sort_column = self::sort_column();
         $sort_order  = self::sort_order();
 
-        // We pass the filter as-is into IMAP SEARCH command. A newline could 
be used
-        // to inject extra commands, so we remove these.
-        $search_str = preg_replace('/[\r\n]+/', ' ', $search_str);
-
         // set message set for already stored (but incomplete) search request
         if (!empty($continue) && isset($_SESSION['search']) && 
$_SESSION['search_request'] == $continue) {
             $rcmail->storage->set_search_set($_SESSION['search']);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/roundcubemail-1.6.14/program/include/iniset.php 
new/roundcubemail-1.6.15/program/include/iniset.php
--- old/roundcubemail-1.6.14/program/include/iniset.php 2026-03-18 
14:55:38.000000000 +0100
+++ new/roundcubemail-1.6.15/program/include/iniset.php 2026-03-29 
11:48:47.000000000 +0200
@@ -26,7 +26,7 @@
 }
 
 // application constants
-define('RCMAIL_VERSION', '1.6.14');
+define('RCMAIL_VERSION', '1.6.15');
 define('RCMAIL_START', microtime(true));
 
 if (!defined('INSTALL_PATH')) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/roundcubemail-1.6.14/program/lib/Roundcube/bootstrap.php 
new/roundcubemail-1.6.15/program/lib/Roundcube/bootstrap.php
--- old/roundcubemail-1.6.14/program/lib/Roundcube/bootstrap.php        
2026-03-18 14:55:38.000000000 +0100
+++ new/roundcubemail-1.6.15/program/lib/Roundcube/bootstrap.php        
2026-03-29 11:48:47.000000000 +0200
@@ -57,7 +57,7 @@
 }
 
 // framework constants
-define('RCUBE_VERSION', '1.6.14');
+define('RCUBE_VERSION', '1.6.15');
 define('RCUBE_CHARSET', 'UTF-8');
 define('RCUBE_TEMP_FILE_PREFIX', 'RCMTEMP');
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/roundcubemail-1.6.14/program/lib/Roundcube/rcube_washtml.php 
new/roundcubemail-1.6.15/program/lib/Roundcube/rcube_washtml.php
--- old/roundcubemail-1.6.14/program/lib/Roundcube/rcube_washtml.php    
2026-03-18 14:55:38.000000000 +0100
+++ new/roundcubemail-1.6.15/program/lib/Roundcube/rcube_washtml.php    
2026-03-29 11:48:47.000000000 +0200
@@ -428,7 +428,7 @@
             }
 
             // At this point we allow only valid base64 images
-            if (stripos($type, 'base64') === false || 
preg_match('|[^0-9a-z\s/+]|i', $matches[2])) {
+            if (stripos($type, 'base64') === false || 
preg_match('|[^0-9a-z\s/+=]|i', $matches[2])) {
                 return '';
             }
 
@@ -550,7 +550,8 @@
             return true;
         }
 
-        return self::attribute_value($node, 'attributeName', 
'/^(mask|cursor)$/i')
+        $rx = 
'/^(mask|cursor|fill|filter|stroke|clip-path|marker-start|marker-end|marker-mid)$/i';
+        return self::attribute_value($node, 'attributeName', $rx)
             && self::attribute_value($node, 'values', '/url\(/i');
     }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/roundcubemail-1.6.14/program/localization/lv_LV/messages.inc 
new/roundcubemail-1.6.15/program/localization/lv_LV/messages.inc
--- old/roundcubemail-1.6.14/program/localization/lv_LV/messages.inc    
2026-03-18 14:55:38.000000000 +0100
+++ new/roundcubemail-1.6.15/program/localization/lv_LV/messages.inc    
2026-03-29 11:48:47.000000000 +0200
@@ -17,7 +17,7 @@
 $messages['errortitle']  = 'Radās kļūda!';
 $messages['loginfailed']  = 'Pieslēgties neizdevās';
 $messages['cookiesdisabled'] = 'Jūsu pārlūkprogramma neatbalsta sīkdatnes 
(cookies)';
-$messages['sessionerror'] = 'Jūsu sessija ir beigusies.';
+$messages['sessionerror'] = 'Jūsu sesija ir beigusies.';
 $messages['cookiesmismatch'] = 'Konstatēta sīkfailu neatbilstība. Lūdzu, 
notīriet Jūsu interneta pārlūkprogrammas sīkfailus.';
 $messages['storageerror'] = 'Neizdevās pieslēgties IMAP serverim';
 $messages['servererror'] = 'Servera kļūda!';
@@ -217,9 +217,9 @@
 $messages['errrequestcheckfailed'] = 'Pieprasījuma pārbaude neizdevās.';
 $messages['errcsrfprotectionexplain'] = "Jūsu drošībai pieeja šim resursam ir 
aizsargāta pret vairāku vietņu pieprasījuma viltošanu (CSRF ).\nJa Jūs redzat 
šo ziņojumu, iespējams Jūs iepriekš nebijāt izgājuši ārā no šī e-pasta 
pārlūka.\n\nLai turpinātu, ir nepieciešams veikt lietotāja darbības.";
 $messages['errcontactserveradmin'] = 'Lūdzu kontaktējieties ar servera 
administratoru.';
-$messages['clicktoresumesession'] = 'Lai atjaunotu Jūsu iepriekšējo sessiju, 
spiest šeit.';
-$messages['errcomposesession'] = 'Rakstot vēstuli radās autorizācijas sessijas 
kļūda';
-$messages['errcomposesessionexplain'] = 'Pieprasītā sessija, vēstules 
rakstīšanai, netika atrasta.';
+$messages['clicktoresumesession'] = 'Lai atjaunotu Jūsu iepriekšējo sesiju, 
spiest šeit.';
+$messages['errcomposesession'] = 'Rakstot vēstuli radās autorizācijas sesijas 
kļūda';
+$messages['errcomposesessionexplain'] = 'Pieprasītā sesija, vēstules 
rakstīšanai, netika atrasta.';
 $messages['clicktocompose'] = 'Lai rakstītu jaunu vēstuli, spiest šeit';
 $messages['nosupporterror'] = 'Šī iespēja Jūsu interneta pārlūkā nav 
atbalstīta.';
 $messages['siginserted'] = 'Paraksts ievietots veiksmīgi.';
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/roundcubemail-1.6.14/public_html/index.php 
new/roundcubemail-1.6.15/public_html/index.php
--- old/roundcubemail-1.6.14/public_html/index.php      2026-03-18 
14:55:38.000000000 +0100
+++ new/roundcubemail-1.6.15/public_html/index.php      2026-03-29 
11:48:48.000000000 +0200
@@ -3,7 +3,7 @@
 /*
  +-----------------------------------------------------------------------+
  | Roundcube Webmail IMAP Client                                         |
- | Version 1.6.14                                                       |
+ | Version 1.6.15                                                       |
  |                                                                       |
  | Copyright (C) The Roundcube Dev Team                                  |
  |                                                                       |
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/roundcubemail-1.6.14/vendor/autoload.php 
new/roundcubemail-1.6.15/vendor/autoload.php
--- old/roundcubemail-1.6.14/vendor/autoload.php        2026-03-18 
14:55:44.000000000 +0100
+++ new/roundcubemail-1.6.15/vendor/autoload.php        2026-03-29 
11:48:53.000000000 +0200
@@ -2,22 +2,7 @@
 
 // autoload.php @generated by Composer
 
-if (PHP_VERSION_ID < 50600) {
-    if (!headers_sent()) {
-        header('HTTP/1.1 500 Internal Server Error');
-    }
-    $err = 'Composer 2.3.0 dropped support for autoloading on PHP <5.6 and you 
are running '.PHP_VERSION.', please upgrade PHP or use Composer 2.2 LTS via 
"composer self-update --2.2". Aborting.'.PHP_EOL;
-    if (!ini_get('display_errors')) {
-        if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
-            fwrite(STDERR, $err);
-        } elseif (!headers_sent()) {
-            echo $err;
-        }
-    }
-    throw new RuntimeException($err);
-}
-
 require_once __DIR__ . '/composer/autoload_real.php';
 
-return ComposerAutoloaderInit19cd6a958237e07811f84032a96930dd::getLoader();
-// generated by Roundcube install 1.6.14
+return ComposerAutoloaderInit93a4011a767df69f92cb20ccea9547e3::getLoader();
+// generated by Roundcube install 1.6.15
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/roundcubemail-1.6.14/vendor/composer/ClassLoader.php 
new/roundcubemail-1.6.15/vendor/composer/ClassLoader.php
--- old/roundcubemail-1.6.14/vendor/composer/ClassLoader.php    2026-01-29 
11:40:53.000000000 +0100
+++ new/roundcubemail-1.6.15/vendor/composer/ClassLoader.php    2026-03-29 
11:48:50.000000000 +0200
@@ -42,37 +42,35 @@
  */
 class ClassLoader
 {
-    /** @var \Closure(string):void */
-    private static $includeFile;
-
-    /** @var string|null */
+    /** @var ?string */
     private $vendorDir;
 
     // PSR-4
     /**
-     * @var array<string, array<string, int>>
+     * @var array[]
+     * @psalm-var array<string, array<string, int>>
      */
     private $prefixLengthsPsr4 = array();
     /**
-     * @var array<string, list<string>>
+     * @var array[]
+     * @psalm-var array<string, array<int, string>>
      */
     private $prefixDirsPsr4 = array();
     /**
-     * @var list<string>
+     * @var array[]
+     * @psalm-var array<string, string>
      */
     private $fallbackDirsPsr4 = array();
 
     // PSR-0
     /**
-     * List of PSR-0 prefixes
-     *
-     * Structured as array('F (first letter)' => array('Foo\Bar (full prefix)' 
=> array('path', 'path2')))
-     *
-     * @var array<string, array<string, list<string>>>
+     * @var array[]
+     * @psalm-var array<string, array<string, string[]>>
      */
     private $prefixesPsr0 = array();
     /**
-     * @var list<string>
+     * @var array[]
+     * @psalm-var array<string, string>
      */
     private $fallbackDirsPsr0 = array();
 
@@ -80,7 +78,8 @@
     private $useIncludePath = false;
 
     /**
-     * @var array<string, string>
+     * @var string[]
+     * @psalm-var array<string, string>
      */
     private $classMap = array();
 
@@ -88,29 +87,29 @@
     private $classMapAuthoritative = false;
 
     /**
-     * @var array<string, bool>
+     * @var bool[]
+     * @psalm-var array<string, bool>
      */
     private $missingClasses = array();
 
-    /** @var string|null */
+    /** @var ?string */
     private $apcuPrefix;
 
     /**
-     * @var array<string, self>
+     * @var self[]
      */
     private static $registeredLoaders = array();
 
     /**
-     * @param string|null $vendorDir
+     * @param ?string $vendorDir
      */
     public function __construct($vendorDir = null)
     {
         $this->vendorDir = $vendorDir;
-        self::initializeIncludeClosure();
     }
 
     /**
-     * @return array<string, list<string>>
+     * @return string[]
      */
     public function getPrefixes()
     {
@@ -122,7 +121,8 @@
     }
 
     /**
-     * @return array<string, list<string>>
+     * @return array[]
+     * @psalm-return array<string, array<int, string>>
      */
     public function getPrefixesPsr4()
     {
@@ -130,7 +130,8 @@
     }
 
     /**
-     * @return list<string>
+     * @return array[]
+     * @psalm-return array<string, string>
      */
     public function getFallbackDirs()
     {
@@ -138,7 +139,8 @@
     }
 
     /**
-     * @return list<string>
+     * @return array[]
+     * @psalm-return array<string, string>
      */
     public function getFallbackDirsPsr4()
     {
@@ -146,7 +148,8 @@
     }
 
     /**
-     * @return array<string, string> Array of classname => path
+     * @return string[] Array of classname => path
+     * @psalm-return array<string, string>
      */
     public function getClassMap()
     {
@@ -154,7 +157,8 @@
     }
 
     /**
-     * @param array<string, string> $classMap Class to filename map
+     * @param string[] $classMap Class to filename map
+     * @psalm-param array<string, string> $classMap
      *
      * @return void
      */
@@ -171,25 +175,24 @@
      * Registers a set of PSR-0 directories for a given prefix, either
      * appending or prepending to the ones previously set for this prefix.
      *
-     * @param string              $prefix  The prefix
-     * @param list<string>|string $paths   The PSR-0 root directories
-     * @param bool                $prepend Whether to prepend the directories
+     * @param string          $prefix  The prefix
+     * @param string[]|string $paths   The PSR-0 root directories
+     * @param bool            $prepend Whether to prepend the directories
      *
      * @return void
      */
     public function add($prefix, $paths, $prepend = false)
     {
-        $paths = (array) $paths;
         if (!$prefix) {
             if ($prepend) {
                 $this->fallbackDirsPsr0 = array_merge(
-                    $paths,
+                    (array) $paths,
                     $this->fallbackDirsPsr0
                 );
             } else {
                 $this->fallbackDirsPsr0 = array_merge(
                     $this->fallbackDirsPsr0,
-                    $paths
+                    (array) $paths
                 );
             }
 
@@ -198,19 +201,19 @@
 
         $first = $prefix[0];
         if (!isset($this->prefixesPsr0[$first][$prefix])) {
-            $this->prefixesPsr0[$first][$prefix] = $paths;
+            $this->prefixesPsr0[$first][$prefix] = (array) $paths;
 
             return;
         }
         if ($prepend) {
             $this->prefixesPsr0[$first][$prefix] = array_merge(
-                $paths,
+                (array) $paths,
                 $this->prefixesPsr0[$first][$prefix]
             );
         } else {
             $this->prefixesPsr0[$first][$prefix] = array_merge(
                 $this->prefixesPsr0[$first][$prefix],
-                $paths
+                (array) $paths
             );
         }
     }
@@ -219,9 +222,9 @@
      * Registers a set of PSR-4 directories for a given namespace, either
      * appending or prepending to the ones previously set for this namespace.
      *
-     * @param string              $prefix  The prefix/namespace, with trailing 
'\\'
-     * @param list<string>|string $paths   The PSR-4 base directories
-     * @param bool                $prepend Whether to prepend the directories
+     * @param string          $prefix  The prefix/namespace, with trailing '\\'
+     * @param string[]|string $paths   The PSR-4 base directories
+     * @param bool            $prepend Whether to prepend the directories
      *
      * @throws \InvalidArgumentException
      *
@@ -229,18 +232,17 @@
      */
     public function addPsr4($prefix, $paths, $prepend = false)
     {
-        $paths = (array) $paths;
         if (!$prefix) {
             // Register directories for the root namespace.
             if ($prepend) {
                 $this->fallbackDirsPsr4 = array_merge(
-                    $paths,
+                    (array) $paths,
                     $this->fallbackDirsPsr4
                 );
             } else {
                 $this->fallbackDirsPsr4 = array_merge(
                     $this->fallbackDirsPsr4,
-                    $paths
+                    (array) $paths
                 );
             }
         } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
@@ -250,18 +252,18 @@
                 throw new \InvalidArgumentException("A non-empty PSR-4 prefix 
must end with a namespace separator.");
             }
             $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
-            $this->prefixDirsPsr4[$prefix] = $paths;
+            $this->prefixDirsPsr4[$prefix] = (array) $paths;
         } elseif ($prepend) {
             // Prepend directories for an already registered namespace.
             $this->prefixDirsPsr4[$prefix] = array_merge(
-                $paths,
+                (array) $paths,
                 $this->prefixDirsPsr4[$prefix]
             );
         } else {
             // Append directories for an already registered namespace.
             $this->prefixDirsPsr4[$prefix] = array_merge(
                 $this->prefixDirsPsr4[$prefix],
-                $paths
+                (array) $paths
             );
         }
     }
@@ -270,8 +272,8 @@
      * Registers a set of PSR-0 directories for a given prefix,
      * replacing any others previously set for this prefix.
      *
-     * @param string              $prefix The prefix
-     * @param list<string>|string $paths  The PSR-0 base directories
+     * @param string          $prefix The prefix
+     * @param string[]|string $paths  The PSR-0 base directories
      *
      * @return void
      */
@@ -288,8 +290,8 @@
      * Registers a set of PSR-4 directories for a given namespace,
      * replacing any others previously set for this namespace.
      *
-     * @param string              $prefix The prefix/namespace, with trailing 
'\\'
-     * @param list<string>|string $paths  The PSR-4 base directories
+     * @param string          $prefix The prefix/namespace, with trailing '\\'
+     * @param string[]|string $paths  The PSR-4 base directories
      *
      * @throws \InvalidArgumentException
      *
@@ -423,8 +425,7 @@
     public function loadClass($class)
     {
         if ($file = $this->findFile($class)) {
-            $includeFile = self::$includeFile;
-            $includeFile($file);
+            includeFile($file);
 
             return true;
         }
@@ -475,9 +476,9 @@
     }
 
     /**
-     * Returns the currently registered loaders keyed by their corresponding 
vendor directories.
+     * Returns the currently registered loaders indexed by their corresponding 
vendor directories.
      *
-     * @return array<string, self>
+     * @return self[]
      */
     public static function getRegisteredLoaders()
     {
@@ -554,26 +555,18 @@
 
         return false;
     }
+}
 
-    /**
-     * @return void
-     */
-    private static function initializeIncludeClosure()
-    {
-        if (self::$includeFile !== null) {
-            return;
-        }
-
-        /**
-         * Scope isolated include.
-         *
-         * Prevents access to $this/self from included files.
-         *
-         * @param  string $file
-         * @return void
-         */
-        self::$includeFile = \Closure::bind(static function($file) {
-            include $file;
-        }, null, null);
-    }
+/**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ *
+ * @param  string $file
+ * @return void
+ * @private
+ */
+function includeFile($file)
+{
+    include $file;
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/roundcubemail-1.6.14/vendor/composer/InstalledVersions.php 
new/roundcubemail-1.6.15/vendor/composer/InstalledVersions.php
--- old/roundcubemail-1.6.14/vendor/composer/InstalledVersions.php      
2026-03-18 14:55:40.000000000 +0100
+++ new/roundcubemail-1.6.15/vendor/composer/InstalledVersions.php      
2026-03-29 11:48:49.000000000 +0200
@@ -21,36 +21,23 @@
  * See also https://getcomposer.org/doc/07-runtime.md#installed-versions
  *
  * To require its presence, you can require `composer-runtime-api ^2.0`
- *
- * @final
  */
 class InstalledVersions
 {
     /**
-     * @var string|null if set (by reflection by Composer), this should be set 
to the path where this class is being copied to
-     * @internal
-     */
-    private static $selfDir = null;
-
-    /**
      * @var mixed[]|null
-     * @psalm-var array{root: array{name: string, pretty_version: string, 
version: string, reference: string|null, type: string, install_path: string, 
aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: 
string, version?: string, reference?: string|null, type?: string, 
install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: 
string[], provided?: string[]}>}|array{}|null
+     * @psalm-var array{root: array{name: string, version: string, reference: 
string, pretty_version: string, aliases: string[], dev: bool, install_path: 
string, type: string}, versions: array<string, array{dev_requirement: bool, 
pretty_version?: string, version?: string, aliases?: string[], reference?: 
string, replaced?: string[], provided?: string[], install_path?: string, type?: 
string}>}|array{}|null
      */
     private static $installed;
 
     /**
-     * @var bool
-     */
-    private static $installedIsLocalDir;
-
-    /**
      * @var bool|null
      */
     private static $canGetVendors;
 
     /**
      * @var array[]
-     * @psalm-var array<string, array{root: array{name: string, 
pretty_version: string, version: string, reference: string|null, type: string, 
install_path: string, aliases: string[], dev: bool}, versions: array<string, 
array{pretty_version?: string, version?: string, reference?: string|null, 
type?: string, install_path?: string, aliases?: string[], dev_requirement: 
bool, replaced?: string[], provided?: string[]}>}>
+     * @psalm-var array<string, array{root: array{name: string, version: 
string, reference: string, pretty_version: string, aliases: string[], dev: 
bool, install_path: string, type: string}, versions: array<string, 
array{dev_requirement: bool, pretty_version?: string, version?: string, 
aliases?: string[], reference?: string, replaced?: string[], provided?: 
string[], install_path?: string, type?: string}>}>
      */
     private static $installedByVendor = array();
 
@@ -109,7 +96,7 @@
     {
         foreach (self::getInstalled() as $installed) {
             if (isset($installed['versions'][$packageName])) {
-                return $includeDevRequirements || 
!isset($installed['versions'][$packageName]['dev_requirement']) || 
$installed['versions'][$packageName]['dev_requirement'] === false;
+                return $includeDevRequirements || 
empty($installed['versions'][$packageName]['dev_requirement']);
             }
         }
 
@@ -130,7 +117,7 @@
      */
     public static function satisfies(VersionParser $parser, $packageName, 
$constraint)
     {
-        $constraint = $parser->parseConstraints((string) $constraint);
+        $constraint = $parser->parseConstraints($constraint);
         $provided = 
$parser->parseConstraints(self::getVersionRanges($packageName));
 
         return $provided->matches($constraint);
@@ -254,7 +241,7 @@
 
     /**
      * @return array
-     * @psalm-return array{name: string, pretty_version: string, version: 
string, reference: string|null, type: string, install_path: string, aliases: 
string[], dev: bool}
+     * @psalm-return array{name: string, version: string, reference: string, 
pretty_version: string, aliases: string[], dev: bool, install_path: string, 
type: string}
      */
     public static function getRootPackage()
     {
@@ -268,7 +255,7 @@
      *
      * @deprecated Use getAllRawData() instead which returns all datasets for 
all autoloaders present in the process. getRawData only returns the first 
dataset loaded, which may not be what you expect.
      * @return array[]
-     * @psalm-return array{root: array{name: string, pretty_version: string, 
version: string, reference: string|null, type: string, install_path: string, 
aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: 
string, version?: string, reference?: string|null, type?: string, 
install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: 
string[], provided?: string[]}>}
+     * @psalm-return array{root: array{name: string, version: string, 
reference: string, pretty_version: string, aliases: string[], dev: bool, 
install_path: string, type: string}, versions: array<string, 
array{dev_requirement: bool, pretty_version?: string, version?: string, 
aliases?: string[], reference?: string, replaced?: string[], provided?: 
string[], install_path?: string, type?: string}>}
      */
     public static function getRawData()
     {
@@ -291,7 +278,7 @@
      * Returns the raw data of all installed.php which are currently loaded 
for custom implementations
      *
      * @return array[]
-     * @psalm-return list<array{root: array{name: string, pretty_version: 
string, version: string, reference: string|null, type: string, install_path: 
string, aliases: string[], dev: bool}, versions: array<string, 
array{pretty_version?: string, version?: string, reference?: string|null, 
type?: string, install_path?: string, aliases?: string[], dev_requirement: 
bool, replaced?: string[], provided?: string[]}>}>
+     * @psalm-return list<array{root: array{name: string, version: string, 
reference: string, pretty_version: string, aliases: string[], dev: bool, 
install_path: string, type: string}, versions: array<string, 
array{dev_requirement: bool, pretty_version?: string, version?: string, 
aliases?: string[], reference?: string, replaced?: string[], provided?: 
string[], install_path?: string, type?: string}>}>
      */
     public static function getAllRawData()
     {
@@ -314,35 +301,17 @@
      * @param  array[] $data A vendor/composer/installed.php data set
      * @return void
      *
-     * @psalm-param array{root: array{name: string, pretty_version: string, 
version: string, reference: string|null, type: string, install_path: string, 
aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: 
string, version?: string, reference?: string|null, type?: string, 
install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: 
string[], provided?: string[]}>} $data
+     * @psalm-param array{root: array{name: string, version: string, 
reference: string, pretty_version: string, aliases: string[], dev: bool, 
install_path: string, type: string}, versions: array<string, 
array{dev_requirement: bool, pretty_version?: string, version?: string, 
aliases?: string[], reference?: string, replaced?: string[], provided?: 
string[], install_path?: string, type?: string}>} $data
      */
     public static function reload($data)
     {
         self::$installed = $data;
         self::$installedByVendor = array();
-
-        // when using reload, we disable the duplicate protection to ensure 
that self::$installed data is
-        // always returned, but we cannot know whether it comes from the 
installed.php in __DIR__ or not,
-        // so we have to assume it does not, and that may result in duplicate 
data being returned when listing
-        // all installed packages for example
-        self::$installedIsLocalDir = false;
-    }
-
-    /**
-     * @return string
-     */
-    private static function getSelfDir()
-    {
-        if (self::$selfDir === null) {
-            self::$selfDir = strtr(__DIR__, '\\', '/');
-        }
-
-        return self::$selfDir;
     }
 
     /**
      * @return array[]
-     * @psalm-return list<array{root: array{name: string, pretty_version: 
string, version: string, reference: string|null, type: string, install_path: 
string, aliases: string[], dev: bool}, versions: array<string, 
array{pretty_version?: string, version?: string, reference?: string|null, 
type?: string, install_path?: string, aliases?: string[], dev_requirement: 
bool, replaced?: string[], provided?: string[]}>}>
+     * @psalm-return list<array{root: array{name: string, version: string, 
reference: string, pretty_version: string, aliases: string[], dev: bool, 
install_path: string, type: string}, versions: array<string, 
array{dev_requirement: bool, pretty_version?: string, version?: string, 
aliases?: string[], reference?: string, replaced?: string[], provided?: 
string[], install_path?: string, type?: string}>}>
      */
     private static function getInstalled()
     {
@@ -354,9 +323,7 @@
         $copiedLocalDir = false;
 
         if (self::$canGetVendors) {
-            $selfDir = self::getSelfDir();
             foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => 
$loader) {
-                $vendorDir = strtr($vendorDir, '\\', '/');
                 if (isset(self::$installedByVendor[$vendorDir])) {
                     $installed[] = self::$installedByVendor[$vendorDir];
                 } elseif (is_file($vendorDir.'/composer/installed.php')) {
@@ -364,14 +331,11 @@
                     $required = require $vendorDir.'/composer/installed.php';
                     self::$installedByVendor[$vendorDir] = $required;
                     $installed[] = $required;
-                    if (self::$installed === null && $vendorDir.'/composer' 
=== $selfDir) {
+                    if (strtr($vendorDir.'/composer', '\\', '/') === 
strtr(__DIR__, '\\', '/')) {
                         self::$installed = $required;
-                        self::$installedIsLocalDir = true;
+                        $copiedLocalDir = true;
                     }
                 }
-                if (self::$installedIsLocalDir && $vendorDir.'/composer' === 
$selfDir) {
-                    $copiedLocalDir = true;
-                }
             }
         }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/roundcubemail-1.6.14/vendor/composer/autoload_classmap.php 
new/roundcubemail-1.6.15/vendor/composer/autoload_classmap.php
--- old/roundcubemail-1.6.14/vendor/composer/autoload_classmap.php      
2026-03-18 14:55:40.000000000 +0100
+++ new/roundcubemail-1.6.15/vendor/composer/autoload_classmap.php      
2026-03-29 11:48:50.000000000 +0200
@@ -2,7 +2,7 @@
 
 // autoload_classmap.php @generated by Composer
 
-$vendorDir = dirname(__DIR__);
+$vendorDir = dirname(dirname(__FILE__));
 $baseDir = dirname($vendorDir);
 
 return array(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/roundcubemail-1.6.14/vendor/composer/autoload_files.php 
new/roundcubemail-1.6.15/vendor/composer/autoload_files.php
--- old/roundcubemail-1.6.14/vendor/composer/autoload_files.php 2026-03-18 
14:55:40.000000000 +0100
+++ new/roundcubemail-1.6.15/vendor/composer/autoload_files.php 2026-03-29 
11:48:50.000000000 +0200
@@ -2,7 +2,7 @@
 
 // autoload_files.php @generated by Composer
 
-$vendorDir = dirname(__DIR__);
+$vendorDir = dirname(dirname(__FILE__));
 $baseDir = dirname($vendorDir);
 
 return array(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/roundcubemail-1.6.14/vendor/composer/autoload_namespaces.php 
new/roundcubemail-1.6.15/vendor/composer/autoload_namespaces.php
--- old/roundcubemail-1.6.14/vendor/composer/autoload_namespaces.php    
2026-03-18 14:55:40.000000000 +0100
+++ new/roundcubemail-1.6.15/vendor/composer/autoload_namespaces.php    
2026-03-29 11:48:50.000000000 +0200
@@ -2,12 +2,12 @@
 
 // autoload_namespaces.php @generated by Composer
 
-$vendorDir = dirname(__DIR__);
+$vendorDir = dirname(dirname(__FILE__));
 $baseDir = dirname($vendorDir);
 
 return array(
-    'Net' => array($vendorDir . '/pear/net_smtp', $vendorDir . 
'/pear/net_socket'),
+    'Net' => array($vendorDir . '/pear/net_socket', $vendorDir . 
'/pear/net_smtp'),
     'Mail' => array($vendorDir . '/pear/mail_mime'),
-    'Console' => array($vendorDir . '/pear/console_commandline', $vendorDir . 
'/pear/console_getopt'),
+    'Console' => array($vendorDir . '/pear/console_getopt', $vendorDir . 
'/pear/console_commandline'),
     'Auth' => array($vendorDir . '/pear/auth_sasl'),
 );
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/roundcubemail-1.6.14/vendor/composer/autoload_psr4.php 
new/roundcubemail-1.6.15/vendor/composer/autoload_psr4.php
--- old/roundcubemail-1.6.14/vendor/composer/autoload_psr4.php  2026-03-18 
14:55:40.000000000 +0100
+++ new/roundcubemail-1.6.15/vendor/composer/autoload_psr4.php  2026-03-29 
11:48:50.000000000 +0200
@@ -2,13 +2,13 @@
 
 // autoload_psr4.php @generated by Composer
 
-$vendorDir = dirname(__DIR__);
+$vendorDir = dirname(dirname(__FILE__));
 $baseDir = dirname($vendorDir);
 
 return array(
     'RtfHtmlPhp\\' => array($vendorDir . '/roundcube/rtf-html-php/src'),
     'Roundcube\\Composer\\' => array($vendorDir . 
'/roundcube/plugin-installer/src'),
-    'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-factory/src', 
$vendorDir . '/psr/http-message/src'),
+    'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-message/src', 
$vendorDir . '/psr/http-factory/src'),
     'Psr\\Http\\Client\\' => array($vendorDir . '/psr/http-client/src'),
     'Masterminds\\' => array($vendorDir . '/masterminds/html5/src'),
     'IPLib\\' => array($vendorDir . '/mlocati/ip-lib/src'),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/roundcubemail-1.6.14/vendor/composer/autoload_real.php 
new/roundcubemail-1.6.15/vendor/composer/autoload_real.php
--- old/roundcubemail-1.6.14/vendor/composer/autoload_real.php  2026-03-18 
14:55:40.000000000 +0100
+++ new/roundcubemail-1.6.15/vendor/composer/autoload_real.php  2026-03-29 
11:48:50.000000000 +0200
@@ -2,7 +2,7 @@
 
 // autoload_real.php @generated by Composer
 
-class ComposerAutoloaderInit19cd6a958237e07811f84032a96930dd
+class ComposerAutoloaderInit93a4011a767df69f92cb20ccea9547e3
 {
     private static $loader;
 
@@ -24,31 +24,61 @@
 
         require __DIR__ . '/platform_check.php';
 
-        
spl_autoload_register(array('ComposerAutoloaderInit19cd6a958237e07811f84032a96930dd',
 'loadClassLoader'), true, true);
-        self::$loader = $loader = new 
\Composer\Autoload\ClassLoader(\dirname(__DIR__));
-        
spl_autoload_unregister(array('ComposerAutoloaderInit19cd6a958237e07811f84032a96930dd',
 'loadClassLoader'));
+        
spl_autoload_register(array('ComposerAutoloaderInit93a4011a767df69f92cb20ccea9547e3',
 'loadClassLoader'), true, true);
+        self::$loader = $loader = new 
\Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__)));
+        
spl_autoload_unregister(array('ComposerAutoloaderInit93a4011a767df69f92cb20ccea9547e3',
 'loadClassLoader'));
 
         $includePaths = require __DIR__ . '/include_paths.php';
         $includePaths[] = get_include_path();
         set_include_path(implode(PATH_SEPARATOR, $includePaths));
 
-        require __DIR__ . '/autoload_static.php';
-        
call_user_func(\Composer\Autoload\ComposerStaticInit19cd6a958237e07811f84032a96930dd::getInitializer($loader));
-
-        $loader->register(true);
+        $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') 
&& (!function_exists('zend_loader_file_encoded') || 
!zend_loader_file_encoded());
+        if ($useStaticLoader) {
+            require __DIR__ . '/autoload_static.php';
+
+            
call_user_func(\Composer\Autoload\ComposerStaticInit93a4011a767df69f92cb20ccea9547e3::getInitializer($loader));
+        } else {
+            $map = require __DIR__ . '/autoload_namespaces.php';
+            foreach ($map as $namespace => $path) {
+                $loader->set($namespace, $path);
+            }
 
-        $filesToLoad = 
\Composer\Autoload\ComposerStaticInit19cd6a958237e07811f84032a96930dd::$files;
-        $requireFile = \Closure::bind(static function ($fileIdentifier, $file) 
{
-            if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) 
{
-                $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
+            $map = require __DIR__ . '/autoload_psr4.php';
+            foreach ($map as $namespace => $path) {
+                $loader->setPsr4($namespace, $path);
+            }
 
-                require $file;
+            $classMap = require __DIR__ . '/autoload_classmap.php';
+            if ($classMap) {
+                $loader->addClassMap($classMap);
             }
-        }, null, null);
-        foreach ($filesToLoad as $fileIdentifier => $file) {
-            $requireFile($fileIdentifier, $file);
+        }
+
+        $loader->register(true);
+
+        if ($useStaticLoader) {
+            $includeFiles = 
Composer\Autoload\ComposerStaticInit93a4011a767df69f92cb20ccea9547e3::$files;
+        } else {
+            $includeFiles = require __DIR__ . '/autoload_files.php';
+        }
+        foreach ($includeFiles as $fileIdentifier => $file) {
+            composerRequire93a4011a767df69f92cb20ccea9547e3($fileIdentifier, 
$file);
         }
 
         return $loader;
     }
 }
+
+/**
+ * @param string $fileIdentifier
+ * @param string $file
+ * @return void
+ */
+function composerRequire93a4011a767df69f92cb20ccea9547e3($fileIdentifier, 
$file)
+{
+    if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
+        $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
+
+        require $file;
+    }
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/roundcubemail-1.6.14/vendor/composer/autoload_static.php 
new/roundcubemail-1.6.15/vendor/composer/autoload_static.php
--- old/roundcubemail-1.6.14/vendor/composer/autoload_static.php        
2026-03-18 14:55:40.000000000 +0100
+++ new/roundcubemail-1.6.15/vendor/composer/autoload_static.php        
2026-03-29 11:48:50.000000000 +0200
@@ -4,7 +4,7 @@
 
 namespace Composer\Autoload;
 
-class ComposerStaticInit19cd6a958237e07811f84032a96930dd
+class ComposerStaticInit93a4011a767df69f92cb20ccea9547e3
 {
     public static $files = array (
         '7b11c4dc42b3b3023073cb14e519683c' => __DIR__ . '/..' . 
'/ralouphie/getallheaders/src/getallheaders.php',
@@ -13,115 +13,115 @@
     );
 
     public static $prefixLengthsPsr4 = array (
-        'R' =>
+        'R' => 
         array (
             'RtfHtmlPhp\\' => 11,
             'Roundcube\\Composer\\' => 19,
         ),
-        'P' =>
+        'P' => 
         array (
             'Psr\\Http\\Message\\' => 17,
             'Psr\\Http\\Client\\' => 16,
         ),
-        'M' =>
+        'M' => 
         array (
             'Masterminds\\' => 12,
         ),
-        'I' =>
+        'I' => 
         array (
             'IPLib\\' => 6,
         ),
-        'G' =>
+        'G' => 
         array (
             'GuzzleHttp\\Psr7\\' => 16,
             'GuzzleHttp\\Promise\\' => 19,
             'GuzzleHttp\\' => 11,
         ),
-        'D' =>
+        'D' => 
         array (
             'DASPRiD\\Enum\\' => 13,
         ),
-        'B' =>
+        'B' => 
         array (
             'BaconQrCode\\' => 12,
         ),
     );
 
     public static $prefixDirsPsr4 = array (
-        'RtfHtmlPhp\\' =>
+        'RtfHtmlPhp\\' => 
         array (
             0 => __DIR__ . '/..' . '/roundcube/rtf-html-php/src',
         ),
-        'Roundcube\\Composer\\' =>
+        'Roundcube\\Composer\\' => 
         array (
             0 => __DIR__ . '/..' . '/roundcube/plugin-installer/src',
         ),
-        'Psr\\Http\\Message\\' =>
+        'Psr\\Http\\Message\\' => 
         array (
-            0 => __DIR__ . '/..' . '/psr/http-factory/src',
-            1 => __DIR__ . '/..' . '/psr/http-message/src',
+            0 => __DIR__ . '/..' . '/psr/http-message/src',
+            1 => __DIR__ . '/..' . '/psr/http-factory/src',
         ),
-        'Psr\\Http\\Client\\' =>
+        'Psr\\Http\\Client\\' => 
         array (
             0 => __DIR__ . '/..' . '/psr/http-client/src',
         ),
-        'Masterminds\\' =>
+        'Masterminds\\' => 
         array (
             0 => __DIR__ . '/..' . '/masterminds/html5/src',
         ),
-        'IPLib\\' =>
+        'IPLib\\' => 
         array (
             0 => __DIR__ . '/..' . '/mlocati/ip-lib/src',
         ),
-        'GuzzleHttp\\Psr7\\' =>
+        'GuzzleHttp\\Psr7\\' => 
         array (
             0 => __DIR__ . '/..' . '/guzzlehttp/psr7/src',
         ),
-        'GuzzleHttp\\Promise\\' =>
+        'GuzzleHttp\\Promise\\' => 
         array (
             0 => __DIR__ . '/..' . '/guzzlehttp/promises/src',
         ),
-        'GuzzleHttp\\' =>
+        'GuzzleHttp\\' => 
         array (
             0 => __DIR__ . '/..' . '/guzzlehttp/guzzle/src',
         ),
-        'DASPRiD\\Enum\\' =>
+        'DASPRiD\\Enum\\' => 
         array (
             0 => __DIR__ . '/..' . '/dasprid/enum/src',
         ),
-        'BaconQrCode\\' =>
+        'BaconQrCode\\' => 
         array (
             0 => __DIR__ . '/..' . '/bacon/bacon-qr-code/src',
         ),
     );
 
     public static $prefixesPsr0 = array (
-        'N' =>
+        'N' => 
         array (
-            'Net' =>
+            'Net' => 
             array (
-                0 => __DIR__ . '/..' . '/pear/net_smtp',
-                1 => __DIR__ . '/..' . '/pear/net_socket',
+                0 => __DIR__ . '/..' . '/pear/net_socket',
+                1 => __DIR__ . '/..' . '/pear/net_smtp',
             ),
         ),
-        'M' =>
+        'M' => 
         array (
-            'Mail' =>
+            'Mail' => 
             array (
                 0 => __DIR__ . '/..' . '/pear/mail_mime',
             ),
         ),
-        'C' =>
+        'C' => 
         array (
-            'Console' =>
+            'Console' => 
             array (
-                0 => __DIR__ . '/..' . '/pear/console_commandline',
-                1 => __DIR__ . '/..' . '/pear/console_getopt',
+                0 => __DIR__ . '/..' . '/pear/console_getopt',
+                1 => __DIR__ . '/..' . '/pear/console_commandline',
             ),
         ),
-        'A' =>
+        'A' => 
         array (
-            'Auth' =>
+            'Auth' => 
             array (
                 0 => __DIR__ . '/..' . '/pear/auth_sasl',
             ),
@@ -177,10 +177,10 @@
     public static function getInitializer(ClassLoader $loader)
     {
         return \Closure::bind(function () use ($loader) {
-            $loader->prefixLengthsPsr4 = 
ComposerStaticInit19cd6a958237e07811f84032a96930dd::$prefixLengthsPsr4;
-            $loader->prefixDirsPsr4 = 
ComposerStaticInit19cd6a958237e07811f84032a96930dd::$prefixDirsPsr4;
-            $loader->prefixesPsr0 = 
ComposerStaticInit19cd6a958237e07811f84032a96930dd::$prefixesPsr0;
-            $loader->classMap = 
ComposerStaticInit19cd6a958237e07811f84032a96930dd::$classMap;
+            $loader->prefixLengthsPsr4 = 
ComposerStaticInit93a4011a767df69f92cb20ccea9547e3::$prefixLengthsPsr4;
+            $loader->prefixDirsPsr4 = 
ComposerStaticInit93a4011a767df69f92cb20ccea9547e3::$prefixDirsPsr4;
+            $loader->prefixesPsr0 = 
ComposerStaticInit93a4011a767df69f92cb20ccea9547e3::$prefixesPsr0;
+            $loader->classMap = 
ComposerStaticInit93a4011a767df69f92cb20ccea9547e3::$classMap;
 
         }, null, ClassLoader::class);
     }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/roundcubemail-1.6.14/vendor/composer/include_paths.php 
new/roundcubemail-1.6.15/vendor/composer/include_paths.php
--- old/roundcubemail-1.6.14/vendor/composer/include_paths.php  2026-03-18 
14:55:40.000000000 +0100
+++ new/roundcubemail-1.6.15/vendor/composer/include_paths.php  2026-03-29 
11:48:50.000000000 +0200
@@ -2,7 +2,7 @@
 
 // include_paths.php @generated by Composer
 
-$vendorDir = dirname(__DIR__);
+$vendorDir = dirname(dirname(__FILE__));
 $baseDir = dirname($vendorDir);
 
 return array(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/roundcubemail-1.6.14/vendor/composer/installed.php 
new/roundcubemail-1.6.15/vendor/composer/installed.php
--- old/roundcubemail-1.6.14/vendor/composer/installed.php      2026-03-18 
14:55:40.000000000 +0100
+++ new/roundcubemail-1.6.15/vendor/composer/installed.php      2026-03-29 
11:48:49.000000000 +0200
@@ -1,193 +1,193 @@
 <?php return array(
     'root' => array(
-        'name' => 'roundcube/roundcubemail',
         'pretty_version' => '1.0.0+no-version-set',
         'version' => '1.0.0.0',
-        'reference' => null,
         'type' => 'library',
         'install_path' => __DIR__ . '/../../',
         'aliases' => array(),
+        'reference' => null,
+        'name' => 'roundcube/roundcubemail',
         'dev' => false,
     ),
     'versions' => array(
         'bacon/bacon-qr-code' => array(
             'pretty_version' => '2.0.8',
             'version' => '2.0.8.0',
-            'reference' => '8674e51bb65af933a5ffaf1c308a660387c35c22',
             'type' => 'library',
             'install_path' => __DIR__ . '/../bacon/bacon-qr-code',
             'aliases' => array(),
+            'reference' => '8674e51bb65af933a5ffaf1c308a660387c35c22',
             'dev_requirement' => false,
         ),
         'dasprid/enum' => array(
             'pretty_version' => '1.0.7',
             'version' => '1.0.7.0',
-            'reference' => 'b5874fa9ed0043116c72162ec7f4fb50e02e7cce',
             'type' => 'library',
             'install_path' => __DIR__ . '/../dasprid/enum',
             'aliases' => array(),
+            'reference' => 'b5874fa9ed0043116c72162ec7f4fb50e02e7cce',
             'dev_requirement' => false,
         ),
         'guzzlehttp/guzzle' => array(
             'pretty_version' => '7.10.0',
             'version' => '7.10.0.0',
-            'reference' => 'b51ac707cfa420b7bfd4e4d5e510ba8008e822b4',
             'type' => 'library',
             'install_path' => __DIR__ . '/../guzzlehttp/guzzle',
             'aliases' => array(),
+            'reference' => 'b51ac707cfa420b7bfd4e4d5e510ba8008e822b4',
             'dev_requirement' => false,
         ),
         'guzzlehttp/promises' => array(
             'pretty_version' => '2.3.0',
             'version' => '2.3.0.0',
-            'reference' => '481557b130ef3790cf82b713667b43030dc9c957',
             'type' => 'library',
             'install_path' => __DIR__ . '/../guzzlehttp/promises',
             'aliases' => array(),
+            'reference' => '481557b130ef3790cf82b713667b43030dc9c957',
             'dev_requirement' => false,
         ),
         'guzzlehttp/psr7' => array(
             'pretty_version' => '2.9.0',
             'version' => '2.9.0.0',
-            'reference' => '7d0ed42f28e42d61352a7a79de682e5e67fec884',
             'type' => 'library',
             'install_path' => __DIR__ . '/../guzzlehttp/psr7',
             'aliases' => array(),
+            'reference' => '7d0ed42f28e42d61352a7a79de682e5e67fec884',
             'dev_requirement' => false,
         ),
         'kolab/net_ldap3' => array(
             'pretty_version' => 'v1.1.5',
             'version' => '1.1.5.0',
-            'reference' => '5a319cf437d75aad564ce7fd076cc5423722868b',
             'type' => 'library',
             'install_path' => __DIR__ . '/../kolab/net_ldap3',
             'aliases' => array(),
+            'reference' => '5a319cf437d75aad564ce7fd076cc5423722868b',
             'dev_requirement' => false,
         ),
         'masterminds/html5' => array(
             'pretty_version' => '2.7.6',
             'version' => '2.7.6.0',
-            'reference' => '897eb517a343a2281f11bc5556d6548db7d93947',
             'type' => 'library',
             'install_path' => __DIR__ . '/../masterminds/html5',
             'aliases' => array(),
+            'reference' => '897eb517a343a2281f11bc5556d6548db7d93947',
             'dev_requirement' => false,
         ),
         'mlocati/ip-lib' => array(
             'pretty_version' => '1.22.0',
             'version' => '1.22.0.0',
-            'reference' => '4e40ffd3bf9989db19403d89c4d8be44b87b8a91',
             'type' => 'library',
             'install_path' => __DIR__ . '/../mlocati/ip-lib',
             'aliases' => array(),
+            'reference' => '4e40ffd3bf9989db19403d89c4d8be44b87b8a91',
             'dev_requirement' => false,
         ),
         'pear/auth_sasl' => array(
             'pretty_version' => 'v1.1.0',
             'version' => '1.1.0.0',
-            'reference' => 'db1ead3dc0bf986d2bab0dbc04d114800cf91dee',
             'type' => 'library',
             'install_path' => __DIR__ . '/../pear/auth_sasl',
             'aliases' => array(),
+            'reference' => 'db1ead3dc0bf986d2bab0dbc04d114800cf91dee',
             'dev_requirement' => false,
         ),
         'pear/console_commandline' => array(
             'pretty_version' => 'v1.2.6',
             'version' => '1.2.6.0',
-            'reference' => '611c5bff2e47ec5a184748cb5fedc2869098ff28',
             'type' => 'library',
             'install_path' => __DIR__ . '/../pear/console_commandline',
             'aliases' => array(),
+            'reference' => '611c5bff2e47ec5a184748cb5fedc2869098ff28',
             'dev_requirement' => false,
         ),
         'pear/console_getopt' => array(
             'pretty_version' => 'v1.4.3',
             'version' => '1.4.3.0',
-            'reference' => 'a41f8d3e668987609178c7c4a9fe48fecac53fa0',
             'type' => 'library',
             'install_path' => __DIR__ . '/../pear/console_getopt',
             'aliases' => array(),
+            'reference' => 'a41f8d3e668987609178c7c4a9fe48fecac53fa0',
             'dev_requirement' => false,
         ),
         'pear/crypt_gpg' => array(
             'pretty_version' => 'v1.6.11',
             'version' => '1.6.11.0',
-            'reference' => '6d307aae8b38ee35d0a2297510bd2356d1452c2b',
             'type' => 'library',
             'install_path' => __DIR__ . '/../pear/crypt_gpg',
             'aliases' => array(),
+            'reference' => '6d307aae8b38ee35d0a2297510bd2356d1452c2b',
             'dev_requirement' => false,
         ),
         'pear/mail_mime' => array(
             'pretty_version' => '1.10.12',
             'version' => '1.10.12.0',
-            'reference' => 'd032c7c9335e96d5954ac6e93d33955f3b7246e2',
             'type' => 'library',
             'install_path' => __DIR__ . '/../pear/mail_mime',
             'aliases' => array(),
+            'reference' => 'd032c7c9335e96d5954ac6e93d33955f3b7246e2',
             'dev_requirement' => false,
         ),
         'pear/net_ldap2' => array(
             'pretty_version' => 'v2.3.0',
             'version' => '2.3.0.0',
-            'reference' => '6eae6d20533469ffe1c01684923cd09f0fae3b77',
             'type' => 'library',
             'install_path' => __DIR__ . '/../pear/net_ldap2',
             'aliases' => array(),
+            'reference' => '6eae6d20533469ffe1c01684923cd09f0fae3b77',
             'dev_requirement' => false,
         ),
         'pear/net_sieve' => array(
             'pretty_version' => '1.4.8',
             'version' => '1.4.8.0',
-            'reference' => '345eb171c0b377e4f9f6fe9c6e532a76dfe2d754',
             'type' => 'library',
             'install_path' => __DIR__ . '/../pear/net_sieve',
             'aliases' => array(),
+            'reference' => '345eb171c0b377e4f9f6fe9c6e532a76dfe2d754',
             'dev_requirement' => false,
         ),
         'pear/net_smtp' => array(
             'pretty_version' => '1.10.1',
             'version' => '1.10.1.0',
-            'reference' => 'cfd963dc5cc73b4d64c7769e47dfa0f439dec536',
             'type' => 'library',
             'install_path' => __DIR__ . '/../pear/net_smtp',
             'aliases' => array(),
+            'reference' => 'cfd963dc5cc73b4d64c7769e47dfa0f439dec536',
             'dev_requirement' => false,
         ),
         'pear/net_socket' => array(
             'pretty_version' => 'v1.2.2',
             'version' => '1.2.2.0',
-            'reference' => 'bbe6a12bb4f7059dba161f6ddd43f369c0ec8d09',
             'type' => 'library',
             'install_path' => __DIR__ . '/../pear/net_socket',
             'aliases' => array(),
+            'reference' => 'bbe6a12bb4f7059dba161f6ddd43f369c0ec8d09',
             'dev_requirement' => false,
         ),
         'pear/pear-core-minimal' => array(
             'pretty_version' => 'v1.10.18',
             'version' => '1.10.18.0',
-            'reference' => 'c7b55789d01de0ce090d289b73f1bbd6a2f113b1',
             'type' => 'library',
             'install_path' => __DIR__ . '/../pear/pear-core-minimal',
             'aliases' => array(),
+            'reference' => 'c7b55789d01de0ce090d289b73f1bbd6a2f113b1',
             'dev_requirement' => false,
         ),
         'pear/pear_exception' => array(
             'pretty_version' => 'v1.0.2',
             'version' => '1.0.2.0',
-            'reference' => 'b14fbe2ddb0b9f94f5b24cf08783d599f776fff0',
             'type' => 'class',
             'install_path' => __DIR__ . '/../pear/pear_exception',
             'aliases' => array(),
+            'reference' => 'b14fbe2ddb0b9f94f5b24cf08783d599f776fff0',
             'dev_requirement' => false,
         ),
         'psr/http-client' => array(
             'pretty_version' => '1.0.3',
             'version' => '1.0.3.0',
-            'reference' => 'bb5906edc1c324c9a05aa0873d40117941e5fa90',
             'type' => 'library',
             'install_path' => __DIR__ . '/../psr/http-client',
             'aliases' => array(),
+            'reference' => 'bb5906edc1c324c9a05aa0873d40117941e5fa90',
             'dev_requirement' => false,
         ),
         'psr/http-client-implementation' => array(
@@ -199,10 +199,10 @@
         'psr/http-factory' => array(
             'pretty_version' => '1.1.0',
             'version' => '1.1.0.0',
-            'reference' => '2b4765fddfe3b508ac62f829e852b1501d3f6e8a',
             'type' => 'library',
             'install_path' => __DIR__ . '/../psr/http-factory',
             'aliases' => array(),
+            'reference' => '2b4765fddfe3b508ac62f829e852b1501d3f6e8a',
             'dev_requirement' => false,
         ),
         'psr/http-factory-implementation' => array(
@@ -214,10 +214,10 @@
         'psr/http-message' => array(
             'pretty_version' => '2.0',
             'version' => '2.0.0.0',
-            'reference' => '402d35bcb92c70c026d1a6a9883f06b2ead23d71',
             'type' => 'library',
             'install_path' => __DIR__ . '/../psr/http-message',
             'aliases' => array(),
+            'reference' => '402d35bcb92c70c026d1a6a9883f06b2ead23d71',
             'dev_requirement' => false,
         ),
         'psr/http-message-implementation' => array(
@@ -229,37 +229,37 @@
         'ralouphie/getallheaders' => array(
             'pretty_version' => '3.0.3',
             'version' => '3.0.3.0',
-            'reference' => '120b605dfeb996808c31b6477290a714d356e822',
             'type' => 'library',
             'install_path' => __DIR__ . '/../ralouphie/getallheaders',
             'aliases' => array(),
+            'reference' => '120b605dfeb996808c31b6477290a714d356e822',
             'dev_requirement' => false,
         ),
         'roundcube/plugin-installer' => array(
             'pretty_version' => '0.3.11',
             'version' => '0.3.11.0',
-            'reference' => '93c5cfc660d47929aaca64585791e7e3887948ed',
             'type' => 'composer-plugin',
             'install_path' => __DIR__ . '/../roundcube/plugin-installer',
             'aliases' => array(),
+            'reference' => '93c5cfc660d47929aaca64585791e7e3887948ed',
             'dev_requirement' => false,
         ),
         'roundcube/roundcubemail' => array(
             'pretty_version' => '1.0.0+no-version-set',
             'version' => '1.0.0.0',
-            'reference' => null,
             'type' => 'library',
             'install_path' => __DIR__ . '/../../',
             'aliases' => array(),
+            'reference' => null,
             'dev_requirement' => false,
         ),
         'roundcube/rtf-html-php' => array(
             'pretty_version' => 'v2.2',
             'version' => '2.2.0.0',
-            'reference' => 'a3432ca249b73bf24fec50114191a63ad8b1478c',
             'type' => 'library',
             'install_path' => __DIR__ . '/../roundcube/rtf-html-php',
             'aliases' => array(),
+            'reference' => 'a3432ca249b73bf24fec50114191a63ad8b1478c',
             'dev_requirement' => false,
         ),
         'rsky/pear-core-min' => array(
@@ -271,10 +271,10 @@
         'symfony/deprecation-contracts' => array(
             'pretty_version' => 'v2.5.4',
             'version' => '2.5.4.0',
-            'reference' => '605389f2a7e5625f273b53960dc46aeaf9c62918',
             'type' => 'library',
             'install_path' => __DIR__ . '/../symfony/deprecation-contracts',
             'aliases' => array(),
+            'reference' => '605389f2a7e5625f273b53960dc46aeaf9c62918',
             'dev_requirement' => false,
         ),
     ),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/roundcubemail-1.6.14/vendor/composer/platform_check.php 
new/roundcubemail-1.6.15/vendor/composer/platform_check.php
--- old/roundcubemail-1.6.14/vendor/composer/platform_check.php 2026-03-18 
14:55:40.000000000 +0100
+++ new/roundcubemail-1.6.15/vendor/composer/platform_check.php 2026-03-29 
11:48:50.000000000 +0200
@@ -19,7 +19,8 @@
             echo 'Composer detected issues in your platform:' . 
PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', 
implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL;
         }
     }
-    throw new \RuntimeException(
-        'Composer detected issues in your platform: ' . implode(' ', $issues)
+    trigger_error(
+        'Composer detected issues in your platform: ' . implode(' ', $issues),
+        E_USER_ERROR
     );
 }

Reply via email to