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 ); }
