diff --git a/lam/composer.lock b/lam/composer.lock index 25bd8b5e4..18f8332b3 100644 --- a/lam/composer.lock +++ b/lam/composer.lock @@ -4,20 +4,20 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "a4cf937ec482ba4747016ff3f8a38d8d", + "content-hash": "ebcc864bc725d4b59b4acd088924a39a", "packages": [ { "name": "beberlei/assert", - "version": "v3.3.2", + "version": "v3.3.3", "source": { "type": "git", "url": "https://github.com/beberlei/assert.git", - "reference": "cb70015c04be1baee6f5f5c953703347c0ac1655" + "reference": "b5fd8eacd8915a1b627b8bfc027803f1939734dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/beberlei/assert/zipball/cb70015c04be1baee6f5f5c953703347c0ac1655", - "reference": "cb70015c04be1baee6f5f5c953703347c0ac1655", + "url": "https://api.github.com/repos/beberlei/assert/zipball/b5fd8eacd8915a1b627b8bfc027803f1939734dd", + "reference": "b5fd8eacd8915a1b627b8bfc027803f1939734dd", "shasum": "" }, "require": { @@ -25,7 +25,7 @@ "ext-json": "*", "ext-mbstring": "*", "ext-simplexml": "*", - "php": "^7.0 || ^8.0" + "php": "^7.1 || ^8.0" }, "require-dev": { "friendsofphp/php-cs-fixer": "*", @@ -69,9 +69,9 @@ ], "support": { "issues": "https://github.com/beberlei/assert/issues", - "source": "https://github.com/beberlei/assert/tree/v3.3.2" + "source": "https://github.com/beberlei/assert/tree/v3.3.3" }, - "time": "2021-12-16T21:41:27+00:00" + "time": "2024-07-15T13:18:35+00:00" }, { "name": "brick/math", @@ -679,16 +679,16 @@ }, { "name": "firebase/php-jwt", - "version": "v6.10.1", + "version": "v6.10.2", "source": { "type": "git", "url": "https://github.com/firebase/php-jwt.git", - "reference": "500501c2ce893c824c801da135d02661199f60c5" + "reference": "30c19ed0f3264cb660ea496895cfb6ef7ee3653b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/firebase/php-jwt/zipball/500501c2ce893c824c801da135d02661199f60c5", - "reference": "500501c2ce893c824c801da135d02661199f60c5", + "url": "https://api.github.com/repos/firebase/php-jwt/zipball/30c19ed0f3264cb660ea496895cfb6ef7ee3653b", + "reference": "30c19ed0f3264cb660ea496895cfb6ef7ee3653b", "shasum": "" }, "require": { @@ -736,9 +736,9 @@ ], "support": { "issues": "https://github.com/firebase/php-jwt/issues", - "source": "https://github.com/firebase/php-jwt/tree/v6.10.1" + "source": "https://github.com/firebase/php-jwt/tree/v6.10.2" }, - "time": "2024-05-18T18:05:11+00:00" + "time": "2024-11-24T11:22:49+00:00" }, { "name": "guzzlehttp/psr7", @@ -916,16 +916,16 @@ }, { "name": "illuminate/collections", - "version": "v10.48.20", + "version": "v10.48.25", "source": { "type": "git", "url": "https://github.com/illuminate/collections.git", - "reference": "37c863cffb345869dd134eff8e646bc82a19cc96" + "reference": "48de3d6bc6aa779112ddcb608a3a96fc975d89d8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/collections/zipball/37c863cffb345869dd134eff8e646bc82a19cc96", - "reference": "37c863cffb345869dd134eff8e646bc82a19cc96", + "url": "https://api.github.com/repos/illuminate/collections/zipball/48de3d6bc6aa779112ddcb608a3a96fc975d89d8", + "reference": "48de3d6bc6aa779112ddcb608a3a96fc975d89d8", "shasum": "" }, "require": { @@ -967,20 +967,20 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2024-06-19T14:25:05+00:00" + "time": "2024-11-21T14:02:44+00:00" }, { "name": "illuminate/conditionable", - "version": "v10.48.20", + "version": "v10.48.25", "source": { "type": "git", "url": "https://github.com/illuminate/conditionable.git", - "reference": "d0958e4741fc9d6f516a552060fd1b829a85e009" + "reference": "3ee34ac306fafc2a6f19cd7cd68c9af389e432a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/conditionable/zipball/d0958e4741fc9d6f516a552060fd1b829a85e009", - "reference": "d0958e4741fc9d6f516a552060fd1b829a85e009", + "url": "https://api.github.com/repos/illuminate/conditionable/zipball/3ee34ac306fafc2a6f19cd7cd68c9af389e432a5", + "reference": "3ee34ac306fafc2a6f19cd7cd68c9af389e432a5", "shasum": "" }, "require": { @@ -1013,20 +1013,20 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2023-02-03T08:06:17+00:00" + "time": "2024-11-21T14:02:44+00:00" }, { "name": "illuminate/contracts", - "version": "v10.48.20", + "version": "v10.48.25", "source": { "type": "git", "url": "https://github.com/illuminate/contracts.git", - "reference": "8d7152c4a1f5d9cf7da3e8b71f23e4556f6138ac" + "reference": "f90663a69f926105a70b78060a31f3c64e2d1c74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/contracts/zipball/8d7152c4a1f5d9cf7da3e8b71f23e4556f6138ac", - "reference": "8d7152c4a1f5d9cf7da3e8b71f23e4556f6138ac", + "url": "https://api.github.com/repos/illuminate/contracts/zipball/f90663a69f926105a70b78060a31f3c64e2d1c74", + "reference": "f90663a69f926105a70b78060a31f3c64e2d1c74", "shasum": "" }, "require": { @@ -1061,11 +1061,11 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2024-01-15T18:52:32+00:00" + "time": "2024-11-21T14:02:44+00:00" }, { "name": "illuminate/macroable", - "version": "v10.48.20", + "version": "v10.48.25", "source": { "type": "git", "url": "https://github.com/illuminate/macroable.git", @@ -1111,7 +1111,7 @@ }, { "name": "illuminate/pagination", - "version": "v10.48.20", + "version": "v10.48.25", "source": { "type": "git", "url": "https://github.com/illuminate/pagination.git", @@ -1161,16 +1161,16 @@ }, { "name": "illuminate/support", - "version": "v10.48.20", + "version": "v10.48.25", "source": { "type": "git", "url": "https://github.com/illuminate/support.git", - "reference": "56c6d9895605b019e3debb9440454596ef99312a" + "reference": "64b258f80175c658aef9e22dd3f2ba18c99b243c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/support/zipball/56c6d9895605b019e3debb9440454596ef99312a", - "reference": "56c6d9895605b019e3debb9440454596ef99312a", + "url": "https://api.github.com/repos/illuminate/support/zipball/64b258f80175c658aef9e22dd3f2ba18c99b243c", + "reference": "64b258f80175c658aef9e22dd3f2ba18c99b243c", "shasum": "" }, "require": { @@ -1228,20 +1228,20 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2024-05-20T13:31:33+00:00" + "time": "2024-11-21T14:02:44+00:00" }, { "name": "monolog/monolog", - "version": "3.7.0", + "version": "3.8.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "f4393b648b78a5408747de94fca38beb5f7e9ef8" + "reference": "32e515fdc02cdafbe4593e30a9350d486b125b67" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/f4393b648b78a5408747de94fca38beb5f7e9ef8", - "reference": "f4393b648b78a5408747de94fca38beb5f7e9ef8", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/32e515fdc02cdafbe4593e30a9350d486b125b67", + "reference": "32e515fdc02cdafbe4593e30a9350d486b125b67", "shasum": "" }, "require": { @@ -1261,12 +1261,14 @@ "guzzlehttp/psr7": "^2.2", "mongodb/mongodb": "^1.8", "php-amqplib/php-amqplib": "~2.4 || ^3", - "phpstan/phpstan": "^1.9", - "phpstan/phpstan-deprecation-rules": "^1.0", - "phpstan/phpstan-strict-rules": "^1.4", - "phpunit/phpunit": "^10.5.17", + "php-console/php-console": "^3.1.8", + "phpstan/phpstan": "^2", + "phpstan/phpstan-deprecation-rules": "^2", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "^10.5.17 || ^11.0.7", "predis/predis": "^1.1 || ^2", - "ruflin/elastica": "^7", + "rollbar/rollbar": "^4.0", + "ruflin/elastica": "^7 || ^8", "symfony/mailer": "^5.4 || ^6", "symfony/mime": "^5.4 || ^6" }, @@ -1317,7 +1319,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/3.7.0" + "source": "https://github.com/Seldaek/monolog/tree/3.8.0" }, "funding": [ { @@ -1329,7 +1331,7 @@ "type": "tidelift" } ], - "time": "2024-06-28T09:40:51+00:00" + "time": "2024-11-12T13:57:08+00:00" }, { "name": "nesbot/carbon", @@ -1561,16 +1563,16 @@ }, { "name": "php-http/discovery", - "version": "1.19.4", + "version": "1.20.0", "source": { "type": "git", "url": "https://github.com/php-http/discovery.git", - "reference": "0700efda8d7526335132360167315fdab3aeb599" + "reference": "82fe4c73ef3363caed49ff8dd1539ba06044910d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-http/discovery/zipball/0700efda8d7526335132360167315fdab3aeb599", - "reference": "0700efda8d7526335132360167315fdab3aeb599", + "url": "https://api.github.com/repos/php-http/discovery/zipball/82fe4c73ef3363caed49ff8dd1539ba06044910d", + "reference": "82fe4c73ef3363caed49ff8dd1539ba06044910d", "shasum": "" }, "require": { @@ -1634,22 +1636,22 @@ ], "support": { "issues": "https://github.com/php-http/discovery/issues", - "source": "https://github.com/php-http/discovery/tree/1.19.4" + "source": "https://github.com/php-http/discovery/tree/1.20.0" }, - "time": "2024-03-29T13:00:05+00:00" + "time": "2024-10-02T11:20:13+00:00" }, { "name": "phpmailer/phpmailer", - "version": "v6.9.1", + "version": "v6.9.3", "source": { "type": "git", "url": "https://github.com/PHPMailer/PHPMailer.git", - "reference": "039de174cd9c17a8389754d3b877a2ed22743e18" + "reference": "2f5c94fe7493efc213f643c23b1b1c249d40f47e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/039de174cd9c17a8389754d3b877a2ed22743e18", - "reference": "039de174cd9c17a8389754d3b877a2ed22743e18", + "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/2f5c94fe7493efc213f643c23b1b1c249d40f47e", + "reference": "2f5c94fe7493efc213f643c23b1b1c249d40f47e", "shasum": "" }, "require": { @@ -1709,7 +1711,7 @@ "description": "PHPMailer is a full-featured email creation and transfer class for PHP", "support": { "issues": "https://github.com/PHPMailer/PHPMailer/issues", - "source": "https://github.com/PHPMailer/PHPMailer/tree/v6.9.1" + "source": "https://github.com/PHPMailer/PHPMailer/tree/v6.9.3" }, "funding": [ { @@ -1717,20 +1719,20 @@ "type": "github" } ], - "time": "2023-11-25T22:23:28+00:00" + "time": "2024-11-24T18:04:13+00:00" }, { "name": "phpseclib/phpseclib", - "version": "3.0.41", + "version": "3.0.42", "source": { "type": "git", "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "621c73f7dcb310b61de34d1da4c4204e8ace6ceb" + "reference": "db92f1b1987b12b13f248fe76c3a52cadb67bb98" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/621c73f7dcb310b61de34d1da4c4204e8ace6ceb", - "reference": "621c73f7dcb310b61de34d1da4c4204e8ace6ceb", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/db92f1b1987b12b13f248fe76c3a52cadb67bb98", + "reference": "db92f1b1987b12b13f248fe76c3a52cadb67bb98", "shasum": "" }, "require": { @@ -1811,7 +1813,7 @@ ], "support": { "issues": "https://github.com/phpseclib/phpseclib/issues", - "source": "https://github.com/phpseclib/phpseclib/tree/3.0.41" + "source": "https://github.com/phpseclib/phpseclib/tree/3.0.42" }, "funding": [ { @@ -1827,7 +1829,7 @@ "type": "tidelift" } ], - "time": "2024-08-12T00:13:54+00:00" + "time": "2024-09-16T03:06:04+00:00" }, { "name": "psr/clock", @@ -2498,16 +2500,16 @@ }, { "name": "symfony/deprecation-contracts", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1" + "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", - "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", + "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", "shasum": "" }, "require": { @@ -2545,7 +2547,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.1" }, "funding": [ { @@ -2561,27 +2563,27 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/http-client", - "version": "v6.4.15", + "version": "v6.4.16", "source": { "type": "git", "url": "https://github.com/symfony/http-client.git", - "reference": "cb4073c905cd12b8496d24ac428a9228c1750670" + "reference": "60a113666fa67e598abace38e5f46a0954d8833d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/cb4073c905cd12b8496d24ac428a9228c1750670", - "reference": "cb4073c905cd12b8496d24ac428a9228c1750670", + "url": "https://api.github.com/repos/symfony/http-client/zipball/60a113666fa67e598abace38e5f46a0954d8833d", + "reference": "60a113666fa67e598abace38e5f46a0954d8833d", "shasum": "" }, "require": { "php": ">=8.1", "psr/log": "^1|^2|^3", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/http-client-contracts": "^3.4.1", + "symfony/http-client-contracts": "~3.4.3|^3.5.1", "symfony/service-contracts": "^2.5|^3" }, "conflict": { @@ -2638,7 +2640,7 @@ "http" ], "support": { - "source": "https://github.com/symfony/http-client/tree/v6.4.15" + "source": "https://github.com/symfony/http-client/tree/v6.4.16" }, "funding": [ { @@ -2654,20 +2656,20 @@ "type": "tidelift" } ], - "time": "2024-11-13T13:40:18+00:00" + "time": "2024-11-27T11:52:33+00:00" }, { "name": "symfony/http-client-contracts", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/http-client-contracts.git", - "reference": "20414d96f391677bf80078aa55baece78b82647d" + "reference": "c2f3ad828596624ca39ea40f83617ef51ca8bbf9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/20414d96f391677bf80078aa55baece78b82647d", - "reference": "20414d96f391677bf80078aa55baece78b82647d", + "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/c2f3ad828596624ca39ea40f83617ef51ca8bbf9", + "reference": "c2f3ad828596624ca39ea40f83617ef51ca8bbf9", "shasum": "" }, "require": { @@ -2716,7 +2718,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/http-client-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/http-client-contracts/tree/v3.5.1" }, "funding": [ { @@ -2732,20 +2734,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-11-25T12:02:18+00:00" }, { "name": "symfony/http-foundation", - "version": "v6.4.14", + "version": "v6.4.16", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "ba020a321a95519303a3f09ec2824d34d601c388" + "reference": "431771b7a6f662f1575b3cfc8fd7617aa9864d57" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/ba020a321a95519303a3f09ec2824d34d601c388", - "reference": "ba020a321a95519303a3f09ec2824d34d601c388", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/431771b7a6f662f1575b3cfc8fd7617aa9864d57", + "reference": "431771b7a6f662f1575b3cfc8fd7617aa9864d57", "shasum": "" }, "require": { @@ -2755,12 +2757,12 @@ "symfony/polyfill-php83": "^1.27" }, "conflict": { - "symfony/cache": "<6.3" + "symfony/cache": "<6.4.12|>=7.0,<7.1.5" }, "require-dev": { "doctrine/dbal": "^2.13.1|^3|^4", "predis/predis": "^1.1|^2.0", - "symfony/cache": "^6.3|^7.0", + "symfony/cache": "^6.4.12|^7.1.5", "symfony/dependency-injection": "^5.4|^6.0|^7.0", "symfony/expression-language": "^5.4|^6.0|^7.0", "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4|^7.0", @@ -2793,7 +2795,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v6.4.14" + "source": "https://github.com/symfony/http-foundation/tree/v6.4.16" }, "funding": [ { @@ -2809,7 +2811,7 @@ "type": "tidelift" } ], - "time": "2024-11-05T16:39:55+00:00" + "time": "2024-11-13T18:58:10+00:00" }, { "name": "symfony/polyfill-mbstring", @@ -3049,20 +3051,20 @@ }, { "name": "symfony/polyfill-uuid", - "version": "v1.30.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-uuid.git", - "reference": "2ba1f33797470debcda07fe9dce20a0003df18e9" + "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/2ba1f33797470debcda07fe9dce20a0003df18e9", - "reference": "2ba1f33797470debcda07fe9dce20a0003df18e9", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/21533be36c24be3f4b1669c4725c7d1d2bab4ae2", + "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-uuid": "*" @@ -3108,7 +3110,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/polyfill-uuid/tree/v1.30.0" + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.31.0" }, "funding": [ { @@ -3124,20 +3126,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T15:07:36+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/psr-http-message-bridge", - "version": "v6.4.11", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/psr-http-message-bridge.git", - "reference": "74835ba54eca99a38f374f7a6d932fa510124773" + "reference": "c9cf83326a1074f83a738fc5320945abf7fb7fec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/74835ba54eca99a38f374f7a6d932fa510124773", - "reference": "74835ba54eca99a38f374f7a6d932fa510124773", + "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/c9cf83326a1074f83a738fc5320945abf7fb7fec", + "reference": "c9cf83326a1074f83a738fc5320945abf7fb7fec", "shasum": "" }, "require": { @@ -3191,7 +3193,7 @@ "psr-7" ], "support": { - "source": "https://github.com/symfony/psr-http-message-bridge/tree/v6.4.11" + "source": "https://github.com/symfony/psr-http-message-bridge/tree/v6.4.13" }, "funding": [ { @@ -3207,20 +3209,20 @@ "type": "tidelift" } ], - "time": "2024-08-14T13:55:58+00:00" + "time": "2024-09-25T14:18:03+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f" + "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", - "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/e53260aabf78fb3d63f8d79d69ece59f80d5eda0", + "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0", "shasum": "" }, "require": { @@ -3274,7 +3276,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/service-contracts/tree/v3.5.1" }, "funding": [ { @@ -3290,20 +3292,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/translation", - "version": "v6.4.10", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "94041203f8ac200ae9e7c6a18fa6137814ccecc9" + "reference": "bee9bfabfa8b4045a66bf82520e492cddbaffa66" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/94041203f8ac200ae9e7c6a18fa6137814ccecc9", - "reference": "94041203f8ac200ae9e7c6a18fa6137814ccecc9", + "url": "https://api.github.com/repos/symfony/translation/zipball/bee9bfabfa8b4045a66bf82520e492cddbaffa66", + "reference": "bee9bfabfa8b4045a66bf82520e492cddbaffa66", "shasum": "" }, "require": { @@ -3369,7 +3371,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v6.4.10" + "source": "https://github.com/symfony/translation/tree/v6.4.13" }, "funding": [ { @@ -3385,20 +3387,20 @@ "type": "tidelift" } ], - "time": "2024-07-26T12:30:32+00:00" + "time": "2024-09-27T18:14:25+00:00" }, { "name": "symfony/translation-contracts", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a" + "reference": "4667ff3bd513750603a09c8dedbea942487fb07c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/b9d2189887bb6b2e0367a9fc7136c5239ab9b05a", - "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/4667ff3bd513750603a09c8dedbea942487fb07c", + "reference": "4667ff3bd513750603a09c8dedbea942487fb07c", "shasum": "" }, "require": { @@ -3447,7 +3449,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/translation-contracts/tree/v3.5.1" }, "funding": [ { @@ -3463,20 +3465,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/uid", - "version": "v6.4.11", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/uid.git", - "reference": "6a0394ad707de386547223948fac1e0f2805bc0b" + "reference": "18eb207f0436a993fffbdd811b5b8fa35fa5e007" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/6a0394ad707de386547223948fac1e0f2805bc0b", - "reference": "6a0394ad707de386547223948fac1e0f2805bc0b", + "url": "https://api.github.com/repos/symfony/uid/zipball/18eb207f0436a993fffbdd811b5b8fa35fa5e007", + "reference": "18eb207f0436a993fffbdd811b5b8fa35fa5e007", "shasum": "" }, "require": { @@ -3521,7 +3523,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v6.4.11" + "source": "https://github.com/symfony/uid/tree/v6.4.13" }, "funding": [ { @@ -3537,7 +3539,7 @@ "type": "tidelift" } ], - "time": "2024-08-12T09:55:28+00:00" + "time": "2024-09-25T14:18:03+00:00" }, { "name": "thecodingmachine/safe", @@ -3680,16 +3682,16 @@ }, { "name": "voku/portable-ascii", - "version": "2.0.1", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/voku/portable-ascii.git", - "reference": "b56450eed252f6801410d810c8e1727224ae0743" + "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b56450eed252f6801410d810c8e1727224ae0743", - "reference": "b56450eed252f6801410d810c8e1727224ae0743", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b1d923f88091c6bf09699efcd7c8a1b1bfd7351d", + "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d", "shasum": "" }, "require": { @@ -3714,7 +3716,7 @@ "authors": [ { "name": "Lars Moelleken", - "homepage": "http://www.moelleken.org/" + "homepage": "https://www.moelleken.org/" } ], "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", @@ -3726,7 +3728,7 @@ ], "support": { "issues": "https://github.com/voku/portable-ascii/issues", - "source": "https://github.com/voku/portable-ascii/tree/2.0.1" + "source": "https://github.com/voku/portable-ascii/tree/2.0.3" }, "funding": [ { @@ -3750,7 +3752,7 @@ "type": "tidelift" } ], - "time": "2022-03-08T17:03:00+00:00" + "time": "2024-11-21T01:49:47+00:00" }, { "name": "web-auth/cose-lib", @@ -4621,5 +4623,5 @@ "platform-overrides": { "php": "8.1" }, - "plugin-api-version": "2.6.0" + "plugin-api-version": "2.3.0" } diff --git a/lam/lib/3rdParty/composer/beberlei/assert/.github/workflows/ci.yml b/lam/lib/3rdParty/composer/beberlei/assert/.github/workflows/ci.yml deleted file mode 100644 index 7003ff495..000000000 --- a/lam/lib/3rdParty/composer/beberlei/assert/.github/workflows/ci.yml +++ /dev/null @@ -1,64 +0,0 @@ -on: [push, pull_request] -name: CI -jobs: - tests: - name: Tests - runs-on: ubuntu-latest - strategy: - matrix: - php-versions: ['7.0', '7.1', '7.2', '7.3', '7.4', '8.0', '8.1'] - - steps: - - name: Checkout - uses: actions/checkout@v1 - - - name: Setup PHP - uses: shivammathur/setup-php@v2 - with: - php-version: ${{ matrix.php-versions }} - tools: "cs2pr" - - - name: "Cache dependencies installed with composer" - uses: "actions/cache@v1" - with: - path: "~/.composer/cache" - key: "php-${{ matrix.php-version }}-composer-locked-${{ hashFiles('composer.lock') }}" - restore-keys: "php-${{ matrix.php-version }}-composer-locked-" - - - name: "Composer" - run: "composer update --prefer-stable" - - - name: "PHPUnit" - run: "php vendor/bin/phpunit" - -# lint: -# name: Lint -# runs-on: ubuntu-latest - -# steps: -# - name: Checkout -# uses: actions/checkout@v1 - -# - name: Setup PHP -# uses: shivammathur/setup-php@v2 -# with: -# php-version: 7.4 - -# - name: "Cache dependencies installed with composer" -# uses: "actions/cache@v1" -# with: -# path: "~/.composer/cache" -# key: "php-${{ matrix.php-version }}-composer-locked-${{ hashFiles('composer.lock') }}" -# restore-keys: "php-${{ matrix.php-version }}-composer-locked-" - -# - name: "Composer" -# run: "composer update --prefer-stable" - -# - name: "assert:cs-lint" -# run: "composer assert:cs-lint" - -# - name: "assert:sa-code" -# run: "composer assert:sa-code" - -# - name: "assert:sa-tests" -# run: "composer assert:sa-tests" diff --git a/lam/lib/3rdParty/composer/beberlei/assert/composer.json b/lam/lib/3rdParty/composer/beberlei/assert/composer.json index 1485a0084..cbf18a953 100644 --- a/lam/lib/3rdParty/composer/beberlei/assert/composer.json +++ b/lam/lib/3rdParty/composer/beberlei/assert/composer.json @@ -23,7 +23,7 @@ "sort-packages": true }, "require": { - "php": "^7.0 || ^8.0", + "php": "^7.1 || ^8.0", "ext-simplexml": "*", "ext-mbstring": "*", "ext-ctype": "*", diff --git a/lam/lib/3rdParty/composer/beberlei/assert/lib/Assert/Assert.php b/lam/lib/3rdParty/composer/beberlei/assert/lib/Assert/Assert.php index 3614b3455..201bce57d 100644 --- a/lam/lib/3rdParty/composer/beberlei/assert/lib/Assert/Assert.php +++ b/lam/lib/3rdParty/composer/beberlei/assert/lib/Assert/Assert.php @@ -42,7 +42,7 @@ abstract class Assert * The assertion chain can be stateful, that means be careful when you reuse * it. You should never pass around the chain. */ - public static function that($value, $defaultMessage = null, string $defaultPropertyPath = null): AssertionChain + public static function that($value, $defaultMessage = null, ?string $defaultPropertyPath = null): AssertionChain { $assertionChain = new AssertionChain($value, $defaultMessage, $defaultPropertyPath); @@ -55,7 +55,7 @@ abstract class Assert * @param mixed $values * @param string|callable|null $defaultMessage */ - public static function thatAll($values, $defaultMessage = null, string $defaultPropertyPath = null): AssertionChain + public static function thatAll($values, $defaultMessage = null, ?string $defaultPropertyPath = null): AssertionChain { return static::that($values, $defaultMessage, $defaultPropertyPath)->all(); } @@ -66,7 +66,7 @@ abstract class Assert * @param mixed $value * @param string|callable|null $defaultMessage */ - public static function thatNullOr($value, $defaultMessage = null, string $defaultPropertyPath = null): AssertionChain + public static function thatNullOr($value, $defaultMessage = null, ?string $defaultPropertyPath = null): AssertionChain { return static::that($value, $defaultMessage, $defaultPropertyPath)->nullOr(); } diff --git a/lam/lib/3rdParty/composer/beberlei/assert/lib/Assert/Assertion.php b/lam/lib/3rdParty/composer/beberlei/assert/lib/Assert/Assertion.php index 243e64d28..81bc97809 100644 --- a/lam/lib/3rdParty/composer/beberlei/assert/lib/Assert/Assertion.php +++ b/lam/lib/3rdParty/composer/beberlei/assert/lib/Assert/Assertion.php @@ -307,7 +307,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function eq($value, $value2, $message = null, string $propertyPath = null): bool + public static function eq($value, $value2, $message = null, ?string $propertyPath = null): bool { if ($value != $value2) { $message = \sprintf( @@ -331,7 +331,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function eqArraySubset($value, $value2, $message = null, string $propertyPath = null): bool + public static function eqArraySubset($value, $value2, $message = null, ?string $propertyPath = null): bool { static::isArray($value, $message, $propertyPath); static::isArray($value2, $message, $propertyPath); @@ -358,7 +358,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function same($value, $value2, $message = null, string $propertyPath = null): bool + public static function same($value, $value2, $message = null, ?string $propertyPath = null): bool { if ($value !== $value2) { $message = \sprintf( @@ -382,7 +382,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function notEq($value1, $value2, $message = null, string $propertyPath = null): bool + public static function notEq($value1, $value2, $message = null, ?string $propertyPath = null): bool { if ($value1 == $value2) { $message = \sprintf( @@ -412,7 +412,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function notSame($value1, $value2, $message = null, string $propertyPath = null): bool + public static function notSame($value1, $value2, $message = null, ?string $propertyPath = null): bool { if ($value1 === $value2) { $message = \sprintf( @@ -434,7 +434,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function notInArray($value, array $choices, $message = null, string $propertyPath = null): bool + public static function notInArray($value, array $choices, $message = null, ?string $propertyPath = null): bool { if (true === \in_array($value, $choices)) { $message = \sprintf( @@ -461,7 +461,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function integer($value, $message = null, string $propertyPath = null): bool + public static function integer($value, $message = null, ?string $propertyPath = null): bool { if (!\is_int($value)) { $message = \sprintf( @@ -488,7 +488,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function float($value, $message = null, string $propertyPath = null): bool + public static function float($value, $message = null, ?string $propertyPath = null): bool { if (!\is_float($value)) { $message = \sprintf( @@ -515,7 +515,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function digit($value, $message = null, string $propertyPath = null): bool + public static function digit($value, $message = null, ?string $propertyPath = null): bool { if (!\ctype_digit((string)$value)) { $message = \sprintf( @@ -537,7 +537,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function integerish($value, $message = null, string $propertyPath = null): bool + public static function integerish($value, $message = null, ?string $propertyPath = null): bool { if ( \is_resource($value) || @@ -577,7 +577,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function boolean($value, $message = null, string $propertyPath = null): bool + public static function boolean($value, $message = null, ?string $propertyPath = null): bool { if (!\is_bool($value)) { $message = \sprintf( @@ -604,7 +604,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function scalar($value, $message = null, string $propertyPath = null): bool + public static function scalar($value, $message = null, ?string $propertyPath = null): bool { if (!\is_scalar($value)) { $message = \sprintf( @@ -631,7 +631,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function notEmpty($value, $message = null, string $propertyPath = null): bool + public static function notEmpty($value, $message = null, ?string $propertyPath = null): bool { if (empty($value)) { $message = \sprintf( @@ -658,7 +658,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function noContent($value, $message = null, string $propertyPath = null): bool + public static function noContent($value, $message = null, ?string $propertyPath = null): bool { if (!empty($value)) { $message = \sprintf( @@ -683,7 +683,7 @@ class Assertion * * @return bool */ - public static function null($value, $message = null, string $propertyPath = null): bool + public static function null($value, $message = null, ?string $propertyPath = null): bool { if (null !== $value) { $message = \sprintf( @@ -710,7 +710,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function notNull($value, $message = null, string $propertyPath = null): bool + public static function notNull($value, $message = null, ?string $propertyPath = null): bool { if (null === $value) { $message = \sprintf( @@ -737,7 +737,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function string($value, $message = null, string $propertyPath = null) + public static function string($value, $message = null, ?string $propertyPath = null) { if (!\is_string($value)) { $message = \sprintf( @@ -766,7 +766,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function regex($value, $pattern, $message = null, string $propertyPath = null): bool + public static function regex($value, $pattern, $message = null, ?string $propertyPath = null): bool { static::string($value, $message, $propertyPath); @@ -794,7 +794,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function notRegex($value, $pattern, $message = null, string $propertyPath = null): bool + public static function notRegex($value, $pattern, $message = null, ?string $propertyPath = null): bool { static::string($value, $message, $propertyPath); @@ -825,7 +825,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function length($value, $length, $message = null, string $propertyPath = null, $encoding = 'utf8'): bool + public static function length($value, $length, $message = null, ?string $propertyPath = null, $encoding = 'utf8'): bool { static::string($value, $message, $propertyPath); @@ -858,7 +858,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function minLength($value, $minLength, $message = null, string $propertyPath = null, $encoding = 'utf8'): bool + public static function minLength($value, $minLength, $message = null, ?string $propertyPath = null, $encoding = 'utf8'): bool { static::string($value, $message, $propertyPath); @@ -891,7 +891,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function maxLength($value, $maxLength, $message = null, string $propertyPath = null, $encoding = 'utf8'): bool + public static function maxLength($value, $maxLength, $message = null, ?string $propertyPath = null, $encoding = 'utf8'): bool { static::string($value, $message, $propertyPath); @@ -925,7 +925,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function betweenLength($value, $minLength, $maxLength, $message = null, string $propertyPath = null, $encoding = 'utf8'): bool + public static function betweenLength($value, $minLength, $maxLength, $message = null, ?string $propertyPath = null, $encoding = 'utf8'): bool { static::string($value, $message, $propertyPath); static::minLength($value, $minLength, $message, $propertyPath, $encoding); @@ -949,7 +949,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function startsWith($string, $needle, $message = null, string $propertyPath = null, $encoding = 'utf8'): bool + public static function startsWith($string, $needle, $message = null, ?string $propertyPath = null, $encoding = 'utf8'): bool { static::string($string, $message, $propertyPath); @@ -981,7 +981,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function endsWith($string, $needle, $message = null, string $propertyPath = null, $encoding = 'utf8'): bool + public static function endsWith($string, $needle, $message = null, ?string $propertyPath = null, $encoding = 'utf8'): bool { static::string($string, $message, $propertyPath); @@ -1015,7 +1015,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function contains($string, $needle, $message = null, string $propertyPath = null, $encoding = 'utf8'): bool + public static function contains($string, $needle, $message = null, ?string $propertyPath = null, $encoding = 'utf8'): bool { static::string($string, $message, $propertyPath); @@ -1047,7 +1047,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function notContains($string, $needle, $message = null, string $propertyPath = null, $encoding = 'utf8'): bool + public static function notContains($string, $needle, $message = null, ?string $propertyPath = null, $encoding = 'utf8'): bool { static::string($string, $message, $propertyPath); @@ -1072,7 +1072,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function choice($value, array $choices, $message = null, string $propertyPath = null): bool + public static function choice($value, array $choices, $message = null, ?string $propertyPath = null): bool { if (!\in_array($value, $choices, true)) { $message = \sprintf( @@ -1097,7 +1097,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function inArray($value, array $choices, $message = null, string $propertyPath = null): bool + public static function inArray($value, array $choices, $message = null, ?string $propertyPath = null): bool { return static::choice($value, $choices, $message, $propertyPath); } @@ -1115,7 +1115,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function numeric($value, $message = null, string $propertyPath = null): bool + public static function numeric($value, $message = null, ?string $propertyPath = null): bool { if (!\is_numeric($value)) { $message = \sprintf( @@ -1140,7 +1140,7 @@ class Assertion * * @return bool */ - public static function isResource($value, $message = null, string $propertyPath = null): bool + public static function isResource($value, $message = null, ?string $propertyPath = null): bool { if (!\is_resource($value)) { $message = \sprintf( @@ -1167,7 +1167,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function isArray($value, $message = null, string $propertyPath = null): bool + public static function isArray($value, $message = null, ?string $propertyPath = null): bool { if (!\is_array($value)) { $message = \sprintf( @@ -1194,7 +1194,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function isTraversable($value, $message = null, string $propertyPath = null): bool + public static function isTraversable($value, $message = null, ?string $propertyPath = null): bool { if (!\is_array($value) && !$value instanceof Traversable) { $message = \sprintf( @@ -1216,7 +1216,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function isArrayAccessible($value, $message = null, string $propertyPath = null): bool + public static function isArrayAccessible($value, $message = null, ?string $propertyPath = null): bool { if (!\is_array($value) && !$value instanceof ArrayAccess) { $message = \sprintf( @@ -1233,7 +1233,7 @@ class Assertion /** * Assert that value is countable. * - * @param array|Countable|ResourceBundle|SimpleXMLElement $value + * @param mixed $value * @param string|callable|null $message * @param string|null $propertyPath * @@ -1243,7 +1243,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function isCountable($value, $message = null, string $propertyPath = null): bool + public static function isCountable($value, $message = null, ?string $propertyPath = null): bool { if (\function_exists('is_countable')) { $assert = \is_countable($value); @@ -1272,7 +1272,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function keyExists($value, $key, $message = null, string $propertyPath = null): bool + public static function keyExists($value, $key, $message = null, ?string $propertyPath = null): bool { static::isArray($value, $message, $propertyPath); @@ -1297,7 +1297,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function keyNotExists($value, $key, $message = null, string $propertyPath = null): bool + public static function keyNotExists($value, $key, $message = null, ?string $propertyPath = null): bool { static::isArray($value, $message, $propertyPath); @@ -1321,7 +1321,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function uniqueValues(array $values, $message = null, string $propertyPath = null): bool + public static function uniqueValues(array $values, $message = null, ?string $propertyPath = null): bool { foreach ($values as $key => $value) { if (\array_search($value, $values, true) !== $key) { @@ -1346,7 +1346,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function keyIsset($value, $key, $message = null, string $propertyPath = null): bool + public static function keyIsset($value, $key, $message = null, ?string $propertyPath = null): bool { static::isArrayAccessible($value, $message, $propertyPath); @@ -1371,7 +1371,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function notEmptyKey($value, $key, $message = null, string $propertyPath = null): bool + public static function notEmptyKey($value, $key, $message = null, ?string $propertyPath = null): bool { static::keyIsset($value, $key, $message, $propertyPath); static::notEmpty($value[$key], $message, $propertyPath); @@ -1387,7 +1387,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function notBlank($value, $message = null, string $propertyPath = null): bool + public static function notBlank($value, $message = null, ?string $propertyPath = null): bool { if (false === $value || (empty($value) && '0' != $value) || (\is_string($value) && '' === \trim($value))) { $message = \sprintf( @@ -1417,7 +1417,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function isInstanceOf($value, $className, $message = null, string $propertyPath = null): bool + public static function isInstanceOf($value, $className, $message = null, ?string $propertyPath = null): bool { if (!($value instanceof $className)) { $message = \sprintf( @@ -1448,7 +1448,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function notIsInstanceOf($value, $className, $message = null, string $propertyPath = null): bool + public static function notIsInstanceOf($value, $className, $message = null, ?string $propertyPath = null): bool { if ($value instanceof $className) { $message = \sprintf( @@ -1472,7 +1472,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function subclassOf($value, $className, $message = null, string $propertyPath = null): bool + public static function subclassOf($value, $className, $message = null, ?string $propertyPath = null): bool { if (!\is_subclass_of($value, $className)) { $message = \sprintf( @@ -1502,7 +1502,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function range($value, $minValue, $maxValue, $message = null, string $propertyPath = null): bool + public static function range($value, $minValue, $maxValue, $message = null, ?string $propertyPath = null): bool { static::numeric($value, $message, $propertyPath); @@ -1534,7 +1534,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function min($value, $minValue, $message = null, string $propertyPath = null): bool + public static function min($value, $minValue, $message = null, ?string $propertyPath = null): bool { static::numeric($value, $message, $propertyPath); @@ -1565,7 +1565,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function max($value, $maxValue, $message = null, string $propertyPath = null): bool + public static function max($value, $maxValue, $message = null, ?string $propertyPath = null): bool { static::numeric($value, $message, $propertyPath); @@ -1590,7 +1590,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function file($value, $message = null, string $propertyPath = null): bool + public static function file($value, $message = null, ?string $propertyPath = null): bool { static::string($value, $message, $propertyPath); static::notEmpty($value, $message, $propertyPath); @@ -1615,7 +1615,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function directory($value, $message = null, string $propertyPath = null): bool + public static function directory($value, $message = null, ?string $propertyPath = null): bool { static::string($value, $message, $propertyPath); @@ -1639,7 +1639,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function readable($value, $message = null, string $propertyPath = null): bool + public static function readable($value, $message = null, ?string $propertyPath = null): bool { static::string($value, $message, $propertyPath); @@ -1663,7 +1663,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function writeable($value, $message = null, string $propertyPath = null): bool + public static function writeable($value, $message = null, ?string $propertyPath = null): bool { static::string($value, $message, $propertyPath); @@ -1692,7 +1692,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function email($value, $message = null, string $propertyPath = null): bool + public static function email($value, $message = null, ?string $propertyPath = null): bool { static::string($value, $message, $propertyPath); @@ -1726,7 +1726,7 @@ class Assertion * @see https://github.com/symfony/Validator/blob/master/Constraints/UrlValidator.php * @see https://github.com/symfony/Validator/blob/master/Constraints/Url.php */ - public static function url($value, $message = null, string $propertyPath = null): bool + public static function url($value, $message = null, ?string $propertyPath = null): bool { static::string($value, $message, $propertyPath); @@ -1772,7 +1772,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function alnum($value, $message = null, string $propertyPath = null): bool + public static function alnum($value, $message = null, ?string $propertyPath = null): bool { try { static::regex($value, '(^([a-zA-Z]{1}[a-zA-Z0-9]*)$)', $message, $propertyPath); @@ -1801,7 +1801,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function true($value, $message = null, string $propertyPath = null): bool + public static function true($value, $message = null, ?string $propertyPath = null): bool { if (true !== $value) { $message = \sprintf( @@ -1828,7 +1828,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function false($value, $message = null, string $propertyPath = null): bool + public static function false($value, $message = null, ?string $propertyPath = null): bool { if (false !== $value) { $message = \sprintf( @@ -1855,7 +1855,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function classExists($value, $message = null, string $propertyPath = null): bool + public static function classExists($value, $message = null, ?string $propertyPath = null): bool { if (!\class_exists($value)) { $message = \sprintf( @@ -1882,7 +1882,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function interfaceExists($value, $message = null, string $propertyPath = null): bool + public static function interfaceExists($value, $message = null, ?string $propertyPath = null): bool { if (!\interface_exists($value)) { $message = \sprintf( @@ -1905,7 +1905,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function implementsInterface($class, $interfaceName, $message = null, string $propertyPath = null): bool + public static function implementsInterface($class, $interfaceName, $message = null, ?string $propertyPath = null): bool { try { $reflection = new ReflectionClass($class); @@ -1948,7 +1948,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function isJsonString($value, $message = null, string $propertyPath = null): bool + public static function isJsonString($value, $message = null, ?string $propertyPath = null): bool { if (null === \json_decode($value) && JSON_ERROR_NONE !== \json_last_error()) { $message = \sprintf( @@ -1972,7 +1972,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function uuid($value, $message = null, string $propertyPath = null): bool + public static function uuid($value, $message = null, ?string $propertyPath = null): bool { $value = \str_replace(['urn:', 'uuid:', '{', '}'], '', $value); @@ -2002,7 +2002,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function e164($value, $message = null, string $propertyPath = null): bool + public static function e164($value, $message = null, ?string $propertyPath = null): bool { if (!\preg_match('/^\+?[1-9]\d{1,14}$/', $value)) { $message = \sprintf( @@ -2028,7 +2028,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function count($countable, $count, $message = null, string $propertyPath = null): bool + public static function count($countable, $count, $message = null, ?string $propertyPath = null): bool { if ($count !== \count($countable)) { $message = \sprintf( @@ -2052,7 +2052,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function minCount($countable, $count, $message = null, string $propertyPath = null): bool + public static function minCount($countable, $count, $message = null, ?string $propertyPath = null): bool { if ($count > \count($countable)) { $message = \sprintf( @@ -2076,7 +2076,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function maxCount($countable, $count, $message = null, string $propertyPath = null): bool + public static function maxCount($countable, $count, $message = null, ?string $propertyPath = null): bool { if ($count < \count($countable)) { $message = \sprintf( @@ -2147,7 +2147,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function choicesNotEmpty(array $values, array $choices, $message = null, string $propertyPath = null): bool + public static function choicesNotEmpty(array $values, array $choices, $message = null, ?string $propertyPath = null): bool { static::notEmpty($values, $message, $propertyPath); @@ -2167,7 +2167,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function methodExists($value, $object, $message = null, string $propertyPath = null): bool + public static function methodExists($value, $object, $message = null, ?string $propertyPath = null): bool { static::isObject($object, $message, $propertyPath); @@ -2196,7 +2196,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function isObject($value, $message = null, string $propertyPath = null): bool + public static function isObject($value, $message = null, ?string $propertyPath = null): bool { if (!\is_object($value)) { $message = \sprintf( @@ -2219,7 +2219,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function lessThan($value, $limit, $message = null, string $propertyPath = null): bool + public static function lessThan($value, $limit, $message = null, ?string $propertyPath = null): bool { if ($value >= $limit) { $message = \sprintf( @@ -2243,7 +2243,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function lessOrEqualThan($value, $limit, $message = null, string $propertyPath = null): bool + public static function lessOrEqualThan($value, $limit, $message = null, ?string $propertyPath = null): bool { if ($value > $limit) { $message = \sprintf( @@ -2267,7 +2267,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function greaterThan($value, $limit, $message = null, string $propertyPath = null): bool + public static function greaterThan($value, $limit, $message = null, ?string $propertyPath = null): bool { if ($value <= $limit) { $message = \sprintf( @@ -2291,7 +2291,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function greaterOrEqualThan($value, $limit, $message = null, string $propertyPath = null): bool + public static function greaterOrEqualThan($value, $limit, $message = null, ?string $propertyPath = null): bool { if ($value < $limit) { $message = \sprintf( @@ -2317,7 +2317,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function between($value, $lowerLimit, $upperLimit, $message = null, string $propertyPath = null): bool + public static function between($value, $lowerLimit, $upperLimit, $message = null, ?string $propertyPath = null): bool { if ($lowerLimit > $value || $value > $upperLimit) { $message = \sprintf( @@ -2344,7 +2344,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function betweenExclusive($value, $lowerLimit, $upperLimit, $message = null, string $propertyPath = null): bool + public static function betweenExclusive($value, $lowerLimit, $upperLimit, $message = null, ?string $propertyPath = null): bool { if ($lowerLimit >= $value || $value >= $upperLimit) { $message = \sprintf( @@ -2368,7 +2368,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function extensionLoaded($value, $message = null, string $propertyPath = null): bool + public static function extensionLoaded($value, $message = null, ?string $propertyPath = null): bool { if (!\extension_loaded($value)) { $message = \sprintf( @@ -2394,7 +2394,7 @@ class Assertion * * @see http://php.net/manual/function.date.php#refsect1-function.date-parameters */ - public static function date($value, $format, $message = null, string $propertyPath = null): bool + public static function date($value, $format, $message = null, ?string $propertyPath = null): bool { static::string($value, $message, $propertyPath); static::string($format, $message, $propertyPath); @@ -2422,7 +2422,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function objectOrClass($value, $message = null, string $propertyPath = null): bool + public static function objectOrClass($value, $message = null, ?string $propertyPath = null): bool { if (!\is_object($value)) { static::classExists($value, $message, $propertyPath); @@ -2440,7 +2440,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function propertyExists($value, $property, $message = null, string $propertyPath = null): bool + public static function propertyExists($value, $property, $message = null, ?string $propertyPath = null): bool { static::objectOrClass($value); @@ -2465,7 +2465,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function propertiesExist($value, array $properties, $message = null, string $propertyPath = null): bool + public static function propertiesExist($value, array $properties, $message = null, ?string $propertyPath = null): bool { static::objectOrClass($value); static::allString($properties, $message, $propertyPath); @@ -2500,7 +2500,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function version($version1, $operator, $version2, $message = null, string $propertyPath = null): bool + public static function version($version1, $operator, $version2, $message = null, ?string $propertyPath = null): bool { static::notEmpty($operator, 'versionCompare operator is required and cannot be empty.'); @@ -2527,7 +2527,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function phpVersion($operator, $version, $message = null, string $propertyPath = null): bool + public static function phpVersion($operator, $version, $message = null, ?string $propertyPath = null): bool { static::defined('PHP_VERSION'); @@ -2544,7 +2544,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function extensionVersion($extension, $operator, $version, $message = null, string $propertyPath = null): bool + public static function extensionVersion($extension, $operator, $version, $message = null, ?string $propertyPath = null): bool { static::extensionLoaded($extension, $message, $propertyPath); @@ -2564,7 +2564,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function isCallable($value, $message = null, string $propertyPath = null): bool + public static function isCallable($value, $message = null, ?string $propertyPath = null): bool { if (!\is_callable($value)) { $message = \sprintf( @@ -2589,7 +2589,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function satisfy($value, $callback, $message = null, string $propertyPath = null): bool + public static function satisfy($value, $callback, $message = null, ?string $propertyPath = null): bool { static::isCallable($callback); @@ -2617,7 +2617,7 @@ class Assertion * * @see http://php.net/manual/filter.filters.flags.php */ - public static function ip($value, $flag = null, $message = null, string $propertyPath = null): bool + public static function ip($value, $flag = null, $message = null, ?string $propertyPath = null): bool { static::string($value, $message, $propertyPath); if ($flag === null) { @@ -2648,7 +2648,7 @@ class Assertion * * @see http://php.net/manual/filter.filters.flags.php */ - public static function ipv4($value, $flag = null, $message = null, string $propertyPath = null): bool + public static function ipv4($value, $flag = null, $message = null, ?string $propertyPath = null): bool { static::ip($value, $flag | FILTER_FLAG_IPV4, static::generateMessage($message ?: 'Value "%s" was expected to be a valid IPv4 address.'), $propertyPath); @@ -2667,7 +2667,7 @@ class Assertion * * @see http://php.net/manual/filter.filters.flags.php */ - public static function ipv6($value, $flag = null, $message = null, string $propertyPath = null): bool + public static function ipv6($value, $flag = null, $message = null, ?string $propertyPath = null): bool { static::ip($value, $flag | FILTER_FLAG_IPV6, static::generateMessage($message ?: 'Value "%s" was expected to be a valid IPv6 address.'), $propertyPath); @@ -2680,7 +2680,7 @@ class Assertion * @param mixed $constant * @param string|callable|null $message */ - public static function defined($constant, $message = null, string $propertyPath = null): bool + public static function defined($constant, $message = null, ?string $propertyPath = null): bool { if (!\defined($constant)) { $message = \sprintf(static::generateMessage($message ?: 'Value "%s" expected to be a defined constant.'), $constant); @@ -2699,7 +2699,7 @@ class Assertion * * @throws AssertionFailedException */ - public static function base64($value, $message = null, string $propertyPath = null): bool + public static function base64($value, $message = null, ?string $propertyPath = null): bool { if (false === \base64_decode($value, true)) { $message = \sprintf(static::generateMessage($message ?: 'Value "%s" is not a valid base64 string.'), $value); diff --git a/lam/lib/3rdParty/composer/beberlei/assert/lib/Assert/AssertionChain.php b/lam/lib/3rdParty/composer/beberlei/assert/lib/Assert/AssertionChain.php index 4c444350f..8d1f1b3c1 100644 --- a/lam/lib/3rdParty/composer/beberlei/assert/lib/Assert/AssertionChain.php +++ b/lam/lib/3rdParty/composer/beberlei/assert/lib/Assert/AssertionChain.php @@ -151,7 +151,7 @@ class AssertionChain * @param mixed $value * @param string|callable|null $defaultMessage */ - public function __construct($value, $defaultMessage = null, string $defaultPropertyPath = null) + public function __construct($value, $defaultMessage = null, ?string $defaultPropertyPath = null) { $this->value = $value; $this->defaultMessage = $defaultMessage; diff --git a/lam/lib/3rdParty/composer/beberlei/assert/lib/Assert/InvalidArgumentException.php b/lam/lib/3rdParty/composer/beberlei/assert/lib/Assert/InvalidArgumentException.php index 9516e0774..54f85aad2 100644 --- a/lam/lib/3rdParty/composer/beberlei/assert/lib/Assert/InvalidArgumentException.php +++ b/lam/lib/3rdParty/composer/beberlei/assert/lib/Assert/InvalidArgumentException.php @@ -31,7 +31,7 @@ class InvalidArgumentException extends \InvalidArgumentException implements Asse */ private $constraints; - public function __construct($message, $code, string $propertyPath = null, $value = null, array $constraints = []) + public function __construct($message, $code, ?string $propertyPath = null, $value = null, array $constraints = []) { parent::__construct($message, $code); diff --git a/lam/lib/3rdParty/composer/beberlei/assert/lib/Assert/LazyAssertion.php b/lam/lib/3rdParty/composer/beberlei/assert/lib/Assert/LazyAssertion.php index b3052178b..f7b6cd719 100644 --- a/lam/lib/3rdParty/composer/beberlei/assert/lib/Assert/LazyAssertion.php +++ b/lam/lib/3rdParty/composer/beberlei/assert/lib/Assert/LazyAssertion.php @@ -133,7 +133,7 @@ class LazyAssertion * * @return static */ - public function that($value, string $propertyPath = null, $defaultMessage = null) + public function that($value, ?string $propertyPath = null, $defaultMessage = null) { $this->currentChainFailed = false; $this->thisChainTryAll = false; diff --git a/lam/lib/3rdParty/composer/beberlei/assert/lib/Assert/functions.php b/lam/lib/3rdParty/composer/beberlei/assert/lib/Assert/functions.php index 1a4e84d92..77cdcedda 100644 --- a/lam/lib/3rdParty/composer/beberlei/assert/lib/Assert/functions.php +++ b/lam/lib/3rdParty/composer/beberlei/assert/lib/Assert/functions.php @@ -32,7 +32,7 @@ namespace Assert; * The assertion chain can be stateful, that means be careful when you reuse * it. You should never pass around the chain. */ -function that($value, $defaultMessage = null, string $defaultPropertyPath = null): AssertionChain +function that($value, $defaultMessage = null, ?string $defaultPropertyPath = null): AssertionChain { return Assert::that($value, $defaultMessage, $defaultPropertyPath); } @@ -44,7 +44,7 @@ function that($value, $defaultMessage = null, string $defaultPropertyPath = null * @param string|callable|null $defaultMessage * @param string $defaultPropertyPath */ -function thatAll($values, $defaultMessage = null, string $defaultPropertyPath = null): AssertionChain +function thatAll($values, $defaultMessage = null, ?string $defaultPropertyPath = null): AssertionChain { return Assert::thatAll($values, $defaultMessage, $defaultPropertyPath); } @@ -58,7 +58,7 @@ function thatAll($values, $defaultMessage = null, string $defaultPropertyPath = * * @deprecated In favour of Assert::thatNullOr($value, $defaultMessage = null, $defaultPropertyPath = null) */ -function thatNullOr($value, $defaultMessage = null, string $defaultPropertyPath = null): AssertionChain +function thatNullOr($value, $defaultMessage = null, ?string $defaultPropertyPath = null): AssertionChain { return Assert::thatNullOr($value, $defaultMessage, $defaultPropertyPath); } diff --git a/lam/lib/3rdParty/composer/composer/installed.json b/lam/lib/3rdParty/composer/composer/installed.json index 75e4c1e30..d5e40c264 100644 --- a/lam/lib/3rdParty/composer/composer/installed.json +++ b/lam/lib/3rdParty/composer/composer/installed.json @@ -2,17 +2,17 @@ "packages": [ { "name": "beberlei/assert", - "version": "v3.3.2", - "version_normalized": "3.3.2.0", + "version": "v3.3.3", + "version_normalized": "3.3.3.0", "source": { "type": "git", "url": "https://github.com/beberlei/assert.git", - "reference": "cb70015c04be1baee6f5f5c953703347c0ac1655" + "reference": "b5fd8eacd8915a1b627b8bfc027803f1939734dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/beberlei/assert/zipball/cb70015c04be1baee6f5f5c953703347c0ac1655", - "reference": "cb70015c04be1baee6f5f5c953703347c0ac1655", + "url": "https://api.github.com/repos/beberlei/assert/zipball/b5fd8eacd8915a1b627b8bfc027803f1939734dd", + "reference": "b5fd8eacd8915a1b627b8bfc027803f1939734dd", "shasum": "" }, "require": { @@ -20,7 +20,7 @@ "ext-json": "*", "ext-mbstring": "*", "ext-simplexml": "*", - "php": "^7.0 || ^8.0" + "php": "^7.1 || ^8.0" }, "require-dev": { "friendsofphp/php-cs-fixer": "*", @@ -31,16 +31,16 @@ "suggest": { "ext-intl": "Needed to allow Assertion::count(), Assertion::isCountable(), Assertion::minCount(), and Assertion::maxCount() to operate on ResourceBundles" }, - "time": "2021-12-16T21:41:27+00:00", + "time": "2024-07-15T13:18:35+00:00", "type": "library", "installation-source": "dist", "autoload": { - "psr-4": { - "Assert\\": "lib/Assert" - }, "files": [ "lib/Assert/functions.php" - ] + ], + "psr-4": { + "Assert\\": "lib/Assert" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -64,6 +64,10 @@ "assertion", "validation" ], + "support": { + "issues": "https://github.com/beberlei/assert/issues", + "source": "https://github.com/beberlei/assert/tree/v3.3.3" + }, "install-path": "../beberlei/assert" }, { @@ -684,17 +688,17 @@ }, { "name": "firebase/php-jwt", - "version": "v6.10.1", - "version_normalized": "6.10.1.0", + "version": "v6.10.2", + "version_normalized": "6.10.2.0", "source": { "type": "git", "url": "https://github.com/firebase/php-jwt.git", - "reference": "500501c2ce893c824c801da135d02661199f60c5" + "reference": "30c19ed0f3264cb660ea496895cfb6ef7ee3653b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/firebase/php-jwt/zipball/500501c2ce893c824c801da135d02661199f60c5", - "reference": "500501c2ce893c824c801da135d02661199f60c5", + "url": "https://api.github.com/repos/firebase/php-jwt/zipball/30c19ed0f3264cb660ea496895cfb6ef7ee3653b", + "reference": "30c19ed0f3264cb660ea496895cfb6ef7ee3653b", "shasum": "" }, "require": { @@ -712,7 +716,7 @@ "ext-sodium": "Support EdDSA (Ed25519) signatures", "paragonie/sodium_compat": "Support EdDSA (Ed25519) signatures when libsodium is not present" }, - "time": "2024-05-18T18:05:11+00:00", + "time": "2024-11-24T11:22:49+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -744,7 +748,7 @@ ], "support": { "issues": "https://github.com/firebase/php-jwt/issues", - "source": "https://github.com/firebase/php-jwt/tree/v6.10.1" + "source": "https://github.com/firebase/php-jwt/tree/v6.10.2" }, "install-path": "../firebase/php-jwt" }, @@ -930,17 +934,17 @@ }, { "name": "illuminate/collections", - "version": "v10.48.20", - "version_normalized": "10.48.20.0", + "version": "v10.48.25", + "version_normalized": "10.48.25.0", "source": { "type": "git", "url": "https://github.com/illuminate/collections.git", - "reference": "37c863cffb345869dd134eff8e646bc82a19cc96" + "reference": "48de3d6bc6aa779112ddcb608a3a96fc975d89d8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/collections/zipball/37c863cffb345869dd134eff8e646bc82a19cc96", - "reference": "37c863cffb345869dd134eff8e646bc82a19cc96", + "url": "https://api.github.com/repos/illuminate/collections/zipball/48de3d6bc6aa779112ddcb608a3a96fc975d89d8", + "reference": "48de3d6bc6aa779112ddcb608a3a96fc975d89d8", "shasum": "" }, "require": { @@ -952,7 +956,7 @@ "suggest": { "symfony/var-dumper": "Required to use the dump method (^6.2)." }, - "time": "2024-06-19T14:25:05+00:00", + "time": "2024-11-21T14:02:44+00:00", "type": "library", "extra": { "branch-alias": { @@ -988,23 +992,23 @@ }, { "name": "illuminate/conditionable", - "version": "v10.48.20", - "version_normalized": "10.48.20.0", + "version": "v10.48.25", + "version_normalized": "10.48.25.0", "source": { "type": "git", "url": "https://github.com/illuminate/conditionable.git", - "reference": "d0958e4741fc9d6f516a552060fd1b829a85e009" + "reference": "3ee34ac306fafc2a6f19cd7cd68c9af389e432a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/conditionable/zipball/d0958e4741fc9d6f516a552060fd1b829a85e009", - "reference": "d0958e4741fc9d6f516a552060fd1b829a85e009", + "url": "https://api.github.com/repos/illuminate/conditionable/zipball/3ee34ac306fafc2a6f19cd7cd68c9af389e432a5", + "reference": "3ee34ac306fafc2a6f19cd7cd68c9af389e432a5", "shasum": "" }, "require": { "php": "^8.0.2" }, - "time": "2023-02-03T08:06:17+00:00", + "time": "2024-11-21T14:02:44+00:00", "type": "library", "extra": { "branch-alias": { @@ -1037,17 +1041,17 @@ }, { "name": "illuminate/contracts", - "version": "v10.48.20", - "version_normalized": "10.48.20.0", + "version": "v10.48.25", + "version_normalized": "10.48.25.0", "source": { "type": "git", "url": "https://github.com/illuminate/contracts.git", - "reference": "8d7152c4a1f5d9cf7da3e8b71f23e4556f6138ac" + "reference": "f90663a69f926105a70b78060a31f3c64e2d1c74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/contracts/zipball/8d7152c4a1f5d9cf7da3e8b71f23e4556f6138ac", - "reference": "8d7152c4a1f5d9cf7da3e8b71f23e4556f6138ac", + "url": "https://api.github.com/repos/illuminate/contracts/zipball/f90663a69f926105a70b78060a31f3c64e2d1c74", + "reference": "f90663a69f926105a70b78060a31f3c64e2d1c74", "shasum": "" }, "require": { @@ -1055,7 +1059,7 @@ "psr/container": "^1.1.1|^2.0.1", "psr/simple-cache": "^1.0|^2.0|^3.0" }, - "time": "2024-01-15T18:52:32+00:00", + "time": "2024-11-21T14:02:44+00:00", "type": "library", "extra": { "branch-alias": { @@ -1088,8 +1092,8 @@ }, { "name": "illuminate/macroable", - "version": "v10.48.20", - "version_normalized": "10.48.20.0", + "version": "v10.48.25", + "version_normalized": "10.48.25.0", "source": { "type": "git", "url": "https://github.com/illuminate/macroable.git", @@ -1137,8 +1141,8 @@ }, { "name": "illuminate/pagination", - "version": "v10.48.20", - "version_normalized": "10.48.20.0", + "version": "v10.48.25", + "version_normalized": "10.48.25.0", "source": { "type": "git", "url": "https://github.com/illuminate/pagination.git", @@ -1190,17 +1194,17 @@ }, { "name": "illuminate/support", - "version": "v10.48.20", - "version_normalized": "10.48.20.0", + "version": "v10.48.25", + "version_normalized": "10.48.25.0", "source": { "type": "git", "url": "https://github.com/illuminate/support.git", - "reference": "56c6d9895605b019e3debb9440454596ef99312a" + "reference": "64b258f80175c658aef9e22dd3f2ba18c99b243c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/support/zipball/56c6d9895605b019e3debb9440454596ef99312a", - "reference": "56c6d9895605b019e3debb9440454596ef99312a", + "url": "https://api.github.com/repos/illuminate/support/zipball/64b258f80175c658aef9e22dd3f2ba18c99b243c", + "reference": "64b258f80175c658aef9e22dd3f2ba18c99b243c", "shasum": "" }, "require": { @@ -1228,7 +1232,7 @@ "symfony/var-dumper": "Required to use the dd function (^6.2).", "vlucas/phpdotenv": "Required to use the Env class and env helper (^5.4.1)." }, - "time": "2024-05-20T13:31:33+00:00", + "time": "2024-11-21T14:02:44+00:00", "type": "library", "extra": { "branch-alias": { @@ -1264,17 +1268,17 @@ }, { "name": "monolog/monolog", - "version": "3.7.0", - "version_normalized": "3.7.0.0", + "version": "3.8.0", + "version_normalized": "3.8.0.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "f4393b648b78a5408747de94fca38beb5f7e9ef8" + "reference": "32e515fdc02cdafbe4593e30a9350d486b125b67" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/f4393b648b78a5408747de94fca38beb5f7e9ef8", - "reference": "f4393b648b78a5408747de94fca38beb5f7e9ef8", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/32e515fdc02cdafbe4593e30a9350d486b125b67", + "reference": "32e515fdc02cdafbe4593e30a9350d486b125b67", "shasum": "" }, "require": { @@ -1294,12 +1298,14 @@ "guzzlehttp/psr7": "^2.2", "mongodb/mongodb": "^1.8", "php-amqplib/php-amqplib": "~2.4 || ^3", - "phpstan/phpstan": "^1.9", - "phpstan/phpstan-deprecation-rules": "^1.0", - "phpstan/phpstan-strict-rules": "^1.4", - "phpunit/phpunit": "^10.5.17", + "php-console/php-console": "^3.1.8", + "phpstan/phpstan": "^2", + "phpstan/phpstan-deprecation-rules": "^2", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "^10.5.17 || ^11.0.7", "predis/predis": "^1.1 || ^2", - "ruflin/elastica": "^7", + "rollbar/rollbar": "^4.0", + "ruflin/elastica": "^7 || ^8", "symfony/mailer": "^5.4 || ^6", "symfony/mime": "^5.4 || ^6" }, @@ -1319,7 +1325,7 @@ "rollbar/rollbar": "Allow sending log messages to Rollbar", "ruflin/elastica": "Allow sending log messages to an Elastic Search server" }, - "time": "2024-06-28T09:40:51+00:00", + "time": "2024-11-12T13:57:08+00:00", "type": "library", "extra": { "branch-alias": { @@ -1352,7 +1358,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/3.7.0" + "source": "https://github.com/Seldaek/monolog/tree/3.8.0" }, "funding": [ { @@ -1605,17 +1611,17 @@ }, { "name": "php-http/discovery", - "version": "1.19.4", - "version_normalized": "1.19.4.0", + "version": "1.20.0", + "version_normalized": "1.20.0.0", "source": { "type": "git", "url": "https://github.com/php-http/discovery.git", - "reference": "0700efda8d7526335132360167315fdab3aeb599" + "reference": "82fe4c73ef3363caed49ff8dd1539ba06044910d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-http/discovery/zipball/0700efda8d7526335132360167315fdab3aeb599", - "reference": "0700efda8d7526335132360167315fdab3aeb599", + "url": "https://api.github.com/repos/php-http/discovery/zipball/82fe4c73ef3363caed49ff8dd1539ba06044910d", + "reference": "82fe4c73ef3363caed49ff8dd1539ba06044910d", "shasum": "" }, "require": { @@ -1642,7 +1648,7 @@ "sebastian/comparator": "^3.0.5 || ^4.0.8", "symfony/phpunit-bridge": "^6.4.4 || ^7.0.1" }, - "time": "2024-03-29T13:00:05+00:00", + "time": "2024-10-02T11:20:13+00:00", "type": "composer-plugin", "extra": { "class": "Http\\Discovery\\Composer\\Plugin", @@ -1681,23 +1687,23 @@ ], "support": { "issues": "https://github.com/php-http/discovery/issues", - "source": "https://github.com/php-http/discovery/tree/1.19.4" + "source": "https://github.com/php-http/discovery/tree/1.20.0" }, "install-path": "../php-http/discovery" }, { "name": "phpmailer/phpmailer", - "version": "v6.9.1", - "version_normalized": "6.9.1.0", + "version": "v6.9.3", + "version_normalized": "6.9.3.0", "source": { "type": "git", "url": "https://github.com/PHPMailer/PHPMailer.git", - "reference": "039de174cd9c17a8389754d3b877a2ed22743e18" + "reference": "2f5c94fe7493efc213f643c23b1b1c249d40f47e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/039de174cd9c17a8389754d3b877a2ed22743e18", - "reference": "039de174cd9c17a8389754d3b877a2ed22743e18", + "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/2f5c94fe7493efc213f643c23b1b1c249d40f47e", + "reference": "2f5c94fe7493efc213f643c23b1b1c249d40f47e", "shasum": "" }, "require": { @@ -1727,7 +1733,7 @@ "symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)", "thenetworg/oauth2-azure": "Needed for Microsoft XOAUTH2 authentication" }, - "time": "2023-11-25T22:23:28+00:00", + "time": "2024-11-24T18:04:13+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -1759,7 +1765,7 @@ "description": "PHPMailer is a full-featured email creation and transfer class for PHP", "support": { "issues": "https://github.com/PHPMailer/PHPMailer/issues", - "source": "https://github.com/PHPMailer/PHPMailer/tree/v6.9.1" + "source": "https://github.com/PHPMailer/PHPMailer/tree/v6.9.3" }, "funding": [ { @@ -1771,17 +1777,17 @@ }, { "name": "phpseclib/phpseclib", - "version": "3.0.41", - "version_normalized": "3.0.41.0", + "version": "3.0.42", + "version_normalized": "3.0.42.0", "source": { "type": "git", "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "621c73f7dcb310b61de34d1da4c4204e8ace6ceb" + "reference": "db92f1b1987b12b13f248fe76c3a52cadb67bb98" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/621c73f7dcb310b61de34d1da4c4204e8ace6ceb", - "reference": "621c73f7dcb310b61de34d1da4c4204e8ace6ceb", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/db92f1b1987b12b13f248fe76c3a52cadb67bb98", + "reference": "db92f1b1987b12b13f248fe76c3a52cadb67bb98", "shasum": "" }, "require": { @@ -1799,7 +1805,7 @@ "ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.", "ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations." }, - "time": "2024-08-12T00:13:54+00:00", + "time": "2024-09-16T03:06:04+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -1864,7 +1870,7 @@ ], "support": { "issues": "https://github.com/phpseclib/phpseclib/issues", - "source": "https://github.com/phpseclib/phpseclib/tree/3.0.41" + "source": "https://github.com/phpseclib/phpseclib/tree/3.0.42" }, "funding": [ { @@ -2279,23 +2285,23 @@ }, { "name": "psr/log", - "version": "3.0.1", - "version_normalized": "3.0.1.0", + "version": "3.0.2", + "version_normalized": "3.0.2.0", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "79dff0b268932c640297f5208d6298f71855c03e" + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/79dff0b268932c640297f5208d6298f71855c03e", - "reference": "79dff0b268932c640297f5208d6298f71855c03e", + "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", "shasum": "" }, "require": { "php": ">=8.0.0" }, - "time": "2024-08-21T13:31:24+00:00", + "time": "2024-09-11T13:17:53+00:00", "type": "library", "extra": { "branch-alias": { @@ -2326,7 +2332,7 @@ "psr-3" ], "support": { - "source": "https://github.com/php-fig/log/tree/3.0.1" + "source": "https://github.com/php-fig/log/tree/3.0.2" }, "install-path": "../psr/log" }, @@ -2566,23 +2572,23 @@ }, { "name": "symfony/deprecation-contracts", - "version": "v3.5.0", - "version_normalized": "3.5.0.0", + "version": "v3.5.1", + "version_normalized": "3.5.1.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1" + "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", - "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", + "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", "shasum": "" }, "require": { "php": ">=8.1" }, - "time": "2024-04-18T09:32:20+00:00", + "time": "2024-09-25T14:20:29+00:00", "type": "library", "extra": { "branch-alias": { @@ -2616,7 +2622,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.1" }, "funding": [ { @@ -2636,24 +2642,24 @@ }, { "name": "symfony/http-client", - "version": "v6.4.11", - "version_normalized": "6.4.11.0", + "version": "v6.4.16", + "version_normalized": "6.4.16.0", "source": { "type": "git", "url": "https://github.com/symfony/http-client.git", - "reference": "4c92046bb788648ff1098cc66da69aa7eac8cb65" + "reference": "60a113666fa67e598abace38e5f46a0954d8833d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/4c92046bb788648ff1098cc66da69aa7eac8cb65", - "reference": "4c92046bb788648ff1098cc66da69aa7eac8cb65", + "url": "https://api.github.com/repos/symfony/http-client/zipball/60a113666fa67e598abace38e5f46a0954d8833d", + "reference": "60a113666fa67e598abace38e5f46a0954d8833d", "shasum": "" }, "require": { "php": ">=8.1", "psr/log": "^1|^2|^3", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/http-client-contracts": "^3.4.1", + "symfony/http-client-contracts": "~3.4.3|^3.5.1", "symfony/service-contracts": "^2.5|^3" }, "conflict": { @@ -2681,7 +2687,7 @@ "symfony/process": "^5.4|^6.0|^7.0", "symfony/stopwatch": "^5.4|^6.0|^7.0" }, - "time": "2024-08-26T06:30:21+00:00", + "time": "2024-11-27T11:52:33+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -2712,7 +2718,7 @@ "http" ], "support": { - "source": "https://github.com/symfony/http-client/tree/v6.4.11" + "source": "https://github.com/symfony/http-client/tree/v6.4.16" }, "funding": [ { @@ -2732,23 +2738,23 @@ }, { "name": "symfony/http-client-contracts", - "version": "v3.5.0", - "version_normalized": "3.5.0.0", + "version": "v3.5.1", + "version_normalized": "3.5.1.0", "source": { "type": "git", "url": "https://github.com/symfony/http-client-contracts.git", - "reference": "20414d96f391677bf80078aa55baece78b82647d" + "reference": "c2f3ad828596624ca39ea40f83617ef51ca8bbf9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/20414d96f391677bf80078aa55baece78b82647d", - "reference": "20414d96f391677bf80078aa55baece78b82647d", + "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/c2f3ad828596624ca39ea40f83617ef51ca8bbf9", + "reference": "c2f3ad828596624ca39ea40f83617ef51ca8bbf9", "shasum": "" }, "require": { "php": ">=8.1" }, - "time": "2024-04-18T09:32:20+00:00", + "time": "2024-11-25T12:02:18+00:00", "type": "library", "extra": { "branch-alias": { @@ -2793,7 +2799,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/http-client-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/http-client-contracts/tree/v3.5.1" }, "funding": [ { @@ -2813,17 +2819,17 @@ }, { "name": "symfony/http-foundation", - "version": "v6.4.10", - "version_normalized": "6.4.10.0", + "version": "v6.4.16", + "version_normalized": "6.4.16.0", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "117f1f20a7ade7bcea28b861fb79160a21a1e37b" + "reference": "431771b7a6f662f1575b3cfc8fd7617aa9864d57" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/117f1f20a7ade7bcea28b861fb79160a21a1e37b", - "reference": "117f1f20a7ade7bcea28b861fb79160a21a1e37b", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/431771b7a6f662f1575b3cfc8fd7617aa9864d57", + "reference": "431771b7a6f662f1575b3cfc8fd7617aa9864d57", "shasum": "" }, "require": { @@ -2833,19 +2839,19 @@ "symfony/polyfill-php83": "^1.27" }, "conflict": { - "symfony/cache": "<6.3" + "symfony/cache": "<6.4.12|>=7.0,<7.1.5" }, "require-dev": { "doctrine/dbal": "^2.13.1|^3|^4", "predis/predis": "^1.1|^2.0", - "symfony/cache": "^6.3|^7.0", + "symfony/cache": "^6.4.12|^7.1.5", "symfony/dependency-injection": "^5.4|^6.0|^7.0", "symfony/expression-language": "^5.4|^6.0|^7.0", "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4|^7.0", "symfony/mime": "^5.4|^6.0|^7.0", "symfony/rate-limiter": "^5.4|^6.0|^7.0" }, - "time": "2024-07-26T12:36:27+00:00", + "time": "2024-11-13T18:58:10+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -2873,7 +2879,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v6.4.10" + "source": "https://github.com/symfony/http-foundation/tree/v6.4.16" }, "funding": [ { @@ -2893,21 +2899,21 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.30.0", - "version_normalized": "1.30.0.0", + "version": "v1.31.0", + "version_normalized": "1.31.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c" + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fd22ab50000ef01661e2a31d850ebaa297f8e03c", - "reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341", + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-mbstring": "*" @@ -2915,7 +2921,7 @@ "suggest": { "ext-mbstring": "For best performance" }, - "time": "2024-06-19T12:30:46+00:00", + "time": "2024-09-09T11:45:10+00:00", "type": "library", "extra": { "thanks": { @@ -2956,7 +2962,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.30.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0" }, "funding": [ { @@ -2976,23 +2982,23 @@ }, { "name": "symfony/polyfill-php80", - "version": "v1.30.0", - "version_normalized": "1.30.0.0", + "version": "v1.31.0", + "version_normalized": "1.31.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "77fa7995ac1b21ab60769b7323d600a991a90433" + "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/77fa7995ac1b21ab60769b7323d600a991a90433", - "reference": "77fa7995ac1b21ab60769b7323d600a991a90433", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", + "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, - "time": "2024-05-31T15:07:36+00:00", + "time": "2024-09-09T11:45:10+00:00", "type": "library", "extra": { "thanks": { @@ -3039,7 +3045,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.30.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0" }, "funding": [ { @@ -3059,23 +3065,23 @@ }, { "name": "symfony/polyfill-php83", - "version": "v1.30.0", - "version_normalized": "1.30.0.0", + "version": "v1.31.0", + "version_normalized": "1.31.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php83.git", - "reference": "dbdcdf1a4dcc2743591f1079d0c35ab1e2dcbbc9" + "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/dbdcdf1a4dcc2743591f1079d0c35ab1e2dcbbc9", - "reference": "dbdcdf1a4dcc2743591f1079d0c35ab1e2dcbbc9", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/2fb86d65e2d424369ad2905e83b236a8805ba491", + "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, - "time": "2024-06-19T12:35:24+00:00", + "time": "2024-09-09T11:45:10+00:00", "type": "library", "extra": { "thanks": { @@ -3118,7 +3124,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php83/tree/v1.30.0" + "source": "https://github.com/symfony/polyfill-php83/tree/v1.31.0" }, "funding": [ { @@ -3138,21 +3144,21 @@ }, { "name": "symfony/polyfill-uuid", - "version": "v1.30.0", - "version_normalized": "1.30.0.0", + "version": "v1.31.0", + "version_normalized": "1.31.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-uuid.git", - "reference": "2ba1f33797470debcda07fe9dce20a0003df18e9" + "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/2ba1f33797470debcda07fe9dce20a0003df18e9", - "reference": "2ba1f33797470debcda07fe9dce20a0003df18e9", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/21533be36c24be3f4b1669c4725c7d1d2bab4ae2", + "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-uuid": "*" @@ -3160,7 +3166,7 @@ "suggest": { "ext-uuid": "For best performance" }, - "time": "2024-05-31T15:07:36+00:00", + "time": "2024-09-09T11:45:10+00:00", "type": "library", "extra": { "thanks": { @@ -3200,7 +3206,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/polyfill-uuid/tree/v1.30.0" + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.31.0" }, "funding": [ { @@ -3220,17 +3226,17 @@ }, { "name": "symfony/psr-http-message-bridge", - "version": "v6.4.11", - "version_normalized": "6.4.11.0", + "version": "v6.4.13", + "version_normalized": "6.4.13.0", "source": { "type": "git", "url": "https://github.com/symfony/psr-http-message-bridge.git", - "reference": "74835ba54eca99a38f374f7a6d932fa510124773" + "reference": "c9cf83326a1074f83a738fc5320945abf7fb7fec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/74835ba54eca99a38f374f7a6d932fa510124773", - "reference": "74835ba54eca99a38f374f7a6d932fa510124773", + "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/c9cf83326a1074f83a738fc5320945abf7fb7fec", + "reference": "c9cf83326a1074f83a738fc5320945abf7fb7fec", "shasum": "" }, "require": { @@ -3252,7 +3258,7 @@ "symfony/framework-bundle": "^6.2|^7.0", "symfony/http-kernel": "^6.2|^7.0" }, - "time": "2024-08-14T13:55:58+00:00", + "time": "2024-09-25T14:18:03+00:00", "type": "symfony-bridge", "installation-source": "dist", "autoload": { @@ -3286,7 +3292,7 @@ "psr-7" ], "support": { - "source": "https://github.com/symfony/psr-http-message-bridge/tree/v6.4.11" + "source": "https://github.com/symfony/psr-http-message-bridge/tree/v6.4.13" }, "funding": [ { @@ -3306,17 +3312,17 @@ }, { "name": "symfony/service-contracts", - "version": "v3.5.0", - "version_normalized": "3.5.0.0", + "version": "v3.5.1", + "version_normalized": "3.5.1.0", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f" + "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", - "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/e53260aabf78fb3d63f8d79d69ece59f80d5eda0", + "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0", "shasum": "" }, "require": { @@ -3327,7 +3333,7 @@ "conflict": { "ext-psr": "<1.1|>=2" }, - "time": "2024-04-18T09:32:20+00:00", + "time": "2024-09-25T14:20:29+00:00", "type": "library", "extra": { "branch-alias": { @@ -3372,7 +3378,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/service-contracts/tree/v3.5.1" }, "funding": [ { @@ -3392,17 +3398,17 @@ }, { "name": "symfony/translation", - "version": "v6.4.10", - "version_normalized": "6.4.10.0", + "version": "v6.4.13", + "version_normalized": "6.4.13.0", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "94041203f8ac200ae9e7c6a18fa6137814ccecc9" + "reference": "bee9bfabfa8b4045a66bf82520e492cddbaffa66" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/94041203f8ac200ae9e7c6a18fa6137814ccecc9", - "reference": "94041203f8ac200ae9e7c6a18fa6137814ccecc9", + "url": "https://api.github.com/repos/symfony/translation/zipball/bee9bfabfa8b4045a66bf82520e492cddbaffa66", + "reference": "bee9bfabfa8b4045a66bf82520e492cddbaffa66", "shasum": "" }, "require": { @@ -3439,7 +3445,7 @@ "symfony/service-contracts": "^2.5|^3", "symfony/yaml": "^5.4|^6.0|^7.0" }, - "time": "2024-07-26T12:30:32+00:00", + "time": "2024-09-27T18:14:25+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -3470,7 +3476,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v6.4.10" + "source": "https://github.com/symfony/translation/tree/v6.4.13" }, "funding": [ { @@ -3490,23 +3496,23 @@ }, { "name": "symfony/translation-contracts", - "version": "v3.5.0", - "version_normalized": "3.5.0.0", + "version": "v3.5.1", + "version_normalized": "3.5.1.0", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a" + "reference": "4667ff3bd513750603a09c8dedbea942487fb07c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/b9d2189887bb6b2e0367a9fc7136c5239ab9b05a", - "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/4667ff3bd513750603a09c8dedbea942487fb07c", + "reference": "4667ff3bd513750603a09c8dedbea942487fb07c", "shasum": "" }, "require": { "php": ">=8.1" }, - "time": "2024-04-18T09:32:20+00:00", + "time": "2024-09-25T14:20:29+00:00", "type": "library", "extra": { "branch-alias": { @@ -3551,7 +3557,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/translation-contracts/tree/v3.5.1" }, "funding": [ { @@ -3571,17 +3577,17 @@ }, { "name": "symfony/uid", - "version": "v6.4.11", - "version_normalized": "6.4.11.0", + "version": "v6.4.13", + "version_normalized": "6.4.13.0", "source": { "type": "git", "url": "https://github.com/symfony/uid.git", - "reference": "6a0394ad707de386547223948fac1e0f2805bc0b" + "reference": "18eb207f0436a993fffbdd811b5b8fa35fa5e007" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/6a0394ad707de386547223948fac1e0f2805bc0b", - "reference": "6a0394ad707de386547223948fac1e0f2805bc0b", + "url": "https://api.github.com/repos/symfony/uid/zipball/18eb207f0436a993fffbdd811b5b8fa35fa5e007", + "reference": "18eb207f0436a993fffbdd811b5b8fa35fa5e007", "shasum": "" }, "require": { @@ -3591,7 +3597,7 @@ "require-dev": { "symfony/console": "^5.4|^6.0|^7.0" }, - "time": "2024-08-12T09:55:28+00:00", + "time": "2024-09-25T14:18:03+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -3628,7 +3634,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v6.4.11" + "source": "https://github.com/symfony/uid/tree/v6.4.13" }, "funding": [ { @@ -3790,17 +3796,17 @@ }, { "name": "voku/portable-ascii", - "version": "2.0.1", - "version_normalized": "2.0.1.0", + "version": "2.0.3", + "version_normalized": "2.0.3.0", "source": { "type": "git", "url": "https://github.com/voku/portable-ascii.git", - "reference": "b56450eed252f6801410d810c8e1727224ae0743" + "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b56450eed252f6801410d810c8e1727224ae0743", - "reference": "b56450eed252f6801410d810c8e1727224ae0743", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b1d923f88091c6bf09699efcd7c8a1b1bfd7351d", + "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d", "shasum": "" }, "require": { @@ -3812,7 +3818,7 @@ "suggest": { "ext-intl": "Use Intl for transliterator_transliterate() support" }, - "time": "2022-03-08T17:03:00+00:00", + "time": "2024-11-21T01:49:47+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -3827,7 +3833,7 @@ "authors": [ { "name": "Lars Moelleken", - "homepage": "http://www.moelleken.org/" + "homepage": "https://www.moelleken.org/" } ], "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", @@ -3839,7 +3845,7 @@ ], "support": { "issues": "https://github.com/voku/portable-ascii/issues", - "source": "https://github.com/voku/portable-ascii/tree/2.0.1" + "source": "https://github.com/voku/portable-ascii/tree/2.0.3" }, "funding": [ { diff --git a/lam/lib/3rdParty/composer/composer/installed.php b/lam/lib/3rdParty/composer/composer/installed.php index 734b195bb..ddc6b862c 100644 --- a/lam/lib/3rdParty/composer/composer/installed.php +++ b/lam/lib/3rdParty/composer/composer/installed.php @@ -1,8 +1,8 @@ array( 'name' => 'ldap-account-manager/ldap-account-manager', - 'pretty_version' => '8.8', - 'version' => '8.8.0.0', + 'pretty_version' => '9.0', + 'version' => '9.0.0.0', 'reference' => null, 'type' => 'library', 'install_path' => __DIR__ . '/../../../../', @@ -11,9 +11,9 @@ ), 'versions' => array( 'beberlei/assert' => array( - 'pretty_version' => 'v3.3.2', - 'version' => '3.3.2.0', - 'reference' => 'cb70015c04be1baee6f5f5c953703347c0ac1655', + 'pretty_version' => 'v3.3.3', + 'version' => '3.3.3.0', + 'reference' => 'b5fd8eacd8915a1b627b8bfc027803f1939734dd', 'type' => 'library', 'install_path' => __DIR__ . '/../beberlei/assert', 'aliases' => array(), @@ -92,9 +92,9 @@ 'dev_requirement' => false, ), 'firebase/php-jwt' => array( - 'pretty_version' => 'v6.10.1', - 'version' => '6.10.1.0', - 'reference' => '500501c2ce893c824c801da135d02661199f60c5', + 'pretty_version' => 'v6.10.2', + 'version' => '6.10.2.0', + 'reference' => '30c19ed0f3264cb660ea496895cfb6ef7ee3653b', 'type' => 'library', 'install_path' => __DIR__ . '/../firebase/php-jwt', 'aliases' => array(), @@ -119,35 +119,35 @@ 'dev_requirement' => false, ), 'illuminate/collections' => array( - 'pretty_version' => 'v10.48.20', - 'version' => '10.48.20.0', - 'reference' => '37c863cffb345869dd134eff8e646bc82a19cc96', + 'pretty_version' => 'v10.48.25', + 'version' => '10.48.25.0', + 'reference' => '48de3d6bc6aa779112ddcb608a3a96fc975d89d8', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/collections', 'aliases' => array(), 'dev_requirement' => false, ), 'illuminate/conditionable' => array( - 'pretty_version' => 'v10.48.20', - 'version' => '10.48.20.0', - 'reference' => 'd0958e4741fc9d6f516a552060fd1b829a85e009', + 'pretty_version' => 'v10.48.25', + 'version' => '10.48.25.0', + 'reference' => '3ee34ac306fafc2a6f19cd7cd68c9af389e432a5', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/conditionable', 'aliases' => array(), 'dev_requirement' => false, ), 'illuminate/contracts' => array( - 'pretty_version' => 'v10.48.20', - 'version' => '10.48.20.0', - 'reference' => '8d7152c4a1f5d9cf7da3e8b71f23e4556f6138ac', + 'pretty_version' => 'v10.48.25', + 'version' => '10.48.25.0', + 'reference' => 'f90663a69f926105a70b78060a31f3c64e2d1c74', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/contracts', 'aliases' => array(), 'dev_requirement' => false, ), 'illuminate/macroable' => array( - 'pretty_version' => 'v10.48.20', - 'version' => '10.48.20.0', + 'pretty_version' => 'v10.48.25', + 'version' => '10.48.25.0', 'reference' => 'dff667a46ac37b634dcf68909d9d41e94dc97c27', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/macroable', @@ -155,8 +155,8 @@ 'dev_requirement' => false, ), 'illuminate/pagination' => array( - 'pretty_version' => 'v10.48.20', - 'version' => '10.48.20.0', + 'pretty_version' => 'v10.48.25', + 'version' => '10.48.25.0', 'reference' => '616874b9607ff35925347e1710a8b5151858cdf2', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/pagination', @@ -164,17 +164,17 @@ 'dev_requirement' => false, ), 'illuminate/support' => array( - 'pretty_version' => 'v10.48.20', - 'version' => '10.48.20.0', - 'reference' => '56c6d9895605b019e3debb9440454596ef99312a', + 'pretty_version' => 'v10.48.25', + 'version' => '10.48.25.0', + 'reference' => '64b258f80175c658aef9e22dd3f2ba18c99b243c', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/support', 'aliases' => array(), 'dev_requirement' => false, ), 'ldap-account-manager/ldap-account-manager' => array( - 'pretty_version' => '8.8', - 'version' => '8.8.0.0', + 'pretty_version' => '9.0', + 'version' => '9.0.0.0', 'reference' => null, 'type' => 'library', 'install_path' => __DIR__ . '/../../../../', @@ -182,9 +182,9 @@ 'dev_requirement' => false, ), 'monolog/monolog' => array( - 'pretty_version' => '3.7.0', - 'version' => '3.7.0.0', - 'reference' => 'f4393b648b78a5408747de94fca38beb5f7e9ef8', + 'pretty_version' => '3.8.0', + 'version' => '3.8.0.0', + 'reference' => '32e515fdc02cdafbe4593e30a9350d486b125b67', 'type' => 'library', 'install_path' => __DIR__ . '/../monolog/monolog', 'aliases' => array(), @@ -230,27 +230,27 @@ ), ), 'php-http/discovery' => array( - 'pretty_version' => '1.19.4', - 'version' => '1.19.4.0', - 'reference' => '0700efda8d7526335132360167315fdab3aeb599', + 'pretty_version' => '1.20.0', + 'version' => '1.20.0.0', + 'reference' => '82fe4c73ef3363caed49ff8dd1539ba06044910d', 'type' => 'composer-plugin', 'install_path' => __DIR__ . '/../php-http/discovery', 'aliases' => array(), 'dev_requirement' => false, ), 'phpmailer/phpmailer' => array( - 'pretty_version' => 'v6.9.1', - 'version' => '6.9.1.0', - 'reference' => '039de174cd9c17a8389754d3b877a2ed22743e18', + 'pretty_version' => 'v6.9.3', + 'version' => '6.9.3.0', + 'reference' => '2f5c94fe7493efc213f643c23b1b1c249d40f47e', 'type' => 'library', 'install_path' => __DIR__ . '/../phpmailer/phpmailer', 'aliases' => array(), 'dev_requirement' => false, ), 'phpseclib/phpseclib' => array( - 'pretty_version' => '3.0.41', - 'version' => '3.0.41.0', - 'reference' => '621c73f7dcb310b61de34d1da4c4204e8ace6ceb', + 'pretty_version' => '3.0.42', + 'version' => '3.0.42.0', + 'reference' => 'db92f1b1987b12b13f248fe76c3a52cadb67bb98', 'type' => 'library', 'install_path' => __DIR__ . '/../phpseclib/phpseclib', 'aliases' => array(), @@ -308,9 +308,9 @@ 'psr/http-factory-implementation' => array( 'dev_requirement' => false, 'provided' => array( - 0 => '^1.0', - 1 => '*', - 2 => '1.0', + 0 => '1.0', + 1 => '^1.0', + 2 => '*', ), ), 'psr/http-message' => array( @@ -325,8 +325,8 @@ 'psr/http-message-implementation' => array( 'dev_requirement' => false, 'provided' => array( - 0 => '*', - 1 => '1.0', + 0 => '1.0', + 1 => '*', ), ), 'psr/http-server-handler' => array( @@ -348,9 +348,9 @@ 'dev_requirement' => false, ), 'psr/log' => array( - 'pretty_version' => '3.0.1', - 'version' => '3.0.1.0', - 'reference' => '79dff0b268932c640297f5208d6298f71855c03e', + 'pretty_version' => '3.0.2', + 'version' => '3.0.2.0', + 'reference' => 'f16e1d5863e37f8d8c2a01719f5b34baa2b714d3', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/log', 'aliases' => array(), @@ -399,27 +399,27 @@ 'dev_requirement' => false, ), 'symfony/deprecation-contracts' => array( - 'pretty_version' => 'v3.5.0', - 'version' => '3.5.0.0', - 'reference' => '0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1', + 'pretty_version' => 'v3.5.1', + 'version' => '3.5.1.0', + 'reference' => '74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/deprecation-contracts', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/http-client' => array( - 'pretty_version' => 'v6.4.11', - 'version' => '6.4.11.0', - 'reference' => '4c92046bb788648ff1098cc66da69aa7eac8cb65', + 'pretty_version' => 'v6.4.16', + 'version' => '6.4.16.0', + 'reference' => '60a113666fa67e598abace38e5f46a0954d8833d', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/http-client', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/http-client-contracts' => array( - 'pretty_version' => 'v3.5.0', - 'version' => '3.5.0.0', - 'reference' => '20414d96f391677bf80078aa55baece78b82647d', + 'pretty_version' => 'v3.5.1', + 'version' => '3.5.1.0', + 'reference' => 'c2f3ad828596624ca39ea40f83617ef51ca8bbf9', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/http-client-contracts', 'aliases' => array(), @@ -432,81 +432,81 @@ ), ), 'symfony/http-foundation' => array( - 'pretty_version' => 'v6.4.10', - 'version' => '6.4.10.0', - 'reference' => '117f1f20a7ade7bcea28b861fb79160a21a1e37b', + 'pretty_version' => 'v6.4.16', + 'version' => '6.4.16.0', + 'reference' => '431771b7a6f662f1575b3cfc8fd7617aa9864d57', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/http-foundation', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/polyfill-mbstring' => array( - 'pretty_version' => 'v1.30.0', - 'version' => '1.30.0.0', - 'reference' => 'fd22ab50000ef01661e2a31d850ebaa297f8e03c', + 'pretty_version' => 'v1.31.0', + 'version' => '1.31.0.0', + 'reference' => '85181ba99b2345b0ef10ce42ecac37612d9fd341', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-mbstring', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/polyfill-php80' => array( - 'pretty_version' => 'v1.30.0', - 'version' => '1.30.0.0', - 'reference' => '77fa7995ac1b21ab60769b7323d600a991a90433', + 'pretty_version' => 'v1.31.0', + 'version' => '1.31.0.0', + 'reference' => '60328e362d4c2c802a54fcbf04f9d3fb892b4cf8', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-php80', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/polyfill-php83' => array( - 'pretty_version' => 'v1.30.0', - 'version' => '1.30.0.0', - 'reference' => 'dbdcdf1a4dcc2743591f1079d0c35ab1e2dcbbc9', + 'pretty_version' => 'v1.31.0', + 'version' => '1.31.0.0', + 'reference' => '2fb86d65e2d424369ad2905e83b236a8805ba491', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-php83', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/polyfill-uuid' => array( - 'pretty_version' => 'v1.30.0', - 'version' => '1.30.0.0', - 'reference' => '2ba1f33797470debcda07fe9dce20a0003df18e9', + 'pretty_version' => 'v1.31.0', + 'version' => '1.31.0.0', + 'reference' => '21533be36c24be3f4b1669c4725c7d1d2bab4ae2', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-uuid', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/psr-http-message-bridge' => array( - 'pretty_version' => 'v6.4.11', - 'version' => '6.4.11.0', - 'reference' => '74835ba54eca99a38f374f7a6d932fa510124773', + 'pretty_version' => 'v6.4.13', + 'version' => '6.4.13.0', + 'reference' => 'c9cf83326a1074f83a738fc5320945abf7fb7fec', 'type' => 'symfony-bridge', 'install_path' => __DIR__ . '/../symfony/psr-http-message-bridge', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/service-contracts' => array( - 'pretty_version' => 'v3.5.0', - 'version' => '3.5.0.0', - 'reference' => 'bd1d9e59a81d8fa4acdcea3f617c581f7475a80f', + 'pretty_version' => 'v3.5.1', + 'version' => '3.5.1.0', + 'reference' => 'e53260aabf78fb3d63f8d79d69ece59f80d5eda0', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/service-contracts', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/translation' => array( - 'pretty_version' => 'v6.4.10', - 'version' => '6.4.10.0', - 'reference' => '94041203f8ac200ae9e7c6a18fa6137814ccecc9', + 'pretty_version' => 'v6.4.13', + 'version' => '6.4.13.0', + 'reference' => 'bee9bfabfa8b4045a66bf82520e492cddbaffa66', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/translation', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/translation-contracts' => array( - 'pretty_version' => 'v3.5.0', - 'version' => '3.5.0.0', - 'reference' => 'b9d2189887bb6b2e0367a9fc7136c5239ab9b05a', + 'pretty_version' => 'v3.5.1', + 'version' => '3.5.1.0', + 'reference' => '4667ff3bd513750603a09c8dedbea942487fb07c', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/translation-contracts', 'aliases' => array(), @@ -519,9 +519,9 @@ ), ), 'symfony/uid' => array( - 'pretty_version' => 'v6.4.11', - 'version' => '6.4.11.0', - 'reference' => '6a0394ad707de386547223948fac1e0f2805bc0b', + 'pretty_version' => 'v6.4.13', + 'version' => '6.4.13.0', + 'reference' => '18eb207f0436a993fffbdd811b5b8fa35fa5e007', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/uid', 'aliases' => array(), @@ -537,9 +537,9 @@ 'dev_requirement' => false, ), 'voku/portable-ascii' => array( - 'pretty_version' => '2.0.1', - 'version' => '2.0.1.0', - 'reference' => 'b56450eed252f6801410d810c8e1727224ae0743', + 'pretty_version' => '2.0.3', + 'version' => '2.0.3.0', + 'reference' => 'b1d923f88091c6bf09699efcd7c8a1b1bfd7351d', 'type' => 'library', 'install_path' => __DIR__ . '/../voku/portable-ascii', 'aliases' => array(), diff --git a/lam/lib/3rdParty/composer/firebase/php-jwt/CHANGELOG.md b/lam/lib/3rdParty/composer/firebase/php-jwt/CHANGELOG.md index 2662b0502..5feeb5a67 100644 --- a/lam/lib/3rdParty/composer/firebase/php-jwt/CHANGELOG.md +++ b/lam/lib/3rdParty/composer/firebase/php-jwt/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## [6.10.2](https://github.com/firebase/php-jwt/compare/v6.10.1...v6.10.2) (2024-11-24) + + +### Bug Fixes + +* Mitigate PHP8.4 deprecation warnings ([#570](https://github.com/firebase/php-jwt/issues/570)) ([76808fa](https://github.com/firebase/php-jwt/commit/76808fa227f3811aa5cdb3bf81233714b799a5b5)) +* support php 8.4 ([#583](https://github.com/firebase/php-jwt/issues/583)) ([e3d68b0](https://github.com/firebase/php-jwt/commit/e3d68b044421339443c74199edd020e03fb1887e)) + ## [6.10.1](https://github.com/firebase/php-jwt/compare/v6.10.0...v6.10.1) (2024-05-18) diff --git a/lam/lib/3rdParty/composer/firebase/php-jwt/src/CachedKeySet.php b/lam/lib/3rdParty/composer/firebase/php-jwt/src/CachedKeySet.php index 65bab74f2..8e8e8d68c 100644 --- a/lam/lib/3rdParty/composer/firebase/php-jwt/src/CachedKeySet.php +++ b/lam/lib/3rdParty/composer/firebase/php-jwt/src/CachedKeySet.php @@ -80,9 +80,9 @@ class CachedKeySet implements ArrayAccess ClientInterface $httpClient, RequestFactoryInterface $httpFactory, CacheItemPoolInterface $cache, - int $expiresAfter = null, + ?int $expiresAfter = null, bool $rateLimit = false, - string $defaultAlg = null + ?string $defaultAlg = null ) { $this->jwksUri = $jwksUri; $this->httpClient = $httpClient; @@ -180,7 +180,7 @@ class CachedKeySet implements ArrayAccess $jwksResponse = $this->httpClient->sendRequest($request); if ($jwksResponse->getStatusCode() !== 200) { throw new UnexpectedValueException( - sprintf('HTTP Error: %d %s for URI "%s"', + \sprintf('HTTP Error: %d %s for URI "%s"', $jwksResponse->getStatusCode(), $jwksResponse->getReasonPhrase(), $this->jwksUri, diff --git a/lam/lib/3rdParty/composer/firebase/php-jwt/src/JWK.php b/lam/lib/3rdParty/composer/firebase/php-jwt/src/JWK.php index 63fb2484b..6efc2fe38 100644 --- a/lam/lib/3rdParty/composer/firebase/php-jwt/src/JWK.php +++ b/lam/lib/3rdParty/composer/firebase/php-jwt/src/JWK.php @@ -52,7 +52,7 @@ class JWK * * @uses parseKey */ - public static function parseKeySet(array $jwks, string $defaultAlg = null): array + public static function parseKeySet(array $jwks, ?string $defaultAlg = null): array { $keys = []; @@ -93,7 +93,7 @@ class JWK * * @uses createPemFromModulusAndExponent */ - public static function parseKey(array $jwk, string $defaultAlg = null): ?Key + public static function parseKey(array $jwk, ?string $defaultAlg = null): ?Key { if (empty($jwk)) { throw new InvalidArgumentException('JWK must not be empty'); @@ -212,7 +212,7 @@ class JWK ) ); - return sprintf( + return \sprintf( "-----BEGIN PUBLIC KEY-----\n%s\n-----END PUBLIC KEY-----\n", wordwrap(base64_encode($pem), 64, "\n", true) ); diff --git a/lam/lib/3rdParty/composer/firebase/php-jwt/src/JWT.php b/lam/lib/3rdParty/composer/firebase/php-jwt/src/JWT.php index e9d756398..dd9292a43 100644 --- a/lam/lib/3rdParty/composer/firebase/php-jwt/src/JWT.php +++ b/lam/lib/3rdParty/composer/firebase/php-jwt/src/JWT.php @@ -96,7 +96,7 @@ class JWT public static function decode( string $jwt, $keyOrKeyArray, - stdClass &$headers = null + ?stdClass &$headers = null ): stdClass { // Validate JWT $timestamp = \is_null(static::$timestamp) ? \time() : static::$timestamp; @@ -200,11 +200,11 @@ class JWT array $payload, $key, string $alg, - string $keyId = null, - array $head = null + ?string $keyId = null, + ?array $head = null ): string { $header = ['typ' => 'JWT']; - if (isset($head) && \is_array($head)) { + if (isset($head)) { $header = \array_merge($header, $head); } $header['alg'] = $alg; @@ -387,12 +387,7 @@ class JWT */ public static function jsonEncode(array $input): string { - if (PHP_VERSION_ID >= 50400) { - $json = \json_encode($input, \JSON_UNESCAPED_SLASHES); - } else { - // PHP 5.3 only - $json = \json_encode($input); - } + $json = \json_encode($input, \JSON_UNESCAPED_SLASHES); if ($errno = \json_last_error()) { self::handleJsonError($errno); } elseif ($json === 'null') { diff --git a/lam/lib/3rdParty/composer/illuminate/collections/Arr.php b/lam/lib/3rdParty/composer/illuminate/collections/Arr.php index 361808418..d83cf5f73 100644 --- a/lam/lib/3rdParty/composer/illuminate/collections/Arr.php +++ b/lam/lib/3rdParty/composer/illuminate/collections/Arr.php @@ -185,7 +185,7 @@ class Arr * @param mixed $default * @return mixed */ - public static function first($array, callable $callback = null, $default = null) + public static function first($array, ?callable $callback = null, $default = null) { if (is_null($callback)) { if (empty($array)) { @@ -216,7 +216,7 @@ class Arr * @param mixed $default * @return mixed */ - public static function last($array, callable $callback = null, $default = null) + public static function last($array, ?callable $callback = null, $default = null) { if (is_null($callback)) { return empty($array) ? value($default) : end($array); diff --git a/lam/lib/3rdParty/composer/illuminate/collections/Collection.php b/lam/lib/3rdParty/composer/illuminate/collections/Collection.php index d7369d686..2f0c768f1 100644 --- a/lam/lib/3rdParty/composer/illuminate/collections/Collection.php +++ b/lam/lib/3rdParty/composer/illuminate/collections/Collection.php @@ -382,7 +382,7 @@ class Collection implements ArrayAccess, CanBeEscapedWhenCastToString, Enumerabl * @param (callable(TValue, TKey): bool)|null $callback * @return static */ - public function filter(callable $callback = null) + public function filter(?callable $callback = null) { if ($callback) { return new static(Arr::where($this->items, $callback)); @@ -400,7 +400,7 @@ class Collection implements ArrayAccess, CanBeEscapedWhenCastToString, Enumerabl * @param TFirstDefault|(\Closure(): TFirstDefault) $default * @return TValue|TFirstDefault */ - public function first(callable $callback = null, $default = null) + public function first(?callable $callback = null, $default = null) { return Arr::first($this->items, $callback, $default); } @@ -748,7 +748,7 @@ class Collection implements ArrayAccess, CanBeEscapedWhenCastToString, Enumerabl * @param TLastDefault|(\Closure(): TLastDefault) $default * @return TValue|TLastDefault */ - public function last(callable $callback = null, $default = null) + public function last(?callable $callback = null, $default = null) { return Arr::last($this->items, $callback, $default); } diff --git a/lam/lib/3rdParty/composer/illuminate/collections/Enumerable.php b/lam/lib/3rdParty/composer/illuminate/collections/Enumerable.php index 918f64758..806a6923f 100644 --- a/lam/lib/3rdParty/composer/illuminate/collections/Enumerable.php +++ b/lam/lib/3rdParty/composer/illuminate/collections/Enumerable.php @@ -38,7 +38,7 @@ interface Enumerable extends Arrayable, Countable, IteratorAggregate, Jsonable, * @param callable|null $callback * @return static */ - public static function times($number, callable $callback = null); + public static function times($number, ?callable $callback = null); /** * Create a collection with the given range. @@ -296,7 +296,7 @@ interface Enumerable extends Arrayable, Countable, IteratorAggregate, Jsonable, * @param (callable(TValue): bool)|null $callback * @return static */ - public function filter(callable $callback = null); + public function filter(?callable $callback = null); /** * Apply the callback if the given "value" is (or resolves to) truthy. @@ -308,7 +308,7 @@ interface Enumerable extends Arrayable, Countable, IteratorAggregate, Jsonable, * @param (callable($this): TWhenReturnType)|null $default * @return $this|TWhenReturnType */ - public function when($value, callable $callback = null, callable $default = null); + public function when($value, ?callable $callback = null, ?callable $default = null); /** * Apply the callback if the collection is empty. @@ -319,7 +319,7 @@ interface Enumerable extends Arrayable, Countable, IteratorAggregate, Jsonable, * @param (callable($this): TWhenEmptyReturnType)|null $default * @return $this|TWhenEmptyReturnType */ - public function whenEmpty(callable $callback, callable $default = null); + public function whenEmpty(callable $callback, ?callable $default = null); /** * Apply the callback if the collection is not empty. @@ -330,7 +330,7 @@ interface Enumerable extends Arrayable, Countable, IteratorAggregate, Jsonable, * @param (callable($this): TWhenNotEmptyReturnType)|null $default * @return $this|TWhenNotEmptyReturnType */ - public function whenNotEmpty(callable $callback, callable $default = null); + public function whenNotEmpty(callable $callback, ?callable $default = null); /** * Apply the callback if the given "value" is (or resolves to) truthy. @@ -342,7 +342,7 @@ interface Enumerable extends Arrayable, Countable, IteratorAggregate, Jsonable, * @param (callable($this): TUnlessReturnType)|null $default * @return $this|TUnlessReturnType */ - public function unless($value, callable $callback, callable $default = null); + public function unless($value, callable $callback, ?callable $default = null); /** * Apply the callback unless the collection is empty. @@ -353,7 +353,7 @@ interface Enumerable extends Arrayable, Countable, IteratorAggregate, Jsonable, * @param (callable($this): TUnlessEmptyReturnType)|null $default * @return $this|TUnlessEmptyReturnType */ - public function unlessEmpty(callable $callback, callable $default = null); + public function unlessEmpty(callable $callback, ?callable $default = null); /** * Apply the callback unless the collection is not empty. @@ -364,7 +364,7 @@ interface Enumerable extends Arrayable, Countable, IteratorAggregate, Jsonable, * @param (callable($this): TUnlessNotEmptyReturnType)|null $default * @return $this|TUnlessNotEmptyReturnType */ - public function unlessNotEmpty(callable $callback, callable $default = null); + public function unlessNotEmpty(callable $callback, ?callable $default = null); /** * Filter items by the given key value pair. @@ -476,7 +476,7 @@ interface Enumerable extends Arrayable, Countable, IteratorAggregate, Jsonable, * @param TFirstDefault|(\Closure(): TFirstDefault) $default * @return TValue|TFirstDefault */ - public function first(callable $callback = null, $default = null); + public function first(?callable $callback = null, $default = null); /** * Get the first item by the given key value pair. @@ -618,7 +618,7 @@ interface Enumerable extends Arrayable, Countable, IteratorAggregate, Jsonable, * @param TLastDefault|(\Closure(): TLastDefault) $default * @return TValue|TLastDefault */ - public function last(callable $callback = null, $default = null); + public function last(?callable $callback = null, $default = null); /** * Run a map over each of the items. diff --git a/lam/lib/3rdParty/composer/illuminate/collections/LazyCollection.php b/lam/lib/3rdParty/composer/illuminate/collections/LazyCollection.php index 84b22ebf9..cd268b73d 100644 --- a/lam/lib/3rdParty/composer/illuminate/collections/LazyCollection.php +++ b/lam/lib/3rdParty/composer/illuminate/collections/LazyCollection.php @@ -428,7 +428,7 @@ class LazyCollection implements CanBeEscapedWhenCastToString, Enumerable * @param (callable(TValue, TKey): bool)|null $callback * @return static */ - public function filter(callable $callback = null) + public function filter(?callable $callback = null) { if (is_null($callback)) { $callback = fn ($value) => (bool) $value; @@ -452,7 +452,7 @@ class LazyCollection implements CanBeEscapedWhenCastToString, Enumerable * @param TFirstDefault|(\Closure(): TFirstDefault) $default * @return TValue|TFirstDefault */ - public function first(callable $callback = null, $default = null) + public function first(?callable $callback = null, $default = null) { $iterator = $this->getIterator(); @@ -732,7 +732,7 @@ class LazyCollection implements CanBeEscapedWhenCastToString, Enumerable * @param TLastDefault|(\Closure(): TLastDefault) $default * @return TValue|TLastDefault */ - public function last(callable $callback = null, $default = null) + public function last(?callable $callback = null, $default = null) { $needle = $placeholder = new stdClass; diff --git a/lam/lib/3rdParty/composer/illuminate/collections/Traits/EnumeratesValues.php b/lam/lib/3rdParty/composer/illuminate/collections/Traits/EnumeratesValues.php index dd4d5ab29..9718f5bc5 100644 --- a/lam/lib/3rdParty/composer/illuminate/collections/Traits/EnumeratesValues.php +++ b/lam/lib/3rdParty/composer/illuminate/collections/Traits/EnumeratesValues.php @@ -164,7 +164,7 @@ trait EnumeratesValues * @param (callable(int): TTimesValue)|null $callback * @return static */ - public static function times($number, callable $callback = null) + public static function times($number, ?callable $callback = null) { if ($number < 1) { return new static; @@ -534,7 +534,7 @@ trait EnumeratesValues * @param (callable($this): TWhenEmptyReturnType)|null $default * @return $this|TWhenEmptyReturnType */ - public function whenEmpty(callable $callback, callable $default = null) + public function whenEmpty(callable $callback, ?callable $default = null) { return $this->when($this->isEmpty(), $callback, $default); } @@ -548,7 +548,7 @@ trait EnumeratesValues * @param (callable($this): TWhenNotEmptyReturnType)|null $default * @return $this|TWhenNotEmptyReturnType */ - public function whenNotEmpty(callable $callback, callable $default = null) + public function whenNotEmpty(callable $callback, ?callable $default = null) { return $this->when($this->isNotEmpty(), $callback, $default); } @@ -562,7 +562,7 @@ trait EnumeratesValues * @param (callable($this): TUnlessEmptyReturnType)|null $default * @return $this|TUnlessEmptyReturnType */ - public function unlessEmpty(callable $callback, callable $default = null) + public function unlessEmpty(callable $callback, ?callable $default = null) { return $this->whenNotEmpty($callback, $default); } @@ -576,7 +576,7 @@ trait EnumeratesValues * @param (callable($this): TUnlessNotEmptyReturnType)|null $default * @return $this|TUnlessNotEmptyReturnType */ - public function unlessNotEmpty(callable $callback, callable $default = null) + public function unlessNotEmpty(callable $callback, ?callable $default = null) { return $this->whenEmpty($callback, $default); } diff --git a/lam/lib/3rdParty/composer/illuminate/conditionable/Traits/Conditionable.php b/lam/lib/3rdParty/composer/illuminate/conditionable/Traits/Conditionable.php index 19307437c..5e3194bbc 100644 --- a/lam/lib/3rdParty/composer/illuminate/conditionable/Traits/Conditionable.php +++ b/lam/lib/3rdParty/composer/illuminate/conditionable/Traits/Conditionable.php @@ -18,7 +18,7 @@ trait Conditionable * @param (callable($this, TWhenParameter): TWhenReturnType)|null $default * @return $this|TWhenReturnType */ - public function when($value = null, callable $callback = null, callable $default = null) + public function when($value = null, ?callable $callback = null, ?callable $default = null) { $value = $value instanceof Closure ? $value($this) : $value; @@ -50,7 +50,7 @@ trait Conditionable * @param (callable($this, TUnlessParameter): TUnlessReturnType)|null $default * @return $this|TUnlessReturnType */ - public function unless($value = null, callable $callback = null, callable $default = null) + public function unless($value = null, ?callable $callback = null, ?callable $default = null) { $value = $value instanceof Closure ? $value($this) : $value; diff --git a/lam/lib/3rdParty/composer/illuminate/contracts/Auth/Access/Gate.php b/lam/lib/3rdParty/composer/illuminate/contracts/Auth/Access/Gate.php index eb605d827..4bafab3f4 100644 --- a/lam/lib/3rdParty/composer/illuminate/contracts/Auth/Access/Gate.php +++ b/lam/lib/3rdParty/composer/illuminate/contracts/Auth/Access/Gate.php @@ -29,7 +29,7 @@ interface Gate * @param array|null $abilities * @return $this */ - public function resource($name, $class, array $abilities = null); + public function resource($name, $class, ?array $abilities = null); /** * Define a policy class for a given class type. diff --git a/lam/lib/3rdParty/composer/illuminate/contracts/Auth/PasswordBroker.php b/lam/lib/3rdParty/composer/illuminate/contracts/Auth/PasswordBroker.php index bbbe9b508..c6b202329 100644 --- a/lam/lib/3rdParty/composer/illuminate/contracts/Auth/PasswordBroker.php +++ b/lam/lib/3rdParty/composer/illuminate/contracts/Auth/PasswordBroker.php @@ -48,7 +48,7 @@ interface PasswordBroker * @param \Closure|null $callback * @return string */ - public function sendResetLink(array $credentials, Closure $callback = null); + public function sendResetLink(array $credentials, ?Closure $callback = null); /** * Reset the password for the given token. diff --git a/lam/lib/3rdParty/composer/illuminate/contracts/Container/Container.php b/lam/lib/3rdParty/composer/illuminate/contracts/Container/Container.php index 1472a2e5f..47c5f8b55 100644 --- a/lam/lib/3rdParty/composer/illuminate/contracts/Container/Container.php +++ b/lam/lib/3rdParty/composer/illuminate/contracts/Container/Container.php @@ -197,7 +197,7 @@ interface Container extends ContainerInterface * @param \Closure|null $callback * @return void */ - public function beforeResolving($abstract, Closure $callback = null); + public function beforeResolving($abstract, ?Closure $callback = null); /** * Register a new resolving callback. @@ -206,7 +206,7 @@ interface Container extends ContainerInterface * @param \Closure|null $callback * @return void */ - public function resolving($abstract, Closure $callback = null); + public function resolving($abstract, ?Closure $callback = null); /** * Register a new after resolving callback. @@ -215,5 +215,5 @@ interface Container extends ContainerInterface * @param \Closure|null $callback * @return void */ - public function afterResolving($abstract, Closure $callback = null); + public function afterResolving($abstract, ?Closure $callback = null); } diff --git a/lam/lib/3rdParty/composer/illuminate/contracts/Process/InvokedProcess.php b/lam/lib/3rdParty/composer/illuminate/contracts/Process/InvokedProcess.php index d272d3772..87a92c047 100644 --- a/lam/lib/3rdParty/composer/illuminate/contracts/Process/InvokedProcess.php +++ b/lam/lib/3rdParty/composer/illuminate/contracts/Process/InvokedProcess.php @@ -60,5 +60,5 @@ interface InvokedProcess * @param callable|null $output * @return \Illuminate\Console\Process\ProcessResult */ - public function wait(callable $output = null); + public function wait(?callable $output = null); } diff --git a/lam/lib/3rdParty/composer/illuminate/contracts/Process/ProcessResult.php b/lam/lib/3rdParty/composer/illuminate/contracts/Process/ProcessResult.php index 702701ea1..cf9adcced 100644 --- a/lam/lib/3rdParty/composer/illuminate/contracts/Process/ProcessResult.php +++ b/lam/lib/3rdParty/composer/illuminate/contracts/Process/ProcessResult.php @@ -52,7 +52,7 @@ interface ProcessResult * @param callable|null $callback * @return $this */ - public function throw(callable $callback = null); + public function throw(?callable $callback = null); /** * Throw an exception if the process failed and the given condition is true. @@ -61,5 +61,5 @@ interface ProcessResult * @param callable|null $callback * @return $this */ - public function throwIf(bool $condition, callable $callback = null); + public function throwIf(bool $condition, ?callable $callback = null); } diff --git a/lam/lib/3rdParty/composer/illuminate/support/Composer.php b/lam/lib/3rdParty/composer/illuminate/support/Composer.php index 93da9b5ee..ad976c0d8 100644 --- a/lam/lib/3rdParty/composer/illuminate/support/Composer.php +++ b/lam/lib/3rdParty/composer/illuminate/support/Composer.php @@ -63,7 +63,7 @@ class Composer * @param string|null $composerBinary * @return bool */ - public function requirePackages(array $packages, bool $dev = false, Closure|OutputInterface $output = null, $composerBinary = null) + public function requirePackages(array $packages, bool $dev = false, Closure|OutputInterface|null $output = null, $composerBinary = null) { $command = collect([ ...$this->findComposer($composerBinary), @@ -92,7 +92,7 @@ class Composer * @param string|null $composerBinary * @return bool */ - public function removePackages(array $packages, bool $dev = false, Closure|OutputInterface $output = null, $composerBinary = null) + public function removePackages(array $packages, bool $dev = false, Closure|OutputInterface|null $output = null, $composerBinary = null) { $command = collect([ ...$this->findComposer($composerBinary), diff --git a/lam/lib/3rdParty/composer/illuminate/support/Facades/Bus.php b/lam/lib/3rdParty/composer/illuminate/support/Facades/Bus.php index 13fe1c9fe..6c22e027e 100644 --- a/lam/lib/3rdParty/composer/illuminate/support/Facades/Bus.php +++ b/lam/lib/3rdParty/composer/illuminate/support/Facades/Bus.php @@ -60,7 +60,7 @@ class Bus extends Facade * @param \Illuminate\Bus\BatchRepository|null $batchRepository * @return \Illuminate\Support\Testing\Fakes\BusFake */ - public static function fake($jobsToFake = [], BatchRepository $batchRepository = null) + public static function fake($jobsToFake = [], ?BatchRepository $batchRepository = null) { $actualDispatcher = static::isFake() ? static::getFacadeRoot()->dispatcher diff --git a/lam/lib/3rdParty/composer/illuminate/support/Facades/Process.php b/lam/lib/3rdParty/composer/illuminate/support/Facades/Process.php index 43b5b93a6..4f3546d07 100644 --- a/lam/lib/3rdParty/composer/illuminate/support/Facades/Process.php +++ b/lam/lib/3rdParty/composer/illuminate/support/Facades/Process.php @@ -65,7 +65,7 @@ class Process extends Facade * @param \Closure|array|null $callback * @return \Illuminate\Process\Factory */ - public static function fake(Closure|array $callback = null) + public static function fake(Closure|array|null $callback = null) { return tap(static::getFacadeRoot(), function ($fake) use ($callback) { static::swap($fake->fake($callback)); diff --git a/lam/lib/3rdParty/composer/illuminate/support/Str.php b/lam/lib/3rdParty/composer/illuminate/support/Str.php index 6217bb33e..d614ac628 100644 --- a/lam/lib/3rdParty/composer/illuminate/support/Str.php +++ b/lam/lib/3rdParty/composer/illuminate/support/Str.php @@ -959,7 +959,7 @@ class Str * @param callable|null $factory * @return void */ - public static function createRandomStringsUsing(callable $factory = null) + public static function createRandomStringsUsing(?callable $factory = null) { static::$randomStringFactory = $factory; } @@ -1665,7 +1665,7 @@ class Str * @param callable|null $factory * @return void */ - public static function createUuidsUsing(callable $factory = null) + public static function createUuidsUsing(?callable $factory = null) { static::$uuidFactory = $factory; } @@ -1710,7 +1710,7 @@ class Str * @param \Closure|null $callback * @return \Ramsey\Uuid\UuidInterface */ - public static function freezeUuids(Closure $callback = null) + public static function freezeUuids(?Closure $callback = null) { $uuid = Str::uuid(); @@ -1772,7 +1772,7 @@ class Str * @param callable|null $factory * @return void */ - public static function createUlidsUsing(callable $factory = null) + public static function createUlidsUsing(?callable $factory = null) { static::$ulidFactory = $factory; } @@ -1817,7 +1817,7 @@ class Str * @param Closure|null $callback * @return Ulid */ - public static function freezeUlids(Closure $callback = null) + public static function freezeUlids(?Closure $callback = null) { $ulid = Str::ulid(); diff --git a/lam/lib/3rdParty/composer/illuminate/support/Testing/Fakes/BusFake.php b/lam/lib/3rdParty/composer/illuminate/support/Testing/Fakes/BusFake.php index e62fac4b0..780b2929c 100644 --- a/lam/lib/3rdParty/composer/illuminate/support/Testing/Fakes/BusFake.php +++ b/lam/lib/3rdParty/composer/illuminate/support/Testing/Fakes/BusFake.php @@ -88,7 +88,7 @@ class BusFake implements Fake, QueueingDispatcher * @param \Illuminate\Bus\BatchRepository|null $batchRepository * @return void */ - public function __construct(QueueingDispatcher $dispatcher, $jobsToFake = [], BatchRepository $batchRepository = null) + public function __construct(QueueingDispatcher $dispatcher, $jobsToFake = [], ?BatchRepository $batchRepository = null) { $this->dispatcher = $dispatcher; $this->jobsToFake = Arr::wrap($jobsToFake); diff --git a/lam/lib/3rdParty/composer/illuminate/support/Testing/Fakes/NotificationFake.php b/lam/lib/3rdParty/composer/illuminate/support/Testing/Fakes/NotificationFake.php index ee610a401..526c111c3 100644 --- a/lam/lib/3rdParty/composer/illuminate/support/Testing/Fakes/NotificationFake.php +++ b/lam/lib/3rdParty/composer/illuminate/support/Testing/Fakes/NotificationFake.php @@ -296,7 +296,7 @@ class NotificationFake implements Fake, NotificationDispatcher, NotificationFact * @param array|null $channels * @return void */ - public function sendNow($notifiables, $notification, array $channels = null) + public function sendNow($notifiables, $notification, ?array $channels = null) { if (! $notifiables instanceof Collection && ! is_array($notifiables)) { $notifiables = [$notifiables]; diff --git a/lam/lib/3rdParty/composer/illuminate/support/ValidatedInput.php b/lam/lib/3rdParty/composer/illuminate/support/ValidatedInput.php index 70bc6c3d2..0ed273772 100644 --- a/lam/lib/3rdParty/composer/illuminate/support/ValidatedInput.php +++ b/lam/lib/3rdParty/composer/illuminate/support/ValidatedInput.php @@ -280,7 +280,7 @@ class ValidatedInput implements ValidatedData * @param callable|null $default * @return $this|mixed */ - public function whenHas($key, callable $callback, callable $default = null) + public function whenHas($key, callable $callback, ?callable $default = null) { if ($this->has($key)) { return $callback(data_get($this->all(), $key)) ?: $this; @@ -358,7 +358,7 @@ class ValidatedInput implements ValidatedData * @param callable|null $default * @return $this|mixed */ - public function whenFilled($key, callable $callback, callable $default = null) + public function whenFilled($key, callable $callback, ?callable $default = null) { if ($this->filled($key)) { return $callback(data_get($this->all(), $key)) ?: $this; @@ -379,7 +379,7 @@ class ValidatedInput implements ValidatedData * @param callable|null $default * @return $this|mixed */ - public function whenMissing($key, callable $callback, callable $default = null) + public function whenMissing($key, callable $callback, ?callable $default = null) { if ($this->missing($key)) { return $callback(data_get($this->all(), $key)) ?: $this; diff --git a/lam/lib/3rdParty/composer/illuminate/support/helpers.php b/lam/lib/3rdParty/composer/illuminate/support/helpers.php index 991f403f3..cdcf52f15 100755 --- a/lam/lib/3rdParty/composer/illuminate/support/helpers.php +++ b/lam/lib/3rdParty/composer/illuminate/support/helpers.php @@ -187,7 +187,7 @@ if (! function_exists('optional')) { * @param callable|null $callback * @return mixed */ - function optional($value = null, callable $callback = null) + function optional($value = null, ?callable $callback = null) { if (is_null($callback)) { return new Optional($value); @@ -427,7 +427,7 @@ if (! function_exists('with')) { * @param (callable(TValue): (TReturn))|null $callback * @return ($callback is null ? TValue : TReturn) */ - function with($value, callable $callback = null) + function with($value, ?callable $callback = null) { return is_null($callback) ? $value : $callback($value); } diff --git a/lam/lib/3rdParty/composer/monolog/monolog/CHANGELOG.md b/lam/lib/3rdParty/composer/monolog/monolog/CHANGELOG.md index ec355568c..ce16eecbd 100644 --- a/lam/lib/3rdParty/composer/monolog/monolog/CHANGELOG.md +++ b/lam/lib/3rdParty/composer/monolog/monolog/CHANGELOG.md @@ -1,3 +1,17 @@ +### 3.8.0 (2024-11-12) + + * Added `$fileOpenMode` param to `StreamHandler` to define a custom fopen mode to open the log file (#1913) + * Fixed PHP 8.4 deprecation notices (#1903) + * Added ability to extend/override `IntrospectionProcessor` (#1899) + * Added `$timeout` param to `ProcessHandler` to configure the stream_select() timeout to avoid blocking too long (default is 1.0 sec) (#1916) + * Fixed JsonFormatter batch handling to normalize records individually to make sure they look the same as if they were handled one by one (#1906) + * Fixed `StreamHandler` handling of write failures so that it now closes/reopens the stream and retries the write once before failing (#1882) + * Fixed `StreamHandler` error handler causing issues if a stream handler triggers an error (#1866) + * Fixed `StreamHandler::reset` not closing the stream, so that it would fail to write in some cases with long running processes (#1862) + * Fixed `RotatingFileHandler` issue where rotation does not happen in some long running processes (#1905) + * Fixed `JsonFormatter` handling of incomplete classes (#1834) + * Fixed `RotatingFileHandler` bug where rotation could sometimes not happen correctly (#1905) + ### 3.7.0 (2024-06-28) * Added `NormalizerFormatter->setBasePath(...)` (and `JsonFormatter` by extension) that allows removing the project's path from the stack trace output (47e301d3e) @@ -122,6 +136,14 @@ New deprecations: value equal to what `Logger::WARNING` was giving you. - `Logger::getLevelName()` is now deprecated. +### 2.10.0 (2024-11-12) + + * Added `$fileOpenMode` to `StreamHandler` to define a custom fopen mode to open the log file (#1913) + * Fixed `StreamHandler` handling of write failures so that it now closes/reopens the stream and retries the write once before failing (#1882) + * Fixed `StreamHandler` error handler causing issues if a stream handler triggers an error (#1866) + * Fixed `JsonFormatter` handling of incomplete classes (#1834) + * Fixed `RotatingFileHandler` bug where rotation could sometimes not happen correctly (#1905) + ### 2.9.3 (2024-04-12) * Fixed PHP 8.4 deprecation warnings (#1874) diff --git a/lam/lib/3rdParty/composer/monolog/monolog/README.md b/lam/lib/3rdParty/composer/monolog/monolog/README.md index c54d83cb2..da44eb168 100644 --- a/lam/lib/3rdParty/composer/monolog/monolog/README.md +++ b/lam/lib/3rdParty/composer/monolog/monolog/README.md @@ -106,7 +106,6 @@ Bugs and feature request are tracked on [GitHub](https://github.com/Seldaek/mono - [Lumen](http://lumen.laravel.com/) comes out of the box with Monolog. - [PPI](https://github.com/ppi/framework) comes out of the box with Monolog. - [CakePHP](http://cakephp.org/) is usable with Monolog via the [cakephp-monolog](https://github.com/jadb/cakephp-monolog) plugin. -- [Slim](http://www.slimframework.com/) is usable with Monolog via the [Slim-Monolog](https://github.com/Flynsarmy/Slim-Monolog) log writer. - [XOOPS 2.6](http://xoops.org/) comes out of the box with Monolog. - [Aura.Web_Project](https://github.com/auraphp/Aura.Web_Project) comes out of the box with Monolog. - [Nette Framework](http://nette.org/en/) is usable with Monolog via the [contributte/monolog](https://github.com/contributte/monolog) or [orisai/nette-monolog](https://github.com/orisai/nette-monolog) extensions. diff --git a/lam/lib/3rdParty/composer/monolog/monolog/composer.json b/lam/lib/3rdParty/composer/monolog/monolog/composer.json index 30a99d7af..9574a1b0d 100644 --- a/lam/lib/3rdParty/composer/monolog/monolog/composer.json +++ b/lam/lib/3rdParty/composer/monolog/monolog/composer.json @@ -26,12 +26,14 @@ "guzzlehttp/psr7": "^2.2", "mongodb/mongodb": "^1.8", "php-amqplib/php-amqplib": "~2.4 || ^3", - "phpstan/phpstan": "^1.9", - "phpstan/phpstan-deprecation-rules": "^1.0", - "phpstan/phpstan-strict-rules": "^1.4", - "phpunit/phpunit": "^10.5.17", + "php-console/php-console": "^3.1.8", + "phpstan/phpstan": "^2", + "phpstan/phpstan-deprecation-rules": "^2", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "^10.5.17 || ^11.0.7", "predis/predis": "^1.1 || ^2", - "ruflin/elastica": "^7", + "rollbar/rollbar": "^4.0", + "ruflin/elastica": "^7 || ^8", "symfony/mailer": "^5.4 || ^6", "symfony/mime": "^5.4 || ^6" }, @@ -72,6 +74,9 @@ "config": { "lock": false, "sort-packages": true, - "platform-check": false + "platform-check": false, + "allow-plugins": { + "php-http/discovery": false + } } } diff --git a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/ErrorHandler.php b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/ErrorHandler.php index 452778b88..805f2dfd9 100644 --- a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/ErrorHandler.php +++ b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/ErrorHandler.php @@ -167,7 +167,7 @@ class ErrorHandler E_USER_ERROR => LogLevel::ERROR, E_USER_WARNING => LogLevel::WARNING, E_USER_NOTICE => LogLevel::NOTICE, - E_STRICT => LogLevel::NOTICE, + 2048 => LogLevel::NOTICE, // E_STRICT E_RECOVERABLE_ERROR => LogLevel::ERROR, E_DEPRECATED => LogLevel::NOTICE, E_USER_DEPRECATED => LogLevel::NOTICE, @@ -269,7 +269,7 @@ class ErrorHandler E_USER_ERROR => 'E_USER_ERROR', E_USER_WARNING => 'E_USER_WARNING', E_USER_NOTICE => 'E_USER_NOTICE', - E_STRICT => 'E_STRICT', + 2048 => 'E_STRICT', E_RECOVERABLE_ERROR => 'E_RECOVERABLE_ERROR', E_DEPRECATED => 'E_DEPRECATED', E_USER_DEPRECATED => 'E_USER_DEPRECATED', diff --git a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Formatter/ElasticaFormatter.php b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Formatter/ElasticaFormatter.php index 8c92eff22..160510ad8 100644 --- a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Formatter/ElasticaFormatter.php +++ b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Formatter/ElasticaFormatter.php @@ -34,8 +34,6 @@ class ElasticaFormatter extends NormalizerFormatter /** * @param string $index Elastic Search index name * @param ?string $type Elastic Search document type, deprecated as of Elastica 7 - * - * @throws \RuntimeException If the function json_encode does not exist */ public function __construct(string $index, ?string $type) { diff --git a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Formatter/ElasticsearchFormatter.php b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Formatter/ElasticsearchFormatter.php index b38aca079..6c3eb9b2a 100644 --- a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Formatter/ElasticsearchFormatter.php +++ b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Formatter/ElasticsearchFormatter.php @@ -34,8 +34,6 @@ class ElasticsearchFormatter extends NormalizerFormatter /** * @param string $index Elasticsearch index name * @param string $type Elasticsearch record type - * - * @throws \RuntimeException If the function json_encode does not exist */ public function __construct(string $index, string $type) { diff --git a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Formatter/FluentdFormatter.php b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Formatter/FluentdFormatter.php index 0c9f3e162..5f7811735 100644 --- a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Formatter/FluentdFormatter.php +++ b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Formatter/FluentdFormatter.php @@ -42,15 +42,8 @@ class FluentdFormatter implements FormatterInterface */ protected bool $levelTag = false; - /** - * @throws \RuntimeException If the function json_encode does not exist - */ public function __construct(bool $levelTag = false) { - if (!\function_exists('json_encode')) { - throw new \RuntimeException('PHP\'s json extension is required to use Monolog\'s FluentdUnixFormatter'); - } - $this->levelTag = $levelTag; } diff --git a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Formatter/GelfMessageFormatter.php b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Formatter/GelfMessageFormatter.php index dd6fefbcb..9b0861948 100644 --- a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Formatter/GelfMessageFormatter.php +++ b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Formatter/GelfMessageFormatter.php @@ -88,11 +88,11 @@ class GelfMessageFormatter extends NormalizerFormatter { $context = $extra = []; if (isset($record->context)) { - /** @var mixed[] $context */ + /** @var array|bool|float|int|string|null> $context */ $context = parent::normalize($record->context); } if (isset($record->extra)) { - /** @var mixed[] $extra */ + /** @var array|bool|float|int|string|null> $extra */ $extra = parent::normalize($record->extra); } diff --git a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Formatter/HtmlFormatter.php b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Formatter/HtmlFormatter.php index b5d69bcfd..09cbea9b6 100644 --- a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Formatter/HtmlFormatter.php +++ b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Formatter/HtmlFormatter.php @@ -42,8 +42,7 @@ class HtmlFormatter extends NormalizerFormatter } /** - * @param string|null $dateFormat The format of the timestamp: one supported by DateTime::format - * @throws \RuntimeException If the function json_encode does not exist + * @param string|null $dateFormat The format of the timestamp: one supported by DateTime::format */ public function __construct(?string $dateFormat = null) { diff --git a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Formatter/JsonFormatter.php b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Formatter/JsonFormatter.php index 640043a7e..2f4305409 100644 --- a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Formatter/JsonFormatter.php +++ b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Formatter/JsonFormatter.php @@ -38,8 +38,6 @@ class JsonFormatter extends NormalizerFormatter /** * @param self::BATCH_MODE_* $batchMode - * - * @throws \RuntimeException If the function json_encode does not exist */ public function __construct(int $batchMode = self::BATCH_MODE_JSON, bool $appendNewline = true, bool $ignoreEmptyContextAndExtra = false, bool $includeStacktraces = false) { @@ -76,22 +74,7 @@ class JsonFormatter extends NormalizerFormatter */ public function format(LogRecord $record): string { - $normalized = parent::format($record); - - if (isset($normalized['context']) && $normalized['context'] === []) { - if ($this->ignoreEmptyContextAndExtra) { - unset($normalized['context']); - } else { - $normalized['context'] = new \stdClass; - } - } - if (isset($normalized['extra']) && $normalized['extra'] === []) { - if ($this->ignoreEmptyContextAndExtra) { - unset($normalized['extra']); - } else { - $normalized['extra'] = new \stdClass; - } - } + $normalized = $this->normalizeRecord($record); return $this->toJson($normalized, true) . ($this->appendNewline ? "\n" : ''); } @@ -117,6 +100,31 @@ class JsonFormatter extends NormalizerFormatter return $this; } + /** + * @return array|bool|float|int|\stdClass|string|null> + */ + protected function normalizeRecord(LogRecord $record): array + { + $normalized = parent::normalizeRecord($record); + + if (isset($normalized['context']) && $normalized['context'] === []) { + if ($this->ignoreEmptyContextAndExtra) { + unset($normalized['context']); + } else { + $normalized['context'] = new \stdClass; + } + } + if (isset($normalized['extra']) && $normalized['extra'] === []) { + if ($this->ignoreEmptyContextAndExtra) { + unset($normalized['extra']); + } else { + $normalized['extra'] = new \stdClass; + } + } + + return $normalized; + } + /** * Return a JSON-encoded array of records. * @@ -124,7 +132,9 @@ class JsonFormatter extends NormalizerFormatter */ protected function formatBatchJson(array $records): string { - return $this->toJson($this->normalize($records), true); + $formatted = array_map(fn (LogRecord $record) => $this->normalizeRecord($record), $records); + + return $this->toJson($formatted, true); } /** @@ -206,7 +216,7 @@ class JsonFormatter extends NormalizerFormatter * Normalizes given exception with or without its own stack trace based on * `includeStacktraces` property. * - * @inheritDoc + * @return array>>|string */ protected function normalizeException(Throwable $e, int $depth = 0): array { diff --git a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Formatter/LineFormatter.php b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Formatter/LineFormatter.php index ba5852b39..e563503f0 100644 --- a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Formatter/LineFormatter.php +++ b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Formatter/LineFormatter.php @@ -40,8 +40,6 @@ class LineFormatter extends NormalizerFormatter * @param string|null $format The format of the message * @param string|null $dateFormat The format of the timestamp: one supported by DateTime::format * @param bool $allowInlineLineBreaks Whether to allow inline line breaks in log entries - * - * @throws \RuntimeException If the function json_encode does not exist */ public function __construct(?string $format = null, ?string $dateFormat = null, bool $allowInlineLineBreaks = false, bool $ignoreEmptyContextAndExtra = false, bool $includeStacktraces = false) { @@ -177,7 +175,7 @@ class LineFormatter extends NormalizerFormatter if (null === $output) { $pcreErrorCode = preg_last_error(); - throw new \RuntimeException('Failed to run preg_replace: ' . $pcreErrorCode . ' / ' . Utils::pcreLastErrorMessage($pcreErrorCode)); + throw new \RuntimeException('Failed to run preg_replace: ' . $pcreErrorCode . ' / ' . preg_last_error_msg()); } } @@ -245,7 +243,7 @@ class LineFormatter extends NormalizerFormatter if (null === $str) { $pcreErrorCode = preg_last_error(); - throw new \RuntimeException('Failed to run preg_replace: ' . $pcreErrorCode . ' / ' . Utils::pcreLastErrorMessage($pcreErrorCode)); + throw new \RuntimeException('Failed to run preg_replace: ' . $pcreErrorCode . ' / ' . preg_last_error_msg()); } } @@ -311,6 +309,6 @@ class LineFormatter extends NormalizerFormatter private function stacktracesParserCustom(string $trace): string { - return implode("\n", array_filter(array_map($this->stacktracesParser, explode("\n", $trace)))); + return implode("\n", array_filter(array_map($this->stacktracesParser, explode("\n", $trace)), fn ($line) => $line !== false && $line !== '')); } } diff --git a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Formatter/LogstashFormatter.php b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Formatter/LogstashFormatter.php index abee3cd13..d0e8749e3 100644 --- a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Formatter/LogstashFormatter.php +++ b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Formatter/LogstashFormatter.php @@ -48,8 +48,6 @@ class LogstashFormatter extends NormalizerFormatter * @param string|null $systemName The system/machine name, used as the "source" field of logstash, defaults to the hostname of the machine * @param string $extraKey The key for extra keys inside logstash "fields", defaults to extra * @param string $contextKey The key for context keys inside logstash "fields", defaults to context - * - * @throws \RuntimeException If the function json_encode does not exist */ public function __construct(string $applicationName, ?string $systemName = null, string $extraKey = 'extra', string $contextKey = 'context') { diff --git a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Formatter/MongoDBFormatter.php b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Formatter/MongoDBFormatter.php index 2da3e0bec..129f04837 100644 --- a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Formatter/MongoDBFormatter.php +++ b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Formatter/MongoDBFormatter.php @@ -150,7 +150,7 @@ class MongoDBFormatter implements FormatterInterface { $milliseconds = floor(((float) $value->format('U.u')) * 1000); - $milliseconds = (PHP_INT_SIZE == 8) //64-bit OS? + $milliseconds = (PHP_INT_SIZE === 8) //64-bit OS? ? (int) $milliseconds : (string) $milliseconds; diff --git a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Formatter/NormalizerFormatter.php b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Formatter/NormalizerFormatter.php index e6f35be4d..261967f1a 100644 --- a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Formatter/NormalizerFormatter.php +++ b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Formatter/NormalizerFormatter.php @@ -34,15 +34,11 @@ class NormalizerFormatter implements FormatterInterface protected string $basePath = ''; /** - * @param string|null $dateFormat The format of the timestamp: one supported by DateTime::format - * @throws \RuntimeException If the function json_encode does not exist + * @param string|null $dateFormat The format of the timestamp: one supported by DateTime::format */ public function __construct(?string $dateFormat = null) { $this->dateFormat = null === $dateFormat ? static::SIMPLE_DATE : $dateFormat; - if (!\function_exists('json_encode')) { - throw new \RuntimeException('PHP\'s json extension is required to use Monolog\'s NormalizerFormatter'); - } } /** @@ -167,7 +163,7 @@ class NormalizerFormatter implements FormatterInterface */ protected function normalizeRecord(LogRecord $record): array { - /** @var array $normalized */ + /** @var array $normalized */ $normalized = $this->normalize($record->toArray()); return $normalized; @@ -252,7 +248,7 @@ class NormalizerFormatter implements FormatterInterface } /** - * @return mixed[] + * @return array>>|string */ protected function normalizeException(Throwable $e, int $depth = 0) { diff --git a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Formatter/WildfireFormatter.php b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Formatter/WildfireFormatter.php index 28a1deecf..5e93e01b0 100644 --- a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Formatter/WildfireFormatter.php +++ b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Formatter/WildfireFormatter.php @@ -25,8 +25,6 @@ class WildfireFormatter extends NormalizerFormatter { /** * @param string|null $dateFormat The format of the timestamp: one supported by DateTime::format - * - * @throws \RuntimeException If the function json_encode does not exist */ public function __construct(?string $dateFormat = null) { diff --git a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/BrowserConsoleHandler.php b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/BrowserConsoleHandler.php index 0d75cb313..788d7d068 100644 --- a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/BrowserConsoleHandler.php +++ b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/BrowserConsoleHandler.php @@ -243,7 +243,7 @@ class BrowserConsoleHandler extends AbstractProcessingHandler if (null === $style) { $pcreErrorCode = preg_last_error(); - throw new \RuntimeException('Failed to run preg_replace_callback: ' . $pcreErrorCode . ' / ' . Utils::pcreLastErrorMessage($pcreErrorCode)); + throw new \RuntimeException('Failed to run preg_replace_callback: ' . $pcreErrorCode . ' / ' . preg_last_error_msg()); } return $style; @@ -256,7 +256,7 @@ class BrowserConsoleHandler extends AbstractProcessingHandler private static function dump(string $title, array $dict): array { $script = []; - $dict = array_filter($dict); + $dict = array_filter($dict, fn ($value) => $value !== null); if (\count($dict) === 0) { return $script; } diff --git a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/ChromePHPHandler.php b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/ChromePHPHandler.php index 8b1cd5a3e..61c9e83f9 100644 --- a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/ChromePHPHandler.php +++ b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/ChromePHPHandler.php @@ -62,15 +62,9 @@ class ChromePHPHandler extends AbstractProcessingHandler protected static bool $sendHeaders = true; - /** - * @throws \RuntimeException If the function json_encode does not exist - */ public function __construct(int|string|Level $level = Level::Debug, bool $bubble = true) { parent::__construct($level, $bubble); - if (!\function_exists('json_encode')) { - throw new \RuntimeException('PHP\'s json extension is required to use Monolog\'s ChromePHPHandler'); - } } /** diff --git a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/ElasticaHandler.php b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/ElasticaHandler.php index d9b85b4d0..4a184b393 100644 --- a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/ElasticaHandler.php +++ b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/ElasticaHandler.php @@ -11,6 +11,7 @@ namespace Monolog\Handler; +use Elastic\Transport\Exception\TransportException; use Elastica\Document; use Monolog\Formatter\FormatterInterface; use Monolog\Formatter\ElasticaFormatter; @@ -133,7 +134,7 @@ class ElasticaHandler extends AbstractProcessingHandler { try { $this->client->addDocuments($documents); - } catch (ExceptionInterface $e) { + } catch (ExceptionInterface | TransportException $e) { if (!$this->options['ignore_error']) { throw new \RuntimeException("Error sending messages to Elasticsearch", 0, $e); } diff --git a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/ElasticsearchHandler.php b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/ElasticsearchHandler.php index 74cc7b6e6..6fd705de4 100644 --- a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/ElasticsearchHandler.php +++ b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/ElasticsearchHandler.php @@ -209,7 +209,11 @@ class ElasticsearchHandler extends AbstractProcessingHandler return new ElasticInvalidArgumentException('Elasticsearch failed to index one or more records.'); } - return new ElasticsearchRuntimeException('Elasticsearch failed to index one or more records.'); + if (class_exists(ElasticsearchRuntimeException::class)) { + return new ElasticsearchRuntimeException('Elasticsearch failed to index one or more records.'); + } + + throw new \LogicException('Unsupported elastic search client version'); } /** @@ -225,6 +229,10 @@ class ElasticsearchHandler extends AbstractProcessingHandler return new ElasticInvalidArgumentException($error['type'] . ': ' . $error['reason'], 0, $previous); } - return new ElasticsearchRuntimeException($error['type'] . ': ' . $error['reason'], 0, $previous); + if (class_exists(ElasticsearchRuntimeException::class)) { + return new ElasticsearchRuntimeException($error['type'].': '.$error['reason'], 0, $previous); + } + + throw new \LogicException('Unsupported elastic search client version'); } } diff --git a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/ErrorLogHandler.php b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/ErrorLogHandler.php index aaad9d48c..a38c3f5e0 100644 --- a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/ErrorLogHandler.php +++ b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/ErrorLogHandler.php @@ -27,11 +27,12 @@ class ErrorLogHandler extends AbstractProcessingHandler public const OPERATING_SYSTEM = 0; public const SAPI = 4; + /** @var 0|1|3|4 */ protected int $messageType; protected bool $expandNewlines; /** - * @param int $messageType Says where the error should go. + * @param 0|1|3|4 $messageType Says where the error should go. * @param bool $expandNewlines If set to true, newlines in the message will be expanded to be take multiple log entries * * @throws \InvalidArgumentException If an unsupported message type is set @@ -84,7 +85,7 @@ class ErrorLogHandler extends AbstractProcessingHandler if ($lines === false) { $pcreErrorCode = preg_last_error(); - throw new \RuntimeException('Failed to preg_split formatted string: ' . $pcreErrorCode . ' / '. Utils::pcreLastErrorMessage($pcreErrorCode)); + throw new \RuntimeException('Failed to preg_split formatted string: ' . $pcreErrorCode . ' / '. preg_last_error_msg()); } foreach ($lines as $line) { error_log($line, $this->messageType); diff --git a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/FingersCrossedHandler.php b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/FingersCrossedHandler.php index 76318307a..1ce64e845 100644 --- a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/FingersCrossedHandler.php +++ b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/FingersCrossedHandler.php @@ -67,16 +67,16 @@ class FingersCrossedHandler extends Handler implements ProcessableHandlerInterfa * @phpstan-param (Closure(LogRecord|null, HandlerInterface): HandlerInterface)|HandlerInterface $handler * * @param Closure|HandlerInterface $handler Handler or factory Closure($record|null, $fingersCrossedHandler). - * @param int|string|Level|LogLevel::* $activationStrategy Strategy which determines when this handler takes action, or a level name/value at which the handler is activated + * @param int|string|Level|LogLevel::*|null $activationStrategy Strategy which determines when this handler takes action, or a level name/value at which the handler is activated * @param int $bufferSize How many entries should be buffered at most, beyond that the oldest items are removed from the buffer. * @param bool $bubble Whether the messages that are handled can bubble up the stack or not * @param bool $stopBuffering Whether the handler should stop buffering after being triggered (default true) * @param int|string|Level|LogLevel::*|null $passthruLevel Minimum level to always flush to handler on close, even if strategy not triggered * - * @phpstan-param value-of|value-of|Level|LogLevel::*|ActivationStrategyInterface $activationStrategy - * @phpstan-param value-of|value-of|Level|LogLevel::* $passthruLevel + * @phpstan-param value-of|value-of|Level|LogLevel::*|ActivationStrategyInterface|null $activationStrategy + * @phpstan-param value-of|value-of|Level|LogLevel::*|null $passthruLevel */ - public function __construct(Closure|HandlerInterface $handler, int|string|Level|ActivationStrategyInterface $activationStrategy = null, int $bufferSize = 0, bool $bubble = true, bool $stopBuffering = true, int|string|Level|null $passthruLevel = null) + public function __construct(Closure|HandlerInterface $handler, int|string|Level|ActivationStrategyInterface|null $activationStrategy = null, int $bufferSize = 0, bool $bubble = true, bool $stopBuffering = true, int|string|Level|null $passthruLevel = null) { if (null === $activationStrategy) { $activationStrategy = new ErrorLevelActivationStrategy(Level::Warning); diff --git a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/MandrillHandler.php b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/MandrillHandler.php index 64e16c9de..477ac345a 100644 --- a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/MandrillHandler.php +++ b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/MandrillHandler.php @@ -70,8 +70,8 @@ class MandrillHandler extends MailHandler $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'https://mandrillapp.com/api/1.0/messages/send-raw.json'); - curl_setopt($ch, CURLOPT_POST, 1); - curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($ch, CURLOPT_POST, true); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query([ 'key' => $this->apiKey, 'raw_message' => (string) $message, diff --git a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/OverflowHandler.php b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/OverflowHandler.php index b213a98dc..adc0eb1f0 100644 --- a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/OverflowHandler.php +++ b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/OverflowHandler.php @@ -97,7 +97,7 @@ class OverflowHandler extends AbstractHandler implements FormattableHandlerInter return false === $this->bubble; } - if ($this->thresholdMap[$level] == 0) { + if ($this->thresholdMap[$level] === 0) { // This current message is breaking the threshold. Flush the buffer and continue handling the current record foreach ($this->buffer[$level] ?? [] as $buffered) { $this->handler->handle($buffered); diff --git a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/PHPConsoleHandler.php b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/PHPConsoleHandler.php index 8aa78e4c4..b37266d59 100644 --- a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/PHPConsoleHandler.php +++ b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/PHPConsoleHandler.php @@ -111,7 +111,7 @@ class PHPConsoleHandler extends AbstractProcessingHandler 'dumperItemSizeLimit' => 5000, // int Maximum length of any string or dumped array item 'dumperDumpSizeLimit' => 500000, // int Maximum approximate size of dumped vars result formatted in JSON 'detectDumpTraceAndSource' => false, // bool Autodetect and append trace data to debug - 'dataStorage' => null, // \PhpConsole\Storage|null Fixes problem with custom $_SESSION handler(see http://goo.gl/Ne8juJ) + 'dataStorage' => null, // \PhpConsole\Storage|null Fixes problem with custom $_SESSION handler (see https://github.com/barbushin/php-console#troubleshooting-with-_session-handler-overridden-in-some-frameworks) ]; private Connector $connector; diff --git a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/ProcessHandler.php b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/ProcessHandler.php index 8b68e6463..96649aadc 100644 --- a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/ProcessHandler.php +++ b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/ProcessHandler.php @@ -43,6 +43,8 @@ class ProcessHandler extends AbstractProcessingHandler */ private array $pipes = []; + private float $timeout; + /** * @var array */ @@ -56,9 +58,10 @@ class ProcessHandler extends AbstractProcessingHandler * @param string $command Command for the process to start. Absolute paths are recommended, * especially if you do not use the $cwd parameter. * @param string|null $cwd "Current working directory" (CWD) for the process to be executed in. + * @param float $timeout The maximum timeout (in seconds) for the stream_select() function. * @throws \InvalidArgumentException */ - public function __construct(string $command, int|string|Level $level = Level::Debug, bool $bubble = true, ?string $cwd = null) + public function __construct(string $command, int|string|Level $level = Level::Debug, bool $bubble = true, ?string $cwd = null, float $timeout = 1.0) { if ($command === '') { throw new \InvalidArgumentException('The command argument must be a non-empty string.'); @@ -71,6 +74,7 @@ class ProcessHandler extends AbstractProcessingHandler $this->command = $command; $this->cwd = $cwd; + $this->timeout = $timeout; } /** @@ -146,7 +150,8 @@ class ProcessHandler extends AbstractProcessingHandler $empty = []; $errorPipes = [$this->pipes[2]]; - return stream_select($errorPipes, $empty, $empty, 1); + $seconds = (int) $this->timeout; + return stream_select($errorPipes, $empty, $empty, $seconds, (int) (($this->timeout - $seconds) * 1000000)); } /** diff --git a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/RedisHandler.php b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/RedisHandler.php index 66cb324f5..c40d97c61 100644 --- a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/RedisHandler.php +++ b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/RedisHandler.php @@ -72,7 +72,7 @@ class RedisHandler extends AbstractProcessingHandler $mode = \defined('Redis::MULTI') ? Redis::MULTI : 1; $this->redisClient->multi($mode) ->rPush($this->redisKey, $record->formatted) - ->lTrim($this->redisKey, -$this->capSize, -1) + ->ltrim($this->redisKey, -$this->capSize, -1) ->exec(); } else { $redisKey = $this->redisKey; diff --git a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/RollbarHandler.php b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/RollbarHandler.php index 1d124723b..6b9943265 100644 --- a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/RollbarHandler.php +++ b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/RollbarHandler.php @@ -99,7 +99,6 @@ class RollbarHandler extends AbstractProcessingHandler $toLog = $record->message; } - // @phpstan-ignore-next-line $this->rollbarLogger->log($context['level'], $toLog, $context); $this->hasRecords = true; diff --git a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php index 32a496b3b..f3e04557d 100644 --- a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php +++ b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php @@ -71,10 +71,6 @@ class RotatingFileHandler extends StreamHandler public function reset(): void { parent::reset(); - - if (true === $this->mustRotate) { - $this->rotate(); - } } /** @@ -100,17 +96,22 @@ class RotatingFileHandler extends StreamHandler */ protected function write(LogRecord $record): void { - // on the first record written, if the log is new, we should rotate (once per day) + // on the first record written, if the log is new, we rotate (once per day) after the log has been written so that the new file exists if (null === $this->mustRotate) { $this->mustRotate = null === $this->url || !file_exists($this->url); } + // if the next rotation is expired, then we rotate immediately if ($this->nextRotation <= $record->datetime) { $this->mustRotate = true; - $this->close(); + $this->close(); // triggers rotation } parent::write($record); + + if (true === $this->mustRotate) { + $this->close(); // triggers rotation + } } /** @@ -122,6 +123,8 @@ class RotatingFileHandler extends StreamHandler $this->url = $this->getTimedFilename(); $this->nextRotation = $this->getNextRotation(); + $this->mustRotate = false; + // skip GC of old logs if files are unlimited if (0 === $this->maxFiles) { return; @@ -154,8 +157,6 @@ class RotatingFileHandler extends StreamHandler restore_error_handler(); } } - - $this->mustRotate = false; } protected function getTimedFilename(): string diff --git a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/SendGridHandler.php b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/SendGridHandler.php index 0a6fe406b..9c3b8e6af 100644 --- a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/SendGridHandler.php +++ b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/SendGridHandler.php @@ -92,8 +92,8 @@ class SendGridHandler extends MailHandler $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'https://api.sendgrid.com/api/mail.send.json'); - curl_setopt($ch, CURLOPT_POST, 1); - curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($ch, CURLOPT_POST, true); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($message)); Curl\Util::execute($ch, 2); } diff --git a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/Slack/SlackRecord.php b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/Slack/SlackRecord.php index a10d6d6c8..0e46c2d2f 100644 --- a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/Slack/SlackRecord.php +++ b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/Slack/SlackRecord.php @@ -206,7 +206,7 @@ class SlackRecord */ public function stringify(array $fields): string { - /** @var array $normalized */ + /** @var array|bool|float|int|string|null> $normalized */ $normalized = $this->normalizerFormatter->normalizeValue($fields); $hasSecondDimension = \count(array_filter($normalized, 'is_array')) > 0; @@ -341,7 +341,7 @@ class SlackRecord */ private function generateAttachmentFields(array $data): array { - /** @var array $normalized */ + /** @var array|string> $normalized */ $normalized = $this->normalizerFormatter->normalizeValue($data); $fields = []; diff --git a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/SocketHandler.php b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/SocketHandler.php index 69a036f52..36d46bf9d 100644 --- a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/SocketHandler.php +++ b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/SocketHandler.php @@ -386,7 +386,7 @@ class SocketHandler extends AbstractProcessingHandler $sent = 0; $this->lastSentBytes = $sent; while ($this->isConnected() && $sent < $length) { - if (0 == $sent) { + if (0 === $sent) { $chunk = $this->fwrite($data); } else { $chunk = $this->fwrite(substr($data, $sent)); @@ -412,7 +412,7 @@ class SocketHandler extends AbstractProcessingHandler private function writingIsTimedOut(int $sent): bool { // convert to ms - if (0.0 == $this->writingTimeout) { + if (0.0 === $this->writingTimeout) { return false; } diff --git a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/StreamHandler.php b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/StreamHandler.php index 416909583..6153cc285 100644 --- a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/StreamHandler.php +++ b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/StreamHandler.php @@ -34,17 +34,20 @@ class StreamHandler extends AbstractProcessingHandler private string|null $errorMessage = null; protected int|null $filePermission; protected bool $useLocking; + protected string $fileOpenMode; /** @var true|null */ private bool|null $dirCreated = null; + private bool $retrying = false; /** * @param resource|string $stream If a missing path can't be created, an UnexpectedValueException will be thrown on first write * @param int|null $filePermission Optional file permissions (default (0644) are only for owner read/write) * @param bool $useLocking Try to lock log file before doing any writes + * @param string $fileOpenMode The fopen() mode used when opening a file, if $stream is a file path * * @throws \InvalidArgumentException If stream is not a resource or string */ - public function __construct($stream, int|string|Level $level = Level::Debug, bool $bubble = true, ?int $filePermission = null, bool $useLocking = false) + public function __construct($stream, int|string|Level $level = Level::Debug, bool $bubble = true, ?int $filePermission = null, bool $useLocking = false, string $fileOpenMode = 'a') { parent::__construct($level, $bubble); @@ -71,10 +74,25 @@ class StreamHandler extends AbstractProcessingHandler throw new \InvalidArgumentException('A stream must either be a resource or a string.'); } + $this->fileOpenMode = $fileOpenMode; $this->filePermission = $filePermission; $this->useLocking = $useLocking; } + /** + * @inheritDoc + */ + public function reset(): void + { + parent::reset(); + + // auto-close on reset to make sure we periodically close the file in long running processes + // as long as they correctly call reset() between jobs + if ($this->url !== null && $this->url !== 'php://memory') { + $this->close(); + } + } + /** * @inheritDoc */ @@ -122,12 +140,10 @@ class StreamHandler extends AbstractProcessingHandler } $this->createDir($url); $this->errorMessage = null; - set_error_handler(function (...$args) { - return $this->customErrorHandler(...$args); - }); + set_error_handler($this->customErrorHandler(...)); try { - $stream = fopen($url, 'a'); + $stream = fopen($url, $this->fileOpenMode); if ($this->filePermission !== null) { @chmod($url, $this->filePermission); } @@ -149,8 +165,28 @@ class StreamHandler extends AbstractProcessingHandler flock($stream, LOCK_EX); } - $this->streamWrite($stream, $record); + $this->errorMessage = null; + set_error_handler($this->customErrorHandler(...)); + try { + $this->streamWrite($stream, $record); + } finally { + restore_error_handler(); + } + if ($this->errorMessage !== null) { + $error = $this->errorMessage; + // close the resource if possible to reopen it, and retry the failed write + if (!$this->retrying && $this->url !== null && $this->url !== 'php://memory') { + $this->retrying = true; + $this->close(); + $this->write($record); + return; + } + + throw new \UnexpectedValueException('Writing to the log file failed: '.$error . Utils::getRecordMessageForException($record)); + } + + $this->retrying = false; if ($this->useLocking) { flock($stream, LOCK_UN); } @@ -167,7 +203,7 @@ class StreamHandler extends AbstractProcessingHandler private function customErrorHandler(int $code, string $msg): bool { - $this->errorMessage = preg_replace('{^(fopen|mkdir)\(.*?\): }', '', $msg); + $this->errorMessage = preg_replace('{^(fopen|mkdir|fwrite)\(.*?\): }', '', $msg); return true; } diff --git a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/SyslogUdpHandler.php b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/SyslogUdpHandler.php index e8db4cdeb..b5e467417 100644 --- a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/SyslogUdpHandler.php +++ b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/SyslogUdpHandler.php @@ -96,7 +96,7 @@ class SyslogUdpHandler extends AbstractSyslogHandler if (false === $lines) { $pcreErrorCode = preg_last_error(); - throw new \RuntimeException('Could not preg_split: ' . $pcreErrorCode . ' / ' . Utils::pcreLastErrorMessage($pcreErrorCode)); + throw new \RuntimeException('Could not preg_split: ' . $pcreErrorCode . ' / ' . preg_last_error_msg()); } return $lines; diff --git a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/TelegramBotHandler.php b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/TelegramBotHandler.php index e4f69a9ff..dcca5d676 100644 --- a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/TelegramBotHandler.php +++ b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/TelegramBotHandler.php @@ -116,7 +116,7 @@ class TelegramBotHandler extends AbstractProcessingHandler ?bool $disableNotification = null, bool $splitLongMessages = false, bool $delayBetweenMessages = false, - int $topic = null + ?int $topic = null ) { if (!\extension_loaded('curl')) { throw new MissingExtensionException('The curl extension is needed to use the TelegramBotHandler'); @@ -196,7 +196,7 @@ class TelegramBotHandler extends AbstractProcessingHandler /** * @return $this */ - public function setTopic(int $topic = null): self + public function setTopic(?int $topic = null): self { $this->topic = $topic; diff --git a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/TestHandler.php b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/TestHandler.php index a98389b95..eb5fb445c 100644 --- a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/TestHandler.php +++ b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Handler/TestHandler.php @@ -23,14 +23,14 @@ use Monolog\LogRecord; * * @author Jordi Boggiano * - * @method bool hasEmergency(string|array $recordAssertions) - * @method bool hasAlert(string|array $recordAssertions) - * @method bool hasCritical(string|array $recordAssertions) - * @method bool hasError(string|array $recordAssertions) - * @method bool hasWarning(string|array $recordAssertions) - * @method bool hasNotice(string|array $recordAssertions) - * @method bool hasInfo(string|array $recordAssertions) - * @method bool hasDebug(string|array $recordAssertions) + * @method bool hasEmergency(array{message: string, context?: mixed[]}|string $recordAssertions) + * @method bool hasAlert(array{message: string, context?: mixed[]}|string $recordAssertions) + * @method bool hasCritical(array{message: string, context?: mixed[]}|string $recordAssertions) + * @method bool hasError(array{message: string, context?: mixed[]}|string $recordAssertions) + * @method bool hasWarning(array{message: string, context?: mixed[]}|string $recordAssertions) + * @method bool hasNotice(array{message: string, context?: mixed[]}|string $recordAssertions) + * @method bool hasInfo(array{message: string, context?: mixed[]}|string $recordAssertions) + * @method bool hasDebug(array{message: string, context?: mixed[]}|string $recordAssertions) * * @method bool hasEmergencyRecords() * @method bool hasAlertRecords() @@ -179,7 +179,7 @@ class TestHandler extends AbstractProcessingHandler */ public function __call(string $method, array $args): bool { - if (preg_match('/(.*)(Debug|Info|Notice|Warning|Error|Critical|Alert|Emergency)(.*)/', $method, $matches) > 0) { + if ((bool) preg_match('/(.*)(Debug|Info|Notice|Warning|Error|Critical|Alert|Emergency)(.*)/', $method, $matches)) { $genericMethod = $matches[1] . ('Records' !== $matches[3] ? 'Record' : '') . $matches[3]; $level = \constant(Level::class.'::' . $matches[2]); $callback = [$this, $genericMethod]; diff --git a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Logger.php b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Logger.php index edc62f3a8..f57fe332e 100644 --- a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Logger.php +++ b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Logger.php @@ -166,7 +166,7 @@ class Logger implements LoggerInterface, ResettableInterface /** * @param string $name The logging channel, a simple descriptive name that is attached to all log records - * @param HandlerInterface[] $handlers Optional stack of handlers, the first one in the array is called first, etc. + * @param list $handlers Optional stack of handlers, the first one in the array is called first, etc. * @param callable[] $processors Optional array of processors * @param DateTimeZone|null $timezone Optional timezone, if not provided date_default_timezone_get() will be used * diff --git a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Processor/IntrospectionProcessor.php b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Processor/IntrospectionProcessor.php index efc2f50aa..b942dc055 100644 --- a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Processor/IntrospectionProcessor.php +++ b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Processor/IntrospectionProcessor.php @@ -29,18 +29,22 @@ use Monolog\LogRecord; */ class IntrospectionProcessor implements ProcessorInterface { - private Level $level; + protected Level $level; /** @var string[] */ - private array $skipClassesPartials; + protected array $skipClassesPartials; - private int $skipStackFramesCount; + protected int $skipStackFramesCount; - private const SKIP_FUNCTIONS = [ + protected const SKIP_FUNCTIONS = [ 'call_user_func', 'call_user_func_array', ]; + protected const SKIP_CLASSES = [ + 'Monolog\\', + ]; + /** * @param string|int|Level $level The minimum logging level at which this Processor will be triggered * @param string[] $skipClassesPartials @@ -50,7 +54,7 @@ class IntrospectionProcessor implements ProcessorInterface public function __construct(int|string|Level $level = Level::Debug, array $skipClassesPartials = [], int $skipStackFramesCount = 0) { $this->level = Logger::toMonologLevel($level); - $this->skipClassesPartials = array_merge(['Monolog\\'], $skipClassesPartials); + $this->skipClassesPartials = array_merge(static::SKIP_CLASSES, $skipClassesPartials); $this->skipStackFramesCount = $skipStackFramesCount; } diff --git a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Processor/MercurialProcessor.php b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Processor/MercurialProcessor.php index a48a78544..3076a3d8c 100644 --- a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Processor/MercurialProcessor.php +++ b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Processor/MercurialProcessor.php @@ -62,13 +62,18 @@ class MercurialProcessor implements ProcessorInterface } $result = explode(' ', trim((string) shell_exec('hg id -nb'))); - if (\count($result) >= 3) { return self::$cache = [ 'branch' => $result[1], 'revision' => $result[2], ]; } + if (\count($result) === 2) { + return self::$cache = [ + 'branch' => $result[1], + 'revision' => $result[0], + ]; + } return self::$cache = []; } diff --git a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Test/TestCase.php b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Test/TestCase.php index 29ec7c96e..a2ff3f7ad 100644 --- a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Test/TestCase.php +++ b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Test/TestCase.php @@ -17,6 +17,7 @@ use Monolog\LogRecord; use Monolog\DateTimeImmutable; use Monolog\Formatter\FormatterInterface; use Psr\Log\LogLevel; +use ReflectionProperty; /** * Lets you easily generate log records and a dummy formatter for testing purposes @@ -27,15 +28,6 @@ use Psr\Log\LogLevel; */ class TestCase extends \PHPUnit\Framework\TestCase { - public function tearDown(): void - { - parent::tearDown(); - - if (isset($this->handler)) { - unset($this->handler); - } - } - /** * @param array $context * @param array $extra diff --git a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Utils.php b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Utils.php index 79ea96ca3..153801553 100644 --- a/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Utils.php +++ b/lam/lib/3rdParty/composer/monolog/monolog/src/Monolog/Utils.php @@ -140,25 +140,6 @@ final class Utils return $json; } - /** - * @internal - */ - public static function pcreLastErrorMessage(int $code): string - { - if (PHP_VERSION_ID >= 80000) { - return preg_last_error_msg(); - } - - $constants = (get_defined_constants(true))['pcre']; - $constants = array_filter($constants, function ($key) { - return substr($key, -6) == '_ERROR'; - }, ARRAY_FILTER_USE_KEY); - - $constants = array_flip($constants); - - return $constants[$code] ?? 'UNDEFINED_ERROR'; - } - /** * Throws an exception according to a given code with a customized message * @@ -200,14 +181,16 @@ final class Utils $data = preg_replace_callback( '/[\x80-\xFF]+/', function (array $m): string { - return \function_exists('mb_convert_encoding') ? mb_convert_encoding($m[0], 'UTF-8', 'ISO-8859-1') : utf8_encode($m[0]); + return \function_exists('mb_convert_encoding') + ? mb_convert_encoding($m[0], 'UTF-8', 'ISO-8859-1') + : (\function_exists('utf8_encode') ? utf8_encode($m[0]) : ''); }, $data ); if (!\is_string($data)) { $pcreErrorCode = preg_last_error(); - throw new \RuntimeException('Failed to preg_replace_callback: ' . $pcreErrorCode . ' / ' . self::pcreLastErrorMessage($pcreErrorCode)); + throw new \RuntimeException('Failed to preg_replace_callback: ' . $pcreErrorCode . ' / ' . preg_last_error_msg()); } $data = str_replace( ['¤', '¦', '¨', '´', '¸', '¼', '½', '¾'], @@ -234,12 +217,12 @@ final class Utils return (int) $val; } - if (preg_match('/^\s*(?\d+)(?:\.\d+)?\s*(?[gmk]?)\s*$/i', $val, $match) !== 1) { + if (!(bool) preg_match('/^\s*(?\d+)(?:\.\d+)?\s*(?[gmk]?)\s*$/i', $val, $match)) { return false; } $val = (int) $match['val']; - switch (strtolower($match['unit'] ?? '')) { + switch (strtolower($match['unit'])) { case 'g': $val *= 1024; // no break diff --git a/lam/lib/3rdParty/composer/php-http/discovery/.php-cs-fixer.php b/lam/lib/3rdParty/composer/php-http/discovery/.php-cs-fixer.php index 83809c25d..4256eee8b 100644 --- a/lam/lib/3rdParty/composer/php-http/discovery/.php-cs-fixer.php +++ b/lam/lib/3rdParty/composer/php-http/discovery/.php-cs-fixer.php @@ -9,6 +9,7 @@ $config = (new PhpCsFixer\Config()) ->setRiskyAllowed(true) ->setRules([ '@Symfony' => true, + 'trailing_comma_in_multiline' => false, // for methods this is incompatible with PHP 7 ]) ->setFinder($finder) ; diff --git a/lam/lib/3rdParty/composer/php-http/discovery/CHANGELOG.md b/lam/lib/3rdParty/composer/php-http/discovery/CHANGELOG.md index 03f718c0f..a74e5cdd0 100644 --- a/lam/lib/3rdParty/composer/php-http/discovery/CHANGELOG.md +++ b/lam/lib/3rdParty/composer/php-http/discovery/CHANGELOG.md @@ -1,5 +1,11 @@ # Change Log +## 1.20.0 - 2024-10-02 + +- [#268](https://github.com/php-http/discovery/pull/268) - Do not attempt to update lock file when it is not existing. +- [#267](https://github.com/php-http/discovery/pull/267) - Test with PHP 8.3 and 8.4 +- [#266](https://github.com/php-http/discovery/pull/266) - If wrapped client implements factories, use those instead of discovering new factories. + ## 1.19.4 - 2024-03-29 - [#264](https://github.com/php-http/discovery/pull/264) - Do not report a general conflict with `sebastian/comparator` but make sure we install the correct version for our tests. diff --git a/lam/lib/3rdParty/composer/php-http/discovery/src/Composer/Plugin.php b/lam/lib/3rdParty/composer/php-http/discovery/src/Composer/Plugin.php index 32ef401e3..9339f8b59 100644 --- a/lam/lib/3rdParty/composer/php-http/discovery/src/Composer/Plugin.php +++ b/lam/lib/3rdParty/composer/php-http/discovery/src/Composer/Plugin.php @@ -452,12 +452,21 @@ EOPHP private function updateComposerLock(Composer $composer, IOInterface $io) { + if (false === $composer->getConfig()->get('lock')) { + return; + } + $lock = substr(Factory::getComposerFile(), 0, -4).'lock'; $composerJson = file_get_contents(Factory::getComposerFile()); $lockFile = new JsonFile($lock, null, $io); $locker = ClassDiscovery::safeClassExists(RepositorySet::class) ? new Locker($io, $lockFile, $composer->getInstallationManager(), $composerJson) : new Locker($io, $lockFile, $composer->getRepositoryManager(), $composer->getInstallationManager(), $composerJson); + + if (!$locker->isLocked()) { + return; + } + $lockData = $locker->getLockData(); $lockData['content-hash'] = Locker::getContentHash($composerJson); $lockFile->write($lockData); diff --git a/lam/lib/3rdParty/composer/php-http/discovery/src/Psr18Client.php b/lam/lib/3rdParty/composer/php-http/discovery/src/Psr18Client.php index 26b6aebbf..48df78363 100644 --- a/lam/lib/3rdParty/composer/php-http/discovery/src/Psr18Client.php +++ b/lam/lib/3rdParty/composer/php-http/discovery/src/Psr18Client.php @@ -33,6 +33,13 @@ class Psr18Client extends Psr17Factory implements ClientInterface ?UploadedFileFactoryInterface $uploadedFileFactory = null, ?UriFactoryInterface $uriFactory = null ) { + $requestFactory ?? $requestFactory = $client instanceof RequestFactoryInterface ? $client : null; + $responseFactory ?? $responseFactory = $client instanceof ResponseFactoryInterface ? $client : null; + $serverRequestFactory ?? $serverRequestFactory = $client instanceof ServerRequestFactoryInterface ? $client : null; + $streamFactory ?? $streamFactory = $client instanceof StreamFactoryInterface ? $client : null; + $uploadedFileFactory ?? $uploadedFileFactory = $client instanceof UploadedFileFactoryInterface ? $client : null; + $uriFactory ?? $uriFactory = $client instanceof UriFactoryInterface ? $client : null; + parent::__construct($requestFactory, $responseFactory, $serverRequestFactory, $streamFactory, $uploadedFileFactory, $uriFactory); $this->client = $client ?? Psr18ClientDiscovery::find(); diff --git a/lam/lib/3rdParty/composer/phpmailer/phpmailer/README.md b/lam/lib/3rdParty/composer/phpmailer/phpmailer/README.md index e3e4ecff3..07fe8c8ab 100644 --- a/lam/lib/3rdParty/composer/phpmailer/phpmailer/README.md +++ b/lam/lib/3rdParty/composer/phpmailer/phpmailer/README.md @@ -41,13 +41,13 @@ you should look at before rolling your own. Try [SwiftMailer](https://swiftmaile , [Laminas/Mail](https://docs.laminas.dev/laminas-mail/), [ZetaComponents](https://github.com/zetacomponents/Mail), etc. ## License -This software is distributed under the [LGPL 2.1](http://www.gnu.org/licenses/lgpl-2.1.html) license, along with the [GPL Cooperation Commitment](https://gplcc.github.io/gplcc/). Please read [LICENSE](https://github.com/PHPMailer/PHPMailer/blob/master/LICENSE) for information on the software availability and distribution. +This software is distributed under the [LGPL 2.1](https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html) license, along with the [GPL Cooperation Commitment](https://gplcc.github.io/gplcc/). Please read [LICENSE](https://github.com/PHPMailer/PHPMailer/blob/master/LICENSE) for information on the software availability and distribution. ## Installation & loading PHPMailer is available on [Packagist](https://packagist.org/packages/phpmailer/phpmailer) (using semantic versioning), and installation via [Composer](https://getcomposer.org) is the recommended way to install PHPMailer. Just add this line to your `composer.json` file: ```json -"phpmailer/phpmailer": "^6.9.1" +"phpmailer/phpmailer": "^6.9.2" ``` or run @@ -144,7 +144,7 @@ If you are re-using the instance (e.g. when sending to a mailing list), you may That's it. You should now be ready to use PHPMailer! ## Localization -PHPMailer defaults to English, but in the [language](https://github.com/PHPMailer/PHPMailer/tree/master/language/) folder, you'll find many translations for PHPMailer error messages that you may encounter. Their filenames contain [ISO 639-1](http://en.wikipedia.org/wiki/ISO_639-1) language code for the translations, for example `fr` for French. To specify a language, you need to tell PHPMailer which one to use, like this: +PHPMailer defaults to English, but in the [language](https://github.com/PHPMailer/PHPMailer/tree/master/language/) folder, you'll find many translations for PHPMailer error messages that you may encounter. Their filenames contain [ISO 639-1](https://en.wikipedia.org/wiki/ISO_639-1) language code for the translations, for example `fr` for French. To specify a language, you need to tell PHPMailer which one to use, like this: ```php //To load the French version @@ -162,9 +162,9 @@ To reduce PHPMailer's deployed code footprint, examples are not included if you Complete generated API documentation is [available online](https://phpmailer.github.io/PHPMailer/). -You can generate complete API-level documentation by running `phpdoc` in the top-level folder, and documentation will appear in the `docs` folder, though you'll need to have [PHPDocumentor](http://www.phpdoc.org) installed. You may find [the unit tests](https://github.com/PHPMailer/PHPMailer/blob/master/test/PHPMailerTest.php) a good reference for how to do various operations such as encryption. +You can generate complete API-level documentation by running `phpdoc` in the top-level folder, and documentation will appear in the `docs` folder, though you'll need to have [PHPDocumentor](https://www.phpdoc.org) installed. You may find [the unit tests](https://github.com/PHPMailer/PHPMailer/blob/master/test/PHPMailer/PHPMailerTest.php) a good reference for how to do various operations such as encryption. -If the documentation doesn't cover what you need, search the [many questions on Stack Overflow](http://stackoverflow.com/questions/tagged/phpmailer), and before you ask a question about "SMTP Error: Could not connect to SMTP host.", [read the troubleshooting guide](https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting). +If the documentation doesn't cover what you need, search the [many questions on Stack Overflow](https://stackoverflow.com/questions/tagged/phpmailer), and before you ask a question about "SMTP Error: Could not connect to SMTP host.", [read the troubleshooting guide](https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting). ## Tests [PHPMailer tests](https://github.com/PHPMailer/PHPMailer/tree/master/test/) use PHPUnit 9, with [a polyfill](https://github.com/Yoast/PHPUnit-Polyfills) to let 9-style tests run on older PHPUnit and PHP versions. @@ -213,7 +213,7 @@ use. [Learn more.](https://tidelift.com/subscription/pkg/packagist-phpmailer-php See [changelog](changelog.md). ## History -- PHPMailer was originally written in 2001 by Brent R. Matzelle as a [SourceForge project](http://sourceforge.net/projects/phpmailer/). +- PHPMailer was originally written in 2001 by Brent R. Matzelle as a [SourceForge project](https://sourceforge.net/projects/phpmailer/). - [Marcus Bointon](https://github.com/Synchro) (`coolbru` on SF) and Andy Prevost (`codeworxtech`) took over the project in 2004. - Became an Apache incubator project on Google Code in 2010, managed by Jim Jagielski. - Marcus created [his fork on GitHub](https://github.com/Synchro/PHPMailer) in 2008. diff --git a/lam/lib/3rdParty/composer/phpmailer/phpmailer/SECURITY.md b/lam/lib/3rdParty/composer/phpmailer/phpmailer/SECURITY.md index 035a87f7b..4f34026df 100644 --- a/lam/lib/3rdParty/composer/phpmailer/phpmailer/SECURITY.md +++ b/lam/lib/3rdParty/composer/phpmailer/phpmailer/SECURITY.md @@ -13,13 +13,13 @@ PHPMailer versions 6.1.5 and earlier contain an output escaping bug that occurs PHPMailer versions prior to 6.0.6 and 5.2.27 are vulnerable to an object injection attack by passing `phar://` paths into `addAttachment()` and other functions that may receive unfiltered local paths, possibly leading to RCE. Recorded as [CVE-2018-19296](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2018-19296). See [this article](https://knasmueller.net/5-answers-about-php-phar-exploitation) for more info on this type of vulnerability. Mitigated by blocking the use of paths containing URL-protocol style prefixes such as `phar://`. Reported by Sehun Oh of cyberone.kr. -PHPMailer versions prior to 5.2.24 (released July 26th 2017) have an XSS vulnerability in one of the code examples, [CVE-2017-11503](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2017-11503). The `code_generator.phps` example did not filter user input prior to output. This file is distributed with a `.phps` extension, so it it not normally executable unless it is explicitly renamed, and the file is not included when PHPMailer is loaded through composer, so it is safe by default. There was also an undisclosed potential XSS vulnerability in the default exception handler (unused by default). Patches for both issues kindly provided by Patrick Monnerat of the Fedora Project. +PHPMailer versions prior to 5.2.24 (released July 26th 2017) have an XSS vulnerability in one of the code examples, [CVE-2017-11503](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2017-11503). The `code_generator.phps` example did not filter user input prior to output. This file is distributed with a `.phps` extension, so it is not normally executable unless it is explicitly renamed, and the file is not included when PHPMailer is loaded through composer, so it is safe by default. There was also an undisclosed potential XSS vulnerability in the default exception handler (unused by default). Patches for both issues kindly provided by Patrick Monnerat of the Fedora Project. PHPMailer versions prior to 5.2.22 (released January 9th 2017) have a local file disclosure vulnerability, [CVE-2017-5223](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2017-5223). If content passed into `msgHTML()` is sourced from unfiltered user input, relative paths can map to absolute local file paths and added as attachments. Also note that `addAttachment` (just like `file_get_contents`, `passthru`, `unlink`, etc) should not be passed user-sourced params either! Reported by Yongxiang Li of Asiasecurity. PHPMailer versions prior to 5.2.20 (released December 28th 2016) are vulnerable to [CVE-2016-10045](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2016-10045) a remote code execution vulnerability, responsibly reported by [Dawid Golunski](https://legalhackers.com/advisories/PHPMailer-Exploit-Remote-Code-Exec-CVE-2016-10045-Vuln-Patch-Bypass.html), and patched by Paul Buonopane (@Zenexer). -PHPMailer versions prior to 5.2.18 (released December 2016) are vulnerable to [CVE-2016-10033](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2016-10033) a remote code execution vulnerability, responsibly reported by [Dawid Golunski](http://legalhackers.com/advisories/PHPMailer-Exploit-Remote-Code-Exec-CVE-2016-10033-Vuln.html). +PHPMailer versions prior to 5.2.18 (released December 2016) are vulnerable to [CVE-2016-10033](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2016-10033) a remote code execution vulnerability, responsibly reported by [Dawid Golunski](https://legalhackers.com/advisories/PHPMailer-Exploit-Remote-Code-Exec-CVE-2016-10033-Vuln.html). PHPMailer versions prior to 5.2.14 (released November 2015) are vulnerable to [CVE-2015-8476](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2015-8476) an SMTP CRLF injection bug permitting arbitrary message sending. diff --git a/lam/lib/3rdParty/composer/phpmailer/phpmailer/VERSION b/lam/lib/3rdParty/composer/phpmailer/phpmailer/VERSION index dc3829f5e..5f54f91ea 100644 --- a/lam/lib/3rdParty/composer/phpmailer/phpmailer/VERSION +++ b/lam/lib/3rdParty/composer/phpmailer/phpmailer/VERSION @@ -1 +1 @@ -6.9.1 +6.9.3 diff --git a/lam/lib/3rdParty/composer/phpmailer/phpmailer/composer.json b/lam/lib/3rdParty/composer/phpmailer/phpmailer/composer.json index fa170a0bb..7b008b7c5 100644 --- a/lam/lib/3rdParty/composer/phpmailer/phpmailer/composer.json +++ b/lam/lib/3rdParty/composer/phpmailer/phpmailer/composer.json @@ -28,7 +28,8 @@ "config": { "allow-plugins": { "dealerdirect/phpcodesniffer-composer-installer": true - } + }, + "lock": false }, "require": { "php": ">=5.5.0", diff --git a/lam/lib/3rdParty/composer/phpmailer/phpmailer/get_oauth_token.php b/lam/lib/3rdParty/composer/phpmailer/phpmailer/get_oauth_token.php index cda0445c6..0e54a00b6 100644 --- a/lam/lib/3rdParty/composer/phpmailer/phpmailer/get_oauth_token.php +++ b/lam/lib/3rdParty/composer/phpmailer/phpmailer/get_oauth_token.php @@ -12,7 +12,7 @@ * @copyright 2012 - 2020 Marcus Bointon * @copyright 2010 - 2012 Jim Jagielski * @copyright 2004 - 2009 Andy Prevost - * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License + * @license https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html GNU Lesser General Public License * @note This program is distributed in the hope that it will be useful - WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. @@ -36,7 +36,7 @@ namespace PHPMailer\PHPMailer; * Aliases for League Provider Classes * Make sure you have added these to your composer.json and run `composer install` * Plenty to choose from here: - * @see http://oauth2-client.thephpleague.com/providers/thirdparty/ + * @see https://oauth2-client.thephpleague.com/providers/thirdparty/ */ //@see https://github.com/thephpleague/oauth2-google use League\OAuth2\Client\Provider\Google; @@ -178,5 +178,5 @@ if (!isset($_GET['code'])) { ); //Use this to interact with an API on the users behalf //Use this to get a new access token if the old one expires - echo 'Refresh Token: ', $token->getRefreshToken(); + echo 'Refresh Token: ', htmlspecialchars($token->getRefreshToken()); } diff --git a/lam/lib/3rdParty/composer/phpmailer/phpmailer/language/phpmailer.lang-es.php b/lam/lib/3rdParty/composer/phpmailer/phpmailer/language/phpmailer.lang-es.php index 699204187..4e74bfb7b 100644 --- a/lam/lib/3rdParty/composer/phpmailer/phpmailer/language/phpmailer.lang-es.php +++ b/lam/lib/3rdParty/composer/phpmailer/phpmailer/language/phpmailer.lang-es.php @@ -5,27 +5,32 @@ * @package PHPMailer * @author Matt Sturdy * @author Crystopher Glodzienski Cardoso + * @author Daniel Cruz */ $PHPMAILER_LANG['authenticate'] = 'Error SMTP: Imposible autentificar.'; +$PHPMAILER_LANG['buggy_php'] = 'Tu versión de PHP está afectada por un bug que puede resultar en mensajes corruptos. Para arreglarlo, cambia a enviar usando SMTP, deshabilita la opción mail.add_x_header en tu php.ini, cambia a MacOS o Linux, o actualiza tu PHP a la versión 7.0.17+ o 7.1.3+.'; $PHPMAILER_LANG['connect_host'] = 'Error SMTP: Imposible conectar al servidor SMTP.'; $PHPMAILER_LANG['data_not_accepted'] = 'Error SMTP: Datos no aceptados.'; $PHPMAILER_LANG['empty_message'] = 'El cuerpo del mensaje está vacío.'; $PHPMAILER_LANG['encoding'] = 'Codificación desconocida: '; $PHPMAILER_LANG['execute'] = 'Imposible ejecutar: '; +$PHPMAILER_LANG['extension_missing'] = 'Extensión faltante: '; $PHPMAILER_LANG['file_access'] = 'Imposible acceder al archivo: '; $PHPMAILER_LANG['file_open'] = 'Error de Archivo: Imposible abrir el archivo: '; $PHPMAILER_LANG['from_failed'] = 'La(s) siguiente(s) direcciones de remitente fallaron: '; $PHPMAILER_LANG['instantiate'] = 'Imposible crear una instancia de la función Mail.'; $PHPMAILER_LANG['invalid_address'] = 'Imposible enviar: dirección de email inválido: '; +$PHPMAILER_LANG['invalid_header'] = 'Nombre o valor de encabezado no válido'; +$PHPMAILER_LANG['invalid_hostentry'] = 'Hostentry inválido: '; +$PHPMAILER_LANG['invalid_host'] = 'Host inválido: '; $PHPMAILER_LANG['mailer_not_supported'] = ' mailer no está soportado.'; $PHPMAILER_LANG['provide_address'] = 'Debe proporcionar al menos una dirección de email de destino.'; $PHPMAILER_LANG['recipients_failed'] = 'Error SMTP: Los siguientes destinos fallaron: '; $PHPMAILER_LANG['signing'] = 'Error al firmar: '; -$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() falló.'; -$PHPMAILER_LANG['smtp_error'] = 'Error del servidor SMTP: '; -$PHPMAILER_LANG['variable_set'] = 'No se pudo configurar la variable: '; -$PHPMAILER_LANG['extension_missing'] = 'Extensión faltante: '; $PHPMAILER_LANG['smtp_code'] = 'Código del servidor SMTP: '; $PHPMAILER_LANG['smtp_code_ex'] = 'Información adicional del servidor SMTP: '; -$PHPMAILER_LANG['invalid_header'] = 'Nombre o valor de encabezado no válido'; +$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() falló.'; +$PHPMAILER_LANG['smtp_detail'] = 'Detalle: '; +$PHPMAILER_LANG['smtp_error'] = 'Error del servidor SMTP: '; +$PHPMAILER_LANG['variable_set'] = 'No se pudo configurar la variable: '; diff --git a/lam/lib/3rdParty/composer/phpmailer/phpmailer/language/phpmailer.lang-fr.php b/lam/lib/3rdParty/composer/phpmailer/phpmailer/language/phpmailer.lang-fr.php index 0d367fcf8..a6d582d83 100644 --- a/lam/lib/3rdParty/composer/phpmailer/phpmailer/language/phpmailer.lang-fr.php +++ b/lam/lib/3rdParty/composer/phpmailer/phpmailer/language/phpmailer.lang-fr.php @@ -6,7 +6,6 @@ * Some French punctuation requires a thin non-breaking space (U+202F) character before it, * for example before a colon or exclamation mark. * There is one of these characters between these quotes: " " - * @see http://unicode.org/udhr/n/notes_fra.html */ $PHPMAILER_LANG['authenticate'] = 'Erreur SMTP : échec de l’authentification.'; @@ -31,7 +30,7 @@ $PHPMAILER_LANG['recipients_failed'] = 'Erreur SMTP : les destinataires s $PHPMAILER_LANG['signing'] = 'Erreur de signature : '; $PHPMAILER_LANG['smtp_code'] = 'Code SMTP : '; $PHPMAILER_LANG['smtp_code_ex'] = 'Informations supplémentaires SMTP : '; -$PHPMAILER_LANG['smtp_connect_failed'] = 'La fonction SMTP connect() a échouée.'; +$PHPMAILER_LANG['smtp_connect_failed'] = 'La fonction SMTP connect() a échoué.'; $PHPMAILER_LANG['smtp_detail'] = 'Détails : '; $PHPMAILER_LANG['smtp_error'] = 'Erreur du serveur SMTP : '; $PHPMAILER_LANG['variable_set'] = 'Impossible d’initialiser ou de réinitialiser une variable : '; diff --git a/lam/lib/3rdParty/composer/phpmailer/phpmailer/language/phpmailer.lang-ja.php b/lam/lib/3rdParty/composer/phpmailer/phpmailer/language/phpmailer.lang-ja.php index c76f5264c..d01869cec 100644 --- a/lam/lib/3rdParty/composer/phpmailer/phpmailer/language/phpmailer.lang-ja.php +++ b/lam/lib/3rdParty/composer/phpmailer/phpmailer/language/phpmailer.lang-ja.php @@ -3,27 +3,35 @@ /** * Japanese PHPMailer language file: refer to English translation for definitive list * @package PHPMailer - * @author Mitsuhiro Yoshida + * @author Mitsuhiro Yoshida * @author Yoshi Sakai * @author Arisophy + * @author ARAKI Musashi */ $PHPMAILER_LANG['authenticate'] = 'SMTPエラー: 認証できませんでした。'; +$PHPMAILER_LANG['buggy_php'] = 'ご利用のバージョンのPHPには不具合があり、メッセージが破損するおそれがあります。問題の解決は以下のいずれかを行ってください。SMTPでの送信に切り替える。php.iniのmail.add_x_headerをoffにする。MacOSまたはLinuxに切り替える。PHPバージョン7.0.17以降または7.1.3以降にアップグレードする。'; $PHPMAILER_LANG['connect_host'] = 'SMTPエラー: SMTPホストに接続できませんでした。'; $PHPMAILER_LANG['data_not_accepted'] = 'SMTPエラー: データが受け付けられませんでした。'; $PHPMAILER_LANG['empty_message'] = 'メール本文が空です。'; $PHPMAILER_LANG['encoding'] = '不明なエンコーディング: '; $PHPMAILER_LANG['execute'] = '実行できませんでした: '; +$PHPMAILER_LANG['extension_missing'] = '拡張機能が見つかりません: '; $PHPMAILER_LANG['file_access'] = 'ファイルにアクセスできません: '; $PHPMAILER_LANG['file_open'] = 'ファイルエラー: ファイルを開けません: '; $PHPMAILER_LANG['from_failed'] = 'Fromアドレスを登録する際にエラーが発生しました: '; $PHPMAILER_LANG['instantiate'] = 'メール関数が正常に動作しませんでした。'; $PHPMAILER_LANG['invalid_address'] = '不正なメールアドレス: '; -$PHPMAILER_LANG['provide_address'] = '少なくとも1つメールアドレスを 指定する必要があります。'; +$PHPMAILER_LANG['invalid_header'] = '不正なヘッダー名またはその内容'; +$PHPMAILER_LANG['invalid_hostentry'] = '不正なホストエントリー: '; +$PHPMAILER_LANG['invalid_host'] = '不正なホスト: '; $PHPMAILER_LANG['mailer_not_supported'] = ' メーラーがサポートされていません。'; +$PHPMAILER_LANG['provide_address'] = '少なくとも1つメールアドレスを 指定する必要があります。'; $PHPMAILER_LANG['recipients_failed'] = 'SMTPエラー: 次の受信者アドレスに 間違いがあります: '; $PHPMAILER_LANG['signing'] = '署名エラー: '; +$PHPMAILER_LANG['smtp_code'] = 'SMTPコード: '; +$PHPMAILER_LANG['smtp_code_ex'] = 'SMTP追加情報: '; $PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP接続に失敗しました。'; +$PHPMAILER_LANG['smtp_detail'] = '詳細: '; $PHPMAILER_LANG['smtp_error'] = 'SMTPサーバーエラー: '; $PHPMAILER_LANG['variable_set'] = '変数が存在しません: '; -$PHPMAILER_LANG['extension_missing'] = '拡張機能が見つかりません: '; diff --git a/lam/lib/3rdParty/composer/phpmailer/phpmailer/language/phpmailer.lang-ku.php b/lam/lib/3rdParty/composer/phpmailer/phpmailer/language/phpmailer.lang-ku.php new file mode 100644 index 000000000..cf3bda69f --- /dev/null +++ b/lam/lib/3rdParty/composer/phpmailer/phpmailer/language/phpmailer.lang-ku.php @@ -0,0 +1,27 @@ + + */ + +$PHPMAILER_LANG['authenticate'] = 'هەڵەی SMTP : نەتوانرا کۆدەکە پشتڕاست بکرێتەوە '; +$PHPMAILER_LANG['connect_host'] = 'هەڵەی SMTP: نەتوانرا پەیوەندی بە سێرڤەرەوە بکات SMTP.'; +$PHPMAILER_LANG['data_not_accepted'] = 'هەڵەی SMTP: ئەو زانیاریانە قبوڵ نەکرا.'; +$PHPMAILER_LANG['empty_message'] = 'پەیامەکە بەتاڵە'; +$PHPMAILER_LANG['encoding'] = 'کۆدکردنی نەزانراو : '; +$PHPMAILER_LANG['execute'] = 'ناتوانرێت جێبەجێ بکرێت: '; +$PHPMAILER_LANG['file_access'] = 'ناتوانرێت دەستت بگات بە فایلەکە: '; +$PHPMAILER_LANG['file_open'] = 'هەڵەی پەڕگە(فایل): ناتوانرێت بکرێتەوە: '; +$PHPMAILER_LANG['from_failed'] = 'هەڵە لە ئاستی ناونیشانی نێرەر: '; +$PHPMAILER_LANG['instantiate'] = 'ناتوانرێت خزمەتگوزاری پۆستە پێشکەش بکرێت.'; +$PHPMAILER_LANG['invalid_address'] = 'نەتوانرا بنێردرێت ، چونکە ناونیشانی ئیمەیڵەکە نادروستە: '; +$PHPMAILER_LANG['mailer_not_supported'] = ' مەیلەر پشتگیری ناکات'; +$PHPMAILER_LANG['provide_address'] = 'دەبێت ناونیشانی ئیمەیڵی لانیکەم یەک وەرگر دابین بکرێت.'; +$PHPMAILER_LANG['recipients_failed'] = ' هەڵەی SMTP: ئەم هەڵانەی خوارەوەشکستی هێنا لە ناردن بۆ هەردووکیان: '; +$PHPMAILER_LANG['signing'] = 'هەڵەی واژۆ: '; +$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect()پەیوەندی شکستی هێنا .'; +$PHPMAILER_LANG['smtp_error'] = 'هەڵەی ئاستی سێرڤەری SMTP: '; +$PHPMAILER_LANG['variable_set'] = 'ناتوانرێت بیگۆڕیت یان دوبارە بینێریتەوە: '; +$PHPMAILER_LANG['extension_missing'] = 'درێژکراوە نەماوە: '; diff --git a/lam/lib/3rdParty/composer/phpmailer/phpmailer/language/phpmailer.lang-ru.php b/lam/lib/3rdParty/composer/phpmailer/phpmailer/language/phpmailer.lang-ru.php index 8c8c5e817..8013f37c4 100644 --- a/lam/lib/3rdParty/composer/phpmailer/phpmailer/language/phpmailer.lang-ru.php +++ b/lam/lib/3rdParty/composer/phpmailer/phpmailer/language/phpmailer.lang-ru.php @@ -5,24 +5,32 @@ * @package PHPMailer * @author Alexey Chumakov * @author Foster Snowhill + * @author ProjectSoft */ -$PHPMAILER_LANG['authenticate'] = 'Ошибка SMTP: ошибка авторизации.'; +$PHPMAILER_LANG['authenticate'] = 'Ошибка SMTP: не удалось пройти аутентификацию.'; +$PHPMAILER_LANG['buggy_php'] = 'В вашей версии PHP есть ошибка, которая может привести к повреждению сообщений. Чтобы исправить, переключитесь на отправку по SMTP, отключите опцию mail.add_x_header в ваш php.ini, переключитесь на MacOS или Linux или обновите PHP до версии 7.0.17+ или 7.1.3+.'; $PHPMAILER_LANG['connect_host'] = 'Ошибка SMTP: не удается подключиться к SMTP-серверу.'; $PHPMAILER_LANG['data_not_accepted'] = 'Ошибка SMTP: данные не приняты.'; +$PHPMAILER_LANG['empty_message'] = 'Пустое сообщение'; $PHPMAILER_LANG['encoding'] = 'Неизвестная кодировка: '; $PHPMAILER_LANG['execute'] = 'Невозможно выполнить команду: '; +$PHPMAILER_LANG['extension_missing'] = 'Расширение отсутствует: '; $PHPMAILER_LANG['file_access'] = 'Нет доступа к файлу: '; $PHPMAILER_LANG['file_open'] = 'Файловая ошибка: не удаётся открыть файл: '; $PHPMAILER_LANG['from_failed'] = 'Неверный адрес отправителя: '; $PHPMAILER_LANG['instantiate'] = 'Невозможно запустить функцию mail().'; -$PHPMAILER_LANG['provide_address'] = 'Пожалуйста, введите хотя бы один email-адрес получателя.'; -$PHPMAILER_LANG['mailer_not_supported'] = ' — почтовый сервер не поддерживается.'; -$PHPMAILER_LANG['recipients_failed'] = 'Ошибка SMTP: не удалась отправка таким адресатам: '; -$PHPMAILER_LANG['empty_message'] = 'Пустое сообщение'; $PHPMAILER_LANG['invalid_address'] = 'Не отправлено из-за неправильного формата email-адреса: '; +$PHPMAILER_LANG['invalid_header'] = 'Неверное имя или значение заголовка'; +$PHPMAILER_LANG['invalid_hostentry'] = 'Неверная запись хоста: '; +$PHPMAILER_LANG['invalid_host'] = 'Неверный хост: '; +$PHPMAILER_LANG['mailer_not_supported'] = ' — почтовый сервер не поддерживается.'; +$PHPMAILER_LANG['provide_address'] = 'Вы должны указать хотя бы один адрес электронной почты получателя.'; +$PHPMAILER_LANG['recipients_failed'] = 'Ошибка SMTP: Ошибка следующих получателей: '; $PHPMAILER_LANG['signing'] = 'Ошибка подписи: '; -$PHPMAILER_LANG['smtp_connect_failed'] = 'Ошибка соединения с SMTP-сервером'; +$PHPMAILER_LANG['smtp_code'] = 'Код SMTP: '; +$PHPMAILER_LANG['smtp_code_ex'] = 'Дополнительная информация SMTP: '; +$PHPMAILER_LANG['smtp_connect_failed'] = 'Ошибка соединения с SMTP-сервером.'; +$PHPMAILER_LANG['smtp_detail'] = 'Детали: '; $PHPMAILER_LANG['smtp_error'] = 'Ошибка SMTP-сервера: '; $PHPMAILER_LANG['variable_set'] = 'Невозможно установить или сбросить переменную: '; -$PHPMAILER_LANG['extension_missing'] = 'Расширение отсутствует: '; diff --git a/lam/lib/3rdParty/composer/phpmailer/phpmailer/language/phpmailer.lang-tr.php b/lam/lib/3rdParty/composer/phpmailer/phpmailer/language/phpmailer.lang-tr.php index f938f8020..3c45bc1c3 100644 --- a/lam/lib/3rdParty/composer/phpmailer/phpmailer/language/phpmailer.lang-tr.php +++ b/lam/lib/3rdParty/composer/phpmailer/phpmailer/language/phpmailer.lang-tr.php @@ -11,21 +11,28 @@ */ $PHPMAILER_LANG['authenticate'] = 'SMTP Hatası: Oturum açılamadı.'; +$PHPMAILER_LANG['buggy_php'] = 'PHP sürümünüz iletilerin bozulmasına neden olabilecek bir hatadan etkileniyor. Bunu düzeltmek için, SMTP kullanarak göndermeye geçin, mail.add_x_header seçeneğini devre dışı bırakın php.ini dosyanızdaki mail.add_x_header seçeneğini devre dışı bırakın, MacOS veya Linux geçin veya PHP sürümünü 7.0.17+ veya 7.1.3+ sürümüne yükseltin,'; $PHPMAILER_LANG['connect_host'] = 'SMTP Hatası: SMTP sunucusuna bağlanılamadı.'; $PHPMAILER_LANG['data_not_accepted'] = 'SMTP Hatası: Veri kabul edilmedi.'; $PHPMAILER_LANG['empty_message'] = 'Mesajın içeriği boş'; $PHPMAILER_LANG['encoding'] = 'Bilinmeyen karakter kodlama: '; $PHPMAILER_LANG['execute'] = 'Çalıştırılamadı: '; +$PHPMAILER_LANG['extension_missing'] = 'Eklenti bulunamadı: '; $PHPMAILER_LANG['file_access'] = 'Dosyaya erişilemedi: '; $PHPMAILER_LANG['file_open'] = 'Dosya Hatası: Dosya açılamadı: '; $PHPMAILER_LANG['from_failed'] = 'Belirtilen adreslere gönderme başarısız: '; $PHPMAILER_LANG['instantiate'] = 'Örnek e-posta fonksiyonu oluşturulamadı.'; $PHPMAILER_LANG['invalid_address'] = 'Geçersiz e-posta adresi: '; +$PHPMAILER_LANG['invalid_header'] = 'Geçersiz başlık adı veya değeri: '; +$PHPMAILER_LANG['invalid_hostentry'] = 'Geçersiz ana bilgisayar girişi: '; +$PHPMAILER_LANG['invalid_host'] = 'Geçersiz ana bilgisayar: '; $PHPMAILER_LANG['mailer_not_supported'] = ' e-posta kütüphanesi desteklenmiyor.'; $PHPMAILER_LANG['provide_address'] = 'En az bir alıcı e-posta adresi belirtmelisiniz.'; $PHPMAILER_LANG['recipients_failed'] = 'SMTP Hatası: Belirtilen alıcılara ulaşılamadı: '; $PHPMAILER_LANG['signing'] = 'İmzalama hatası: '; +$PHPMAILER_LANG['smtp_code'] = 'SMTP kodu: '; +$PHPMAILER_LANG['smtp_code_ex'] = 'ek SMTP bilgileri: '; $PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP connect() fonksiyonu başarısız.'; +$PHPMAILER_LANG['smtp_detail'] = 'SMTP SMTP Detayı: '; $PHPMAILER_LANG['smtp_error'] = 'SMTP sunucu hatası: '; $PHPMAILER_LANG['variable_set'] = 'Değişken ayarlanamadı ya da sıfırlanamadı: '; -$PHPMAILER_LANG['extension_missing'] = 'Eklenti bulunamadı: '; diff --git a/lam/lib/3rdParty/composer/phpmailer/phpmailer/language/phpmailer.lang-ur.php b/lam/lib/3rdParty/composer/phpmailer/phpmailer/language/phpmailer.lang-ur.php new file mode 100644 index 000000000..0b9de0f12 --- /dev/null +++ b/lam/lib/3rdParty/composer/phpmailer/phpmailer/language/phpmailer.lang-ur.php @@ -0,0 +1,30 @@ + + */ + +$PHPMAILER_LANG['authenticate'] = 'SMTP خرابی: تصدیق کرنے سے قاصر۔'; +$PHPMAILER_LANG['connect_host'] = 'SMTP خرابی: سرور سے منسلک ہونے سے قاصر۔'; +$PHPMAILER_LANG['data_not_accepted'] = 'SMTP خرابی: ڈیٹا قبول نہیں کیا گیا۔'; +$PHPMAILER_LANG['empty_message'] = 'پیغام کی باڈی خالی ہے۔'; +$PHPMAILER_LANG['encoding'] = 'نامعلوم انکوڈنگ: '; +$PHPMAILER_LANG['execute'] = 'عمل کرنے کے قابل نہیں '; +$PHPMAILER_LANG['file_access'] = 'فائل تک رسائی سے قاصر:'; +$PHPMAILER_LANG['file_open'] = 'فائل کی خرابی: فائل کو کھولنے سے قاصر:'; +$PHPMAILER_LANG['from_failed'] = 'درج ذیل بھیجنے والے کا پتہ ناکام ہو گیا:'; +$PHPMAILER_LANG['instantiate'] = 'میل فنکشن کی مثال بنانے سے قاصر۔'; +$PHPMAILER_LANG['invalid_address'] = 'بھیجنے سے قاصر: غلط ای میل پتہ:'; +$PHPMAILER_LANG['mailer_not_supported'] = ' میلر تعاون یافتہ نہیں ہے۔'; +$PHPMAILER_LANG['provide_address'] = 'آپ کو کم از کم ایک منزل کا ای میل پتہ فراہم کرنا چاہیے۔'; +$PHPMAILER_LANG['recipients_failed'] = 'SMTP خرابی: درج ذیل پتہ پر نہیں بھیجا جاسکا: '; +$PHPMAILER_LANG['signing'] = 'دستخط کی خرابی: '; +$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP ملنا ناکام ہوا'; +$PHPMAILER_LANG['smtp_error'] = 'SMTP سرور کی خرابی: '; +$PHPMAILER_LANG['variable_set'] = 'متغیر سیٹ نہیں کیا جا سکا: '; +$PHPMAILER_LANG['extension_missing'] = 'ایکٹینشن موجود نہیں ہے۔ '; +$PHPMAILER_LANG['smtp_code'] = 'SMTP سرور کوڈ: '; +$PHPMAILER_LANG['smtp_code_ex'] = 'اضافی SMTP سرور کی معلومات:'; +$PHPMAILER_LANG['invalid_header'] = 'غلط ہیڈر کا نام یا قدر'; diff --git a/lam/lib/3rdParty/composer/phpmailer/phpmailer/src/DSNConfigurator.php b/lam/lib/3rdParty/composer/phpmailer/phpmailer/src/DSNConfigurator.php index 566c9618f..7058c1f05 100644 --- a/lam/lib/3rdParty/composer/phpmailer/phpmailer/src/DSNConfigurator.php +++ b/lam/lib/3rdParty/composer/phpmailer/phpmailer/src/DSNConfigurator.php @@ -13,7 +13,7 @@ * @copyright 2012 - 2023 Marcus Bointon * @copyright 2010 - 2012 Jim Jagielski * @copyright 2004 - 2009 Andy Prevost - * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License + * @license https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html GNU Lesser General Public License * @note This program is distributed in the hope that it will be useful - WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. diff --git a/lam/lib/3rdParty/composer/phpmailer/phpmailer/src/Exception.php b/lam/lib/3rdParty/composer/phpmailer/phpmailer/src/Exception.php index 52eaf9515..09c1a2cfe 100644 --- a/lam/lib/3rdParty/composer/phpmailer/phpmailer/src/Exception.php +++ b/lam/lib/3rdParty/composer/phpmailer/phpmailer/src/Exception.php @@ -13,7 +13,7 @@ * @copyright 2012 - 2020 Marcus Bointon * @copyright 2010 - 2012 Jim Jagielski * @copyright 2004 - 2009 Andy Prevost - * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License + * @license https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html GNU Lesser General Public License * @note This program is distributed in the hope that it will be useful - WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. diff --git a/lam/lib/3rdParty/composer/phpmailer/phpmailer/src/OAuth.php b/lam/lib/3rdParty/composer/phpmailer/phpmailer/src/OAuth.php index c1d5b7762..a7e958860 100644 --- a/lam/lib/3rdParty/composer/phpmailer/phpmailer/src/OAuth.php +++ b/lam/lib/3rdParty/composer/phpmailer/phpmailer/src/OAuth.php @@ -13,7 +13,7 @@ * @copyright 2012 - 2020 Marcus Bointon * @copyright 2010 - 2012 Jim Jagielski * @copyright 2004 - 2009 Andy Prevost - * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License + * @license https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html GNU Lesser General Public License * @note This program is distributed in the hope that it will be useful - WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. @@ -29,7 +29,7 @@ use League\OAuth2\Client\Token\AccessToken; * OAuth - OAuth2 authentication wrapper class. * Uses the oauth2-client package from the League of Extraordinary Packages. * - * @see http://oauth2-client.thephpleague.com + * @see https://oauth2-client.thephpleague.com * * @author Marcus Bointon (Synchro/coolbru) */ diff --git a/lam/lib/3rdParty/composer/phpmailer/phpmailer/src/OAuthTokenProvider.php b/lam/lib/3rdParty/composer/phpmailer/phpmailer/src/OAuthTokenProvider.php index 115550743..cbda1a129 100644 --- a/lam/lib/3rdParty/composer/phpmailer/phpmailer/src/OAuthTokenProvider.php +++ b/lam/lib/3rdParty/composer/phpmailer/phpmailer/src/OAuthTokenProvider.php @@ -13,7 +13,7 @@ * @copyright 2012 - 2020 Marcus Bointon * @copyright 2010 - 2012 Jim Jagielski * @copyright 2004 - 2009 Andy Prevost - * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License + * @license https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html GNU Lesser General Public License * @note This program is distributed in the hope that it will be useful - WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. diff --git a/lam/lib/3rdParty/composer/phpmailer/phpmailer/src/PHPMailer.php b/lam/lib/3rdParty/composer/phpmailer/phpmailer/src/PHPMailer.php index ba4bcd472..4a6077c01 100644 --- a/lam/lib/3rdParty/composer/phpmailer/phpmailer/src/PHPMailer.php +++ b/lam/lib/3rdParty/composer/phpmailer/phpmailer/src/PHPMailer.php @@ -13,7 +13,7 @@ * @copyright 2012 - 2020 Marcus Bointon * @copyright 2010 - 2012 Jim Jagielski * @copyright 2004 - 2009 Andy Prevost - * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License + * @license https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html GNU Lesser General Public License * @note This program is distributed in the hope that it will be useful - WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. @@ -152,8 +152,7 @@ class PHPMailer * Only supported in simple alt or alt_inline message types * To generate iCal event structures, use classes like EasyPeasyICS or iCalcreator. * - * @see http://sprain.ch/blog/downloads/php-class-easypeasyics-create-ical-files-with-php/ - * @see http://kigkonsult.se/iCalcreator/ + * @see https://kigkonsult.se/iCalcreator/ * * @var string */ @@ -254,7 +253,7 @@ class PHPMailer * You can set your own, but it must be in the format "", * as defined in RFC5322 section 3.6.4 or it will be ignored. * - * @see https://tools.ietf.org/html/rfc5322#section-3.6.4 + * @see https://www.rfc-editor.org/rfc/rfc5322#section-3.6.4 * * @var string */ @@ -358,7 +357,7 @@ class PHPMailer public $AuthType = ''; /** - * SMTP SMTPXClient command attibutes + * SMTP SMTPXClient command attributes * * @var array */ @@ -388,7 +387,7 @@ class PHPMailer * 'DELAY' will notify you if there is an unusual delay in delivery, but the actual * delivery's outcome (success or failure) is not yet decided. * - * @see https://tools.ietf.org/html/rfc3461 See section 4.1 for more information about NOTIFY + * @see https://www.rfc-editor.org/rfc/rfc3461.html#section-4.1 for more information about NOTIFY */ public $dsn = ''; @@ -468,7 +467,7 @@ class PHPMailer * Only applicable when sending via SMTP. * * @see https://en.wikipedia.org/wiki/Variable_envelope_return_path - * @see http://www.postfix.org/VERP_README.html Postfix VERP info + * @see https://www.postfix.org/VERP_README.html Postfix VERP info * * @var bool */ @@ -551,10 +550,10 @@ class PHPMailer * The function that handles the result of the send email action. * It is called out by send() for each email sent. * - * Value can be any php callable: http://www.php.net/is_callable + * Value can be any php callable: https://www.php.net/is_callable * * Parameters: - * bool $result result of the send action + * bool $result result of the send action * array $to email addresses of the recipients * array $cc cc email addresses * array $bcc bcc email addresses @@ -757,7 +756,7 @@ class PHPMailer * * @var string */ - const VERSION = '6.9.1'; + const VERSION = '6.9.3'; /** * Error severity: message only, continue processing. @@ -903,7 +902,7 @@ class PHPMailer } //Is this a PSR-3 logger? if ($this->Debugoutput instanceof \Psr\Log\LoggerInterface) { - $this->Debugoutput->debug($str); + $this->Debugoutput->debug(rtrim($str, "\r\n")); return; } @@ -1072,7 +1071,7 @@ class PHPMailer * be modified after calling this function), addition of such addresses is delayed until send(). * Addresses that have been added already return false, but do not throw exceptions. * - * @param string $kind One of 'to', 'cc', 'bcc', or 'ReplyTo' + * @param string $kind One of 'to', 'cc', 'bcc', or 'Reply-To' * @param string $address The email address * @param string $name An optional username associated with the address * @@ -1212,7 +1211,7 @@ class PHPMailer * Uses the imap_rfc822_parse_adrlist function if the IMAP extension is available. * Note that quotes in the name part are removed. * - * @see http://www.andrew.cmu.edu/user/agreen1/testing/mrbs/web/Mail/RFC822.php A more careful implementation + * @see https://www.andrew.cmu.edu/user/agreen1/testing/mrbs/web/Mail/RFC822.php A more careful implementation * * @param string $addrstr The address list string * @param bool $useimap Whether to use the IMAP extension to parse the list @@ -1407,7 +1406,6 @@ class PHPMailer * * IPv6 literals: 'first.last@[IPv6:a1::]' * Not all of these will necessarily work for sending! * - * @see http://squiloople.com/2009/12/20/email-address-validation/ * @copyright 2009-2010 Michael Rushton * Feel free to use and redistribute this code. But please keep this copyright notice. */ @@ -1734,9 +1732,8 @@ class PHPMailer //This sets the SMTP envelope sender which gets turned into a return-path header by the receiver //A space after `-f` is optional, but there is a long history of its presence //causing problems, so we don't use one - //Exim docs: http://www.exim.org/exim-html-current/doc/html/spec_html/ch-the_exim_command_line.html - //Sendmail docs: http://www.sendmail.org/~ca/email/man/sendmail.html - //Qmail docs: http://www.qmail.org/man/man8/qmail-inject.html + //Exim docs: https://www.exim.org/exim-html-current/doc/html/spec_html/ch-the_exim_command_line.html + //Sendmail docs: https://www.sendmail.org/~ca/email/man/sendmail.html //Example problem: https://www.drupal.org/node/1057954 //PHP 5.6 workaround @@ -1874,7 +1871,7 @@ class PHPMailer */ protected static function isPermittedPath($path) { - //Matches scheme definition from https://tools.ietf.org/html/rfc3986#section-3.1 + //Matches scheme definition from https://www.rfc-editor.org/rfc/rfc3986#section-3.1 return !preg_match('#^[a-z][a-z\d+.-]*://#i', $path); } @@ -1901,7 +1898,7 @@ class PHPMailer /** * Send mail using the PHP mail() function. * - * @see http://www.php.net/manual/en/book.mail.php + * @see https://www.php.net/manual/en/book.mail.php * * @param string $header The message headers * @param string $body The message body @@ -1931,9 +1928,8 @@ class PHPMailer //This sets the SMTP envelope sender which gets turned into a return-path header by the receiver //A space after `-f` is optional, but there is a long history of its presence //causing problems, so we don't use one - //Exim docs: http://www.exim.org/exim-html-current/doc/html/spec_html/ch-the_exim_command_line.html - //Sendmail docs: http://www.sendmail.org/~ca/email/man/sendmail.html - //Qmail docs: http://www.qmail.org/man/man8/qmail-inject.html + //Exim docs: https://www.exim.org/exim-html-current/doc/html/spec_html/ch-the_exim_command_line.html + //Sendmail docs: https://www.sendmail.org/~ca/email/man/sendmail.html //Example problem: https://www.drupal.org/node/1057954 //CVE-2016-10033, CVE-2016-10045: Don't pass -f if characters will be escaped. @@ -2709,7 +2705,7 @@ class PHPMailer } //Only allow a custom message ID if it conforms to RFC 5322 section 3.6.4 - //https://tools.ietf.org/html/rfc5322#section-3.6.4 + //https://www.rfc-editor.org/rfc/rfc5322#section-3.6.4 if ( '' !== $this->MessageID && preg_match( @@ -3634,7 +3630,7 @@ class PHPMailer * without breaking lines within a character. * Adapted from a function by paravoid. * - * @see http://www.php.net/manual/en/function.mb-encode-mimeheader.php#60283 + * @see https://www.php.net/manual/en/function.mb-encode-mimeheader.php#60283 * * @param string $str multi-byte text to wrap encode * @param string $linebreak string to use as linefeed/end-of-line @@ -3690,7 +3686,7 @@ class PHPMailer /** * Encode a string using Q encoding. * - * @see http://tools.ietf.org/html/rfc2047#section-4.2 + * @see https://www.rfc-editor.org/rfc/rfc2047#section-4.2 * * @param string $str the text to encode * @param string $position Where the text is going to be used, see the RFC for what that means @@ -4228,7 +4224,7 @@ class PHPMailer $result = $_SERVER['SERVER_NAME']; } elseif (function_exists('gethostname') && gethostname() !== false) { $result = gethostname(); - } elseif (php_uname('n') !== false) { + } elseif (php_uname('n') !== '') { $result = php_uname('n'); } if (!static::isValidHost($result)) { @@ -4253,7 +4249,7 @@ class PHPMailer empty($host) || !is_string($host) || strlen($host) > 256 - || !preg_match('/^([a-zA-Z\d.-]*|\[[a-fA-F\d:]+\])$/', $host) + || !preg_match('/^([a-z\d.-]*|\[[a-f\d:]+\])$/i', $host) ) { return false; } @@ -4267,8 +4263,8 @@ class PHPMailer //Is it a valid IPv4 address? return filter_var($host, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) !== false; } - //Is it a syntactically valid hostname (when embeded in a URL)? - return filter_var('http://' . $host, FILTER_VALIDATE_URL) !== false; + //Is it a syntactically valid hostname (when embedded in a URL)? + return filter_var('https://' . $host, FILTER_VALIDATE_URL) !== false; } /** @@ -4679,7 +4675,7 @@ class PHPMailer * Multi-byte-safe pathinfo replacement. * Drop-in replacement for pathinfo(), but multibyte- and cross-platform-safe. * - * @see http://www.php.net/manual/en/function.pathinfo.php#107461 + * @see https://www.php.net/manual/en/function.pathinfo.php#107461 * * @param string $path A filename or path, does not need to exist as a file * @param int|string $options Either a PATHINFO_* constant, @@ -4914,7 +4910,7 @@ class PHPMailer * Uses the 'relaxed' algorithm from RFC6376 section 3.4.2. * Canonicalized headers should *always* use CRLF, regardless of mailer setting. * - * @see https://tools.ietf.org/html/rfc6376#section-3.4.2 + * @see https://www.rfc-editor.org/rfc/rfc6376#section-3.4.2 * * @param string $signHeader Header * @@ -4926,7 +4922,7 @@ class PHPMailer $signHeader = static::normalizeBreaks($signHeader, self::CRLF); //Unfold header lines //Note PCRE \s is too broad a definition of whitespace; RFC5322 defines it as `[ \t]` - //@see https://tools.ietf.org/html/rfc5322#section-2.2 + //@see https://www.rfc-editor.org/rfc/rfc5322#section-2.2 //That means this may break if you do something daft like put vertical tabs in your headers. $signHeader = preg_replace('/\r\n[ \t]+/', ' ', $signHeader); //Break headers out into an array @@ -4958,7 +4954,7 @@ class PHPMailer * Uses the 'simple' algorithm from RFC6376 section 3.4.3. * Canonicalized bodies should *always* use CRLF, regardless of mailer setting. * - * @see https://tools.ietf.org/html/rfc6376#section-3.4.3 + * @see https://www.rfc-editor.org/rfc/rfc6376#section-3.4.3 * * @param string $body Message Body * @@ -4994,7 +4990,7 @@ class PHPMailer $DKIMquery = 'dns/txt'; //Query method $DKIMtime = time(); //Always sign these headers without being asked - //Recommended list from https://tools.ietf.org/html/rfc6376#section-5.4.1 + //Recommended list from https://www.rfc-editor.org/rfc/rfc6376#section-5.4.1 $autoSignHeaders = [ 'from', 'to', @@ -5100,7 +5096,7 @@ class PHPMailer } //The DKIM-Signature header is included in the signature *except for* the value of the `b` tag //which is appended after calculating the signature - //https://tools.ietf.org/html/rfc6376#section-3.5 + //https://www.rfc-editor.org/rfc/rfc6376#section-3.5 $dkimSignatureHeader = 'DKIM-Signature: v=1;' . ' d=' . $this->DKIM_domain . ';' . ' s=' . $this->DKIM_selector . ';' . static::$LE . diff --git a/lam/lib/3rdParty/composer/phpmailer/phpmailer/src/POP3.php b/lam/lib/3rdParty/composer/phpmailer/phpmailer/src/POP3.php index 7b25fdd7e..376fae2a8 100644 --- a/lam/lib/3rdParty/composer/phpmailer/phpmailer/src/POP3.php +++ b/lam/lib/3rdParty/composer/phpmailer/phpmailer/src/POP3.php @@ -13,7 +13,7 @@ * @copyright 2012 - 2020 Marcus Bointon * @copyright 2010 - 2012 Jim Jagielski * @copyright 2004 - 2009 Andy Prevost - * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License + * @license https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html GNU Lesser General Public License * @note This program is distributed in the hope that it will be useful - WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. @@ -46,7 +46,7 @@ class POP3 * * @var string */ - const VERSION = '6.9.1'; + const VERSION = '6.9.3'; /** * Default POP3 port number. @@ -250,7 +250,9 @@ class POP3 //On Windows this will raise a PHP Warning error if the hostname doesn't exist. //Rather than suppress it with @fsockopen, capture it cleanly instead - set_error_handler([$this, 'catchWarning']); + set_error_handler(function () { + call_user_func_array([$this, 'catchWarning'], func_get_args()); + }); if (false === $port) { $port = static::DEFAULT_PORT; diff --git a/lam/lib/3rdParty/composer/phpmailer/phpmailer/src/SMTP.php b/lam/lib/3rdParty/composer/phpmailer/phpmailer/src/SMTP.php index 1b5b00771..b4eff4042 100644 --- a/lam/lib/3rdParty/composer/phpmailer/phpmailer/src/SMTP.php +++ b/lam/lib/3rdParty/composer/phpmailer/phpmailer/src/SMTP.php @@ -13,7 +13,7 @@ * @copyright 2012 - 2020 Marcus Bointon * @copyright 2010 - 2012 Jim Jagielski * @copyright 2004 - 2009 Andy Prevost - * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License + * @license https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html GNU Lesser General Public License * @note This program is distributed in the hope that it will be useful - WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. @@ -35,7 +35,7 @@ class SMTP * * @var string */ - const VERSION = '6.9.1'; + const VERSION = '6.9.3'; /** * SMTP line break constant. @@ -62,7 +62,7 @@ class SMTP * The maximum line length allowed by RFC 5321 section 4.5.3.1.6, * *excluding* a trailing CRLF break. * - * @see https://tools.ietf.org/html/rfc5321#section-4.5.3.1.6 + * @see https://www.rfc-editor.org/rfc/rfc5321#section-4.5.3.1.6 * * @var int */ @@ -72,7 +72,7 @@ class SMTP * The maximum line length allowed for replies in RFC 5321 section 4.5.3.1.5, * *including* a trailing CRLF line break. * - * @see https://tools.ietf.org/html/rfc5321#section-4.5.3.1.5 + * @see https://www.rfc-editor.org/rfc/rfc5321#section-4.5.3.1.5 * * @var int */ @@ -152,8 +152,8 @@ class SMTP /** * Whether to use VERP. * - * @see http://en.wikipedia.org/wiki/Variable_envelope_return_path - * @see http://www.postfix.org/VERP_README.html Info on VERP + * @see https://en.wikipedia.org/wiki/Variable_envelope_return_path + * @see https://www.postfix.org/VERP_README.html Info on VERP * * @var bool */ @@ -164,7 +164,7 @@ class SMTP * Default of 5 minutes (300sec) is from RFC2821 section 4.5.3.2. * This needs to be quite high to function correctly with hosts using greetdelay as an anti-spam measure. * - * @see http://tools.ietf.org/html/rfc2821#section-4.5.3.2 + * @see https://www.rfc-editor.org/rfc/rfc2821#section-4.5.3.2 * * @var int */ @@ -187,12 +187,12 @@ class SMTP */ protected $smtp_transaction_id_patterns = [ 'exim' => '/[\d]{3} OK id=(.*)/', - 'sendmail' => '/[\d]{3} 2.0.0 (.*) Message/', - 'postfix' => '/[\d]{3} 2.0.0 Ok: queued as (.*)/', - 'Microsoft_ESMTP' => '/[0-9]{3} 2.[\d].0 (.*)@(?:.*) Queued mail for delivery/', + 'sendmail' => '/[\d]{3} 2\.0\.0 (.*) Message/', + 'postfix' => '/[\d]{3} 2\.0\.0 Ok: queued as (.*)/', + 'Microsoft_ESMTP' => '/[0-9]{3} 2\.[\d]\.0 (.*)@(?:.*) Queued mail for delivery/', 'Amazon_SES' => '/[\d]{3} Ok (.*)/', 'SendGrid' => '/[\d]{3} Ok: queued as (.*)/', - 'CampaignMonitor' => '/[\d]{3} 2.0.0 OK:([a-zA-Z\d]{48})/', + 'CampaignMonitor' => '/[\d]{3} 2\.0\.0 OK:([a-zA-Z\d]{48})/', 'Haraka' => '/[\d]{3} Message Queued \((.*)\)/', 'ZoneMTA' => '/[\d]{3} Message queued as (.*)/', 'Mailjet' => '/[\d]{3} OK queued as (.*)/', @@ -280,7 +280,8 @@ class SMTP } //Is this a PSR-3 logger? if ($this->Debugoutput instanceof \Psr\Log\LoggerInterface) { - $this->Debugoutput->debug($str); + //Remove trailing line breaks potentially added by calls to SMTP::client_send() + $this->Debugoutput->debug(rtrim($str, "\r\n")); return; } @@ -293,6 +294,7 @@ class SMTP switch ($this->Debugoutput) { case 'error_log': //Don't output, just log + /** @noinspection ForgottenDebugOutputInspection */ error_log($str); break; case 'html': @@ -371,7 +373,7 @@ class SMTP } //Anything other than a 220 response means something went wrong //RFC 5321 says the server will wait for us to send a QUIT in response to a 554 error - //https://tools.ietf.org/html/rfc5321#section-3.1 + //https://www.rfc-editor.org/rfc/rfc5321#section-3.1 if ($responseCode === 554) { $this->quit(); } @@ -404,7 +406,9 @@ class SMTP $errstr = ''; if ($streamok) { $socket_context = stream_context_create($options); - set_error_handler([$this, 'errorHandler']); + set_error_handler(function () { + call_user_func_array([$this, 'errorHandler'], func_get_args()); + }); $connection = stream_socket_client( $host . ':' . $port, $errno, @@ -419,7 +423,9 @@ class SMTP 'Connection: stream_socket_client not available, falling back to fsockopen', self::DEBUG_CONNECTION ); - set_error_handler([$this, 'errorHandler']); + set_error_handler(function () { + call_user_func_array([$this, 'errorHandler'], func_get_args()); + }); $connection = fsockopen( $host, $port, @@ -483,7 +489,9 @@ class SMTP } //Begin encrypted connection - set_error_handler([$this, 'errorHandler']); + set_error_handler(function () { + call_user_func_array([$this, 'errorHandler'], func_get_args()); + }); $crypto_ok = stream_socket_enable_crypto( $this->smtp_conn, true, @@ -574,7 +582,7 @@ class SMTP } //Send encoded username and password if ( - //Format from https://tools.ietf.org/html/rfc4616#section-2 + //Format from https://www.rfc-editor.org/rfc/rfc4616#section-2 //We skip the first field (it's forgery), so the string starts with a null byte !$this->sendCommand( 'User & Password', @@ -648,7 +656,7 @@ class SMTP } //The following borrowed from - //http://php.net/manual/en/function.mhash.php#27225 + //https://www.php.net/manual/en/function.mhash.php#27225 //RFC 2104 HMAC implementation for php. //Creates an md5 HMAC. @@ -787,7 +795,7 @@ class SMTP //Send the lines to the server foreach ($lines_out as $line_out) { //Dot-stuffing as per RFC5321 section 4.5.2 - //https://tools.ietf.org/html/rfc5321#section-4.5.2 + //https://www.rfc-editor.org/rfc/rfc5321#section-4.5.2 if (!empty($line_out) && $line_out[0] === '.') { $line_out = '.' . $line_out; } @@ -1162,7 +1170,9 @@ class SMTP } else { $this->edebug('CLIENT -> SERVER: ' . $data, self::DEBUG_CLIENT); } - set_error_handler([$this, 'errorHandler']); + set_error_handler(function () { + call_user_func_array([$this, 'errorHandler'], func_get_args()); + }); $result = fwrite($this->smtp_conn, $data); restore_error_handler(); @@ -1265,7 +1275,9 @@ class SMTP while (is_resource($this->smtp_conn) && !feof($this->smtp_conn)) { //Must pass vars in here as params are by reference //solution for signals inspired by https://github.com/symfony/symfony/pull/6540 - set_error_handler([$this, 'errorHandler']); + set_error_handler(function () { + call_user_func_array([$this, 'errorHandler'], func_get_args()); + }); $n = stream_select($selR, $selW, $selW, $this->Timelimit); restore_error_handler(); diff --git a/lam/lib/3rdParty/composer/phpseclib/phpseclib/phpseclib/Crypt/Hash.php b/lam/lib/3rdParty/composer/phpseclib/phpseclib/phpseclib/Crypt/Hash.php index 61aac8675..09e48f960 100644 --- a/lam/lib/3rdParty/composer/phpseclib/phpseclib/phpseclib/Crypt/Hash.php +++ b/lam/lib/3rdParty/composer/phpseclib/phpseclib/phpseclib/Crypt/Hash.php @@ -128,7 +128,7 @@ class Hash /** * Outer XOR (Internal HMAC) * - * Used only for sha512/* + * Used only for sha512 * * @see self::hash() * @var string @@ -138,7 +138,7 @@ class Hash /** * Inner XOR (Internal HMAC) * - * Used only for sha512/* + * Used only for sha512 * * @see self::hash() * @var string @@ -285,12 +285,16 @@ class Hash */ public function setHash($hash) { + $oldHash = $this->hashParam; $this->hashParam = $hash = strtolower($hash); switch ($hash) { case 'umac-32': case 'umac-64': case 'umac-96': case 'umac-128': + if ($oldHash != $this->hashParam) { + $this->recomputeAESKey = true; + } $this->blockSize = 128; $this->length = abs(substr($hash, -3)) >> 3; $this->algo = 'umac'; @@ -418,13 +422,17 @@ class Hash '0F6D2B697BD44DA8', '77E36F7304C48942', '3F9D85A86A1D36C8', '1112E6AD91D692A1' ]; for ($i = 0; $i < 8; $i++) { - $initial[$i] = new BigInteger($initial[$i], 16); - $initial[$i]->setPrecision(64); + if (PHP_INT_SIZE == 8) { + list(, $initial[$i]) = unpack('J', pack('H*', $initial[$i])); + } else { + $initial[$i] = new BigInteger($initial[$i], 16); + $initial[$i]->setPrecision(64); + } } $this->parameters = compact('initial'); - $hash = ['phpseclib3\Crypt\Hash', 'sha512']; + $hash = ['phpseclib3\Crypt\Hash', PHP_INT_SIZE == 8 ? 'sha512_64' : 'sha512']; } } @@ -564,11 +572,14 @@ class Hash // For each chunk, except the last: endian-adjust, NH hash // and add bit-length. Use results to build Y. // - $length = new BigInteger(1024 * 8); + $length = 1024 * 8; $y = ''; + for ($i = 0; $i < count($m) - 1; $i++) { $m[$i] = pack('N*', ...unpack('V*', $m[$i])); // ENDIAN-SWAP - $y .= static::nh($k, $m[$i], $length); + $y .= PHP_INT_SIZE == 8 ? + static::nh64($k, $m[$i], $length) : + static::nh32($k, $m[$i], $length); } // @@ -581,70 +592,256 @@ class Hash $m[$i] = str_pad(isset($m[$i]) ? $m[$i] : '', $pad, "\0"); // zeropad $m[$i] = pack('N*', ...unpack('V*', $m[$i])); // ENDIAN-SWAP - $y .= static::nh($k, $m[$i], new BigInteger($length * 8)); + $y .= PHP_INT_SIZE == 8 ? + static::nh64($k, $m[$i], $length * 8) : + static::nh32($k, $m[$i], $length * 8); return $y; } /** - * NH Algorithm + * 32-bit safe 64-bit Multiply with 2x 32-bit ints + * + * @param int $x + * @param int $y + * @return string $x * $y + */ + private static function mul32_64($x, $y) + { + // see mul64() for a more detailed explanation of how this works + + $x1 = ($x >> 16) & 0xFFFF; + $x0 = $x & 0xFFFF; + + $y1 = ($y >> 16) & 0xFFFF; + $y0 = $y & 0xFFFF; + + // the following 3x lines will possibly yield floats + $z2 = $x1 * $y1; + $z0 = $x0 * $y0; + $z1 = $x1 * $y0 + $x0 * $y1; + + $a = intval(fmod($z0, 65536)); + $b = intval($z0 / 65536) + intval(fmod($z1, 65536)); + $c = intval($z1 / 65536) + intval(fmod($z2, 65536)) + intval($b / 65536); + $b = intval(fmod($b, 65536)); + $d = intval($z2 / 65536) + intval($c / 65536); + $c = intval(fmod($c, 65536)); + $d = intval(fmod($d, 65536)); + + return pack('n4', $d, $c, $b, $a); + } + + /** + * 32-bit safe 64-bit Addition with 2x 64-bit strings + * + * @param int $x + * @param int $y + * @return int $x * $y + */ + private static function add32_64($x, $y) + { + list(, $x1, $x2, $x3, $x4) = unpack('n4', $x); + list(, $y1, $y2, $y3, $y4) = unpack('n4', $y); + $a = $x4 + $y4; + $b = $x3 + $y3 + ($a >> 16); + $c = $x2 + $y2 + ($b >> 16); + $d = $x1 + $y1 + ($c >> 16); + return pack('n4', $d, $c, $b, $a); + } + + /** + * 32-bit safe 32-bit Addition with 2x 32-bit strings + * + * @param int $x + * @param int $y + * @return int $x * $y + */ + private static function add32($x, $y) + { + // see add64() for a more detailed explanation of how this works + + $x1 = $x & 0xFFFF; + $x2 = ($x >> 16) & 0xFFFF; + $y1 = $y & 0xFFFF; + $y2 = ($y >> 16) & 0xFFFF; + + $a = $x1 + $y1; + $b = ($x2 + $y2 + ($a >> 16)) << 16; + $a &= 0xFFFF; + + return $a | $b; + } + + /** + * NH Algorithm / 32-bit safe * * @param string $k string of length 1024 bytes. * @param string $m string with length divisible by 32 bytes. * @return string string of length 8 bytes. */ - private static function nh($k, $m, $length) + private static function nh32($k, $m, $length) { - $toUInt32 = function ($x) { - $x = new BigInteger($x, 256); - $x->setPrecision(32); - return $x; - }; - // // Break M and K into 4-byte chunks // - //$t = strlen($m) >> 2; - $m = str_split($m, 4); + $k = unpack('N*', $k); + $m = unpack('N*', $m); $t = count($m); - $k = str_split($k, 4); - $k = array_pad(array_slice($k, 0, $t), $t, 0); - - $m = array_map($toUInt32, $m); - $k = array_map($toUInt32, $k); // // Perform NH hash on the chunks, pairing words for multiplication // which are 4 apart to accommodate vector-parallelism. // - $y = new BigInteger(); - $y->setPrecision(64); - $i = 0; - while ($i < $t) { - $temp = $m[$i]->add($k[$i]); - $temp->setPrecision(64); - $temp = $temp->multiply($m[$i + 4]->add($k[$i + 4])); - $y = $y->add($temp); + $i = 1; + $y = "\0\0\0\0\0\0\0\0"; + while ($i <= $t) { + $temp = self::add32($m[$i], $k[$i]); + $temp2 = self::add32($m[$i + 4], $k[$i + 4]); + $y = self::add32_64($y, self::mul32_64($temp, $temp2)); - $temp = $m[$i + 1]->add($k[$i + 1]); - $temp->setPrecision(64); - $temp = $temp->multiply($m[$i + 5]->add($k[$i + 5])); - $y = $y->add($temp); + $temp = self::add32($m[$i + 1], $k[$i + 1]); + $temp2 = self::add32($m[$i + 5], $k[$i + 5]); + $y = self::add32_64($y, self::mul32_64($temp, $temp2)); - $temp = $m[$i + 2]->add($k[$i + 2]); - $temp->setPrecision(64); - $temp = $temp->multiply($m[$i + 6]->add($k[$i + 6])); - $y = $y->add($temp); + $temp = self::add32($m[$i + 2], $k[$i + 2]); + $temp2 = self::add32($m[$i + 6], $k[$i + 6]); + $y = self::add32_64($y, self::mul32_64($temp, $temp2)); - $temp = $m[$i + 3]->add($k[$i + 3]); - $temp->setPrecision(64); - $temp = $temp->multiply($m[$i + 7]->add($k[$i + 7])); - $y = $y->add($temp); + $temp = self::add32($m[$i + 3], $k[$i + 3]); + $temp2 = self::add32($m[$i + 7], $k[$i + 7]); + $y = self::add32_64($y, self::mul32_64($temp, $temp2)); $i += 8; } - return $y->add($length)->toBytes(); + return self::add32_64($y, pack('N2', 0, $length)); + } + + /** + * 64-bit Multiply with 2x 32-bit ints + * + * @param int $x + * @param int $y + * @return int $x * $y + */ + private static function mul64($x, $y) + { + // since PHP doesn't implement unsigned integers we'll implement them with signed integers + // to do this we'll use karatsuba multiplication + + $x1 = $x >> 16; + $x0 = $x & 0xFFFF; + + $y1 = $y >> 16; + $y0 = $y & 0xFFFF; + + $z2 = $x1 * $y1; // up to 32 bits long + $z0 = $x0 * $y0; // up to 32 bits long + $z1 = $x1 * $y0 + $x0 * $y1; // up to 33 bit long + // normally karatsuba multiplication calculates $z1 thusly: + //$z1 = ($x1 + $x0) * ($y0 + $y1) - $z2 - $z0; + // the idea being to eliminate one extra multiplication. for arbitrary precision math that makes sense + // but not for this purpose + + // at this point karatsuba would normally return this: + //return ($z2 << 64) + ($z1 << 32) + $z0; + // the problem is that the output could be out of range for signed 64-bit ints, + // which would cause PHP to switch to floats, which would risk losing the lower few bits + // as such we'll OR 4x 16-bit blocks together like so: + /* + ........ | ........ | ........ | ........ + upper $z2 | lower $z2 | lower $z1 | lower $z0 + | +upper $z1 | +upper $z0 | + + $carry | + $carry | | + */ + // technically upper $z1 is 17 bit - not 16 - but the most significant digit of that will + // just get added to $carry + + $a = $z0 & 0xFFFF; + $b = ($z0 >> 16) + ($z1 & 0xFFFF); + $c = ($z1 >> 16) + ($z2 & 0xFFFF) + ($b >> 16); + $b = ($b & 0xFFFF) << 16; + $d = ($z2 >> 16) + ($c >> 16); + $c = ($c & 0xFFFF) << 32; + $d = ($d & 0xFFFF) << 48; + + return $a | $b | $c | $d; + } + + /** + * 64-bit Addition with 2x 64-bit ints + * + * @param int $x + * @param int $y + * @return int $x + $y + */ + private static function add64($x, $y) + { + // doing $x + $y risks returning a result that's out of range for signed 64-bit ints + // in that event PHP would convert the result to a float and precision would be lost + // so we'll just add 2x 32-bit ints together like so: + /* + ........ | ........ + upper $x | lower $x + +upper $y |+lower $y + + $carry | + */ + $x1 = $x & 0xFFFFFFFF; + $x2 = ($x >> 32) & 0xFFFFFFFF; + $y1 = $y & 0xFFFFFFFF; + $y2 = ($y >> 32) & 0xFFFFFFFF; + + $a = $x1 + $y1; + $b = ($x2 + $y2 + ($a >> 32)) << 32; + $a &= 0xFFFFFFFF; + + return $a | $b; + } + + /** + * NH Algorithm / 64-bit safe + * + * @param string $k string of length 1024 bytes. + * @param string $m string with length divisible by 32 bytes. + * @return string string of length 8 bytes. + */ + private static function nh64($k, $m, $length) + { + // + // Break M and K into 4-byte chunks + // + $k = unpack('N*', $k); + $m = unpack('N*', $m); + $t = count($m); + + // + // Perform NH hash on the chunks, pairing words for multiplication + // which are 4 apart to accommodate vector-parallelism. + // + $i = 1; + $y = 0; + while ($i <= $t) { + $temp = ($m[$i] + $k[$i]) & 0xFFFFFFFF; + $temp2 = ($m[$i + 4] + $k[$i + 4]) & 0xFFFFFFFF; + $y = self::add64($y, self::mul64($temp, $temp2)); + + $temp = ($m[$i + 1] + $k[$i + 1]) & 0xFFFFFFFF; + $temp2 = ($m[$i + 5] + $k[$i + 5]) & 0xFFFFFFFF; + $y = self::add64($y, self::mul64($temp, $temp2)); + + $temp = ($m[$i + 2] + $k[$i + 2]) & 0xFFFFFFFF; + $temp2 = ($m[$i + 6] + $k[$i + 6]) & 0xFFFFFFFF; + $y = self::add64($y, self::mul64($temp, $temp2)); + + $temp = ($m[$i + 3] + $k[$i + 3]) & 0xFFFFFFFF; + $temp2 = ($m[$i + 7] + $k[$i + 7]) & 0xFFFFFFFF; + $y = self::add64($y, self::mul64($temp, $temp2)); + + $i += 8; + } + + return pack('J', self::add64($y, $length)); } /** @@ -1125,9 +1322,10 @@ class Hash list($lo, $hi) = $x; } + $mask = -1 ^ (-1 << $shift); return [ - ($hi << $shift) | (($lo >> (32 - $shift)) & (1 << $shift) - 1), - ($lo << $shift) | (($hi >> (32 - $shift)) & (1 << $shift) - 1) + ($hi << $shift) | (($lo >> (32 - $shift)) & $mask), + ($lo << $shift) | (($hi >> (32 - $shift)) & $mask) ]; } @@ -1277,14 +1475,27 @@ class Hash } /** - * Rotate 64-bit int + * Left rotate 64-bit int * * @param int $x * @param int $shift */ private static function rotateLeft64($x, $shift) { - return ($x << $shift) | (($x >> (64 - $shift)) & ((1 << $shift) - 1)); + $mask = -1 ^ (-1 << $shift); + return ($x << $shift) | (($x >> (64 - $shift)) & $mask); + } + + /** + * Right rotate 64-bit int + * + * @param int $x + * @param int $shift + */ + private static function rotateRight64($x, $shift) + { + $mask = -1 ^ (-1 << (64 - $shift)); + return (($x >> $shift) & $mask) | ($x << (64 - $shift)); } /** @@ -1445,6 +1656,140 @@ class Hash return $temp; } + /** + * Pure-PHP implementation of SHA512 + * + * @param string $m + * @param array $hash + * @return string + */ + private static function sha512_64($m, $hash) + { + static $k; + + if (!isset($k)) { + // Initialize table of round constants + // (first 64 bits of the fractional parts of the cube roots of the first 80 primes 2..409) + $k = [ + '428a2f98d728ae22', '7137449123ef65cd', 'b5c0fbcfec4d3b2f', 'e9b5dba58189dbbc', + '3956c25bf348b538', '59f111f1b605d019', '923f82a4af194f9b', 'ab1c5ed5da6d8118', + 'd807aa98a3030242', '12835b0145706fbe', '243185be4ee4b28c', '550c7dc3d5ffb4e2', + '72be5d74f27b896f', '80deb1fe3b1696b1', '9bdc06a725c71235', 'c19bf174cf692694', + 'e49b69c19ef14ad2', 'efbe4786384f25e3', '0fc19dc68b8cd5b5', '240ca1cc77ac9c65', + '2de92c6f592b0275', '4a7484aa6ea6e483', '5cb0a9dcbd41fbd4', '76f988da831153b5', + '983e5152ee66dfab', 'a831c66d2db43210', 'b00327c898fb213f', 'bf597fc7beef0ee4', + 'c6e00bf33da88fc2', 'd5a79147930aa725', '06ca6351e003826f', '142929670a0e6e70', + '27b70a8546d22ffc', '2e1b21385c26c926', '4d2c6dfc5ac42aed', '53380d139d95b3df', + '650a73548baf63de', '766a0abb3c77b2a8', '81c2c92e47edaee6', '92722c851482353b', + 'a2bfe8a14cf10364', 'a81a664bbc423001', 'c24b8b70d0f89791', 'c76c51a30654be30', + 'd192e819d6ef5218', 'd69906245565a910', 'f40e35855771202a', '106aa07032bbd1b8', + '19a4c116b8d2d0c8', '1e376c085141ab53', '2748774cdf8eeb99', '34b0bcb5e19b48a8', + '391c0cb3c5c95a63', '4ed8aa4ae3418acb', '5b9cca4f7763e373', '682e6ff3d6b2b8a3', + '748f82ee5defb2fc', '78a5636f43172f60', '84c87814a1f0ab72', '8cc702081a6439ec', + '90befffa23631e28', 'a4506cebde82bde9', 'bef9a3f7b2c67915', 'c67178f2e372532b', + 'ca273eceea26619c', 'd186b8c721c0c207', 'eada7dd6cde0eb1e', 'f57d4f7fee6ed178', + '06f067aa72176fba', '0a637dc5a2c898a6', '113f9804bef90dae', '1b710b35131c471b', + '28db77f523047d84', '32caab7b40c72493', '3c9ebe0a15c9bebc', '431d67c49c100d4c', + '4cc5d4becb3e42b6', '597f299cfc657e2a', '5fcb6fab3ad6faec', '6c44198c4a475817' + ]; + + for ($i = 0; $i < 80; $i++) { + list(, $k[$i]) = unpack('J', pack('H*', $k[$i])); + } + } + + // Pre-processing + $length = strlen($m); + // to round to nearest 112 mod 128, we'll add 128 - (length + (128 - 112)) % 128 + $m .= str_repeat(chr(0), 128 - (($length + 16) & 0x7F)); + $m[$length] = chr(0x80); + // we don't support hashing strings 512MB long + $m .= pack('N4', 0, 0, 0, $length << 3); + + // Process the message in successive 1024-bit chunks + $chunks = str_split($m, 128); + foreach ($chunks as $chunk) { + $w = []; + for ($i = 0; $i < 16; $i++) { + list(, $w[]) = unpack('J', Strings::shift($chunk, 8)); + } + + // Extend the sixteen 32-bit words into eighty 32-bit words + for ($i = 16; $i < 80; $i++) { + $temp = [ + self::rotateRight64($w[$i - 15], 1), + self::rotateRight64($w[$i - 15], 8), + ($w[$i - 15] >> 7) & 0x01FFFFFFFFFFFFFF, + ]; + $s0 = $temp[0] ^ $temp[1] ^ $temp[2]; + $temp = [ + self::rotateRight64($w[$i - 2], 19), + self::rotateRight64($w[$i - 2], 61), + ($w[$i - 2] >> 6) & 0x03FFFFFFFFFFFFFF, + ]; + $s1 = $temp[0] ^ $temp[1] ^ $temp[2]; + + $w[$i] = $w[$i - 16]; + $w[$i] = self::add64($w[$i], $s0); + $w[$i] = self::add64($w[$i], $w[$i - 7]); + $w[$i] = self::add64($w[$i], $s1); + } + + // Initialize hash value for this chunk + list($a, $b, $c, $d, $e, $f, $g, $h) = $hash; + + // Main loop + for ($i = 0; $i < 80; $i++) { + $temp = [ + self::rotateRight64($a, 28), + self::rotateRight64($a, 34), + self::rotateRight64($a, 39), + ]; + $s0 = $temp[0] ^ $temp[1] ^ $temp[2]; + $temp = [$a & $b, $a & $c, $b & $c]; + $maj = $temp[0] ^ $temp[1] ^ $temp[2]; + $t2 = self::add64($s0, $maj); + + $temp = [ + self::rotateRight64($e, 14), + self::rotateRight64($e, 18), + self::rotateRight64($e, 41), + ]; + $s1 = $temp[0] ^ $temp[1] ^ $temp[2]; + $ch = ($e & $f) ^ ($g & ~$e); + $t1 = self::add64($h, $s1); + $t1 = self::add64($t1, $ch); + $t1 = self::add64($t1, $k[$i]); + $t1 = self::add64($t1, $w[$i]); + + $h = $g; + $g = $f; + $f = $e; + $e = self::add64($d, $t1); + $d = $c; + $c = $b; + $b = $a; + $a = self::add64($t1, $t2); + } + + // Add this chunk's hash to result so far + $hash = [ + self::add64($hash[0], $a), + self::add64($hash[1], $b), + self::add64($hash[2], $c), + self::add64($hash[3], $d), + self::add64($hash[4], $e), + self::add64($hash[5], $f), + self::add64($hash[6], $g), + self::add64($hash[7], $h), + ]; + } + + // Produce the final hash value (big-endian) + // (\phpseclib3\Crypt\Hash::hash() trims the output for hashes but not for HMACs. as such, we trim the output here) + return pack('J*', ...$hash); + } + /** * __toString() magic method */ diff --git a/lam/lib/3rdParty/composer/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/TBSCertList.php b/lam/lib/3rdParty/composer/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/TBSCertList.php index 49b3cfc57..8e00f4d85 100644 --- a/lam/lib/3rdParty/composer/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/TBSCertList.php +++ b/lam/lib/3rdParty/composer/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/TBSCertList.php @@ -27,9 +27,9 @@ abstract class TBSCertList 'children' => [ 'version' => [ 'type' => ASN1::TYPE_INTEGER, - 'mapping' => ['v1', 'v2', 'v3'], + 'mapping' => ['v1', 'v2'], 'optional' => true, - 'default' => 'v2' + 'default' => 'v1' ], 'signature' => AlgorithmIdentifier::MAP, 'issuer' => Name::MAP, diff --git a/lam/lib/3rdParty/composer/phpseclib/phpseclib/phpseclib/File/X509.php b/lam/lib/3rdParty/composer/phpseclib/phpseclib/phpseclib/File/X509.php index 18d2f53e6..f4d96a26e 100644 --- a/lam/lib/3rdParty/composer/phpseclib/phpseclib/phpseclib/File/X509.php +++ b/lam/lib/3rdParty/composer/phpseclib/phpseclib/phpseclib/File/X509.php @@ -2904,11 +2904,11 @@ class X509 $version = isset($tbsCertList['version']) ? $tbsCertList['version'] : 0; if (!$version) { if (!empty($tbsCertList['crlExtensions'])) { - $version = 1; // v2. + $version = 'v2'; // v2. } elseif (!empty($tbsCertList['revokedCertificates'])) { foreach ($tbsCertList['revokedCertificates'] as $cert) { if (!empty($cert['crlEntryExtensions'])) { - $version = 1; // v2. + $version = 'v2'; // v2. } } } diff --git a/lam/lib/3rdParty/composer/phpseclib/phpseclib/phpseclib/Net/SFTP.php b/lam/lib/3rdParty/composer/phpseclib/phpseclib/phpseclib/Net/SFTP.php index caf2a0a31..1e61e0bb3 100644 --- a/lam/lib/3rdParty/composer/phpseclib/phpseclib/phpseclib/Net/SFTP.php +++ b/lam/lib/3rdParty/composer/phpseclib/phpseclib/phpseclib/Net/SFTP.php @@ -391,7 +391,8 @@ class SFTP extends SSH2 104 => 'NET_SFTP_NAME', 105 => 'NET_SFTP_ATTRS', - 200 => 'NET_SFTP_EXTENDED' + 200 => 'NET_SFTP_EXTENDED', + 201 => 'NET_SFTP_EXTENDED_REPLY' ]; self::$status_codes = [ 0 => 'NET_SFTP_STATUS_OK', @@ -3496,6 +3497,24 @@ class SFTP extends SSH2 return $temp; } + /** + * Get supported SFTP extensions + * + * @return array + */ + public function getSupportedExtensions() + { + if (!($this->bitmap & SSH2::MASK_LOGIN)) { + return false; + } + + if (!$this->partial_init) { + $this->partial_init_sftp_connection(); + } + + return $this->extensions; + } + /** * Get supported SFTP versions * @@ -3553,4 +3572,124 @@ class SFTP extends SSH2 { $this->preserveTime = false; } + + /** + * POSIX Rename + * + * Where rename() fails "if there already exists a file with the name specified by newpath" + * (draft-ietf-secsh-filexfer-02#section-6.5), posix_rename() overwrites the existing file in an atomic fashion. + * ie. "there is no observable instant in time where the name does not refer to either the old or the new file" + * (draft-ietf-secsh-filexfer-13#page-39). + * + * @param string $oldname + * @param string $newname + * @return bool + */ + public function posix_rename($oldname, $newname) + { + if (!$this->precheck()) { + return false; + } + + $oldname = $this->realpath($oldname); + $newname = $this->realpath($newname); + if ($oldname === false || $newname === false) { + return false; + } + + if ($this->version >= 5) { + $packet = Strings::packSSH2('ssN', $oldname, $newname, 2); // 2 = SSH_FXP_RENAME_ATOMIC + $this->send_sftp_packet(NET_SFTP_RENAME, $packet); + } elseif (isset($this->extensions['posix-rename@openssh.com']) && $this->extensions['posix-rename@openssh.com'] === '1') { + $packet = Strings::packSSH2('sss', 'posix-rename@openssh.com', $oldname, $newname); + $this->send_sftp_packet(NET_SFTP_EXTENDED, $packet); + } else { + throw new \RuntimeException( + "Extension 'posix-rename@openssh.com' is not supported by the server. " . + "Call getSupportedVersions() to see a list of supported extension" + ); + } + + $response = $this->get_sftp_packet(); + if ($this->packet_type != NET_SFTP_STATUS) { + throw new \UnexpectedValueException('Expected NET_SFTP_STATUS. ' + . 'Got packet type: ' . $this->packet_type); + } + + // if $status isn't SSH_FX_OK it's probably SSH_FX_NO_SUCH_FILE or SSH_FX_PERMISSION_DENIED + list($status) = Strings::unpackSSH2('N', $response); + if ($status != NET_SFTP_STATUS_OK) { + $this->logError($response, $status); + return false; + } + + // don't move the stat cache entry over since this operation could very well change the + // atime and mtime attributes + //$this->update_stat_cache($newname, $this->query_stat_cache($oldname)); + $this->remove_from_stat_cache($oldname); + $this->remove_from_stat_cache($newname); + + return true; + } + + /** + * Returns general information about a file system. + * + * The function statvfs() returns information about a mounted filesystem. + * @see https://man7.org/linux/man-pages/man3/statvfs.3.html + * + * @param string $path + * @return false|array{bsize: int, frsize: int, blocks: int, bfree: int, bavail: int, files: int, ffree: int, favail: int, fsid: int, flag: int, namemax: int} + */ + public function statvfs($path) + { + if (!$this->precheck()) { + return false; + } + + if (!isset($this->extensions['statvfs@openssh.com']) || $this->extensions['statvfs@openssh.com'] !== '2') { + throw new \RuntimeException( + "Extension 'statvfs@openssh.com' is not supported by the server. " . + "Call getSupportedVersions() to see a list of supported extension" + ); + } + + $realpath = $this->realpath($path); + if ($realpath === false) { + return false; + } + + $packet = Strings::packSSH2('ss', 'statvfs@openssh.com', $realpath); + $this->send_sftp_packet(NET_SFTP_EXTENDED, $packet); + + $response = $this->get_sftp_packet(); + if ($this->packet_type !== NET_SFTP_EXTENDED_REPLY) { + throw new \UnexpectedValueException( + 'Expected SSH_FXP_EXTENDED_REPLY. ' + . 'Got packet type: ' . $this->packet_type + ); + } + + /** + * These requests return a SSH_FXP_STATUS reply on failure. On success they + * return the following SSH_FXP_EXTENDED_REPLY reply: + * + * uint32 id + * uint64 f_bsize file system block size + * uint64 f_frsize fundamental fs block size + * uint64 f_blocks number of blocks (unit f_frsize) + * uint64 f_bfree free blocks in file system + * uint64 f_bavail free blocks for non-root + * uint64 f_files total file inodes + * uint64 f_ffree free file inodes + * uint64 f_favail free file inodes for to non-root + * uint64 f_fsid file system id + * uint64 f_flag bit mask of f_flag values + * uint64 f_namemax maximum filename length + */ + return array_combine( + ['bsize', 'frsize', 'blocks', 'bfree', 'bavail', 'files', 'ffree', 'favail', 'fsid', 'flag', 'namemax'], + Strings::unpackSSH2('QQQQQQQQQQQ', $response) + ); + } } diff --git a/lam/lib/3rdParty/composer/phpseclib/phpseclib/phpseclib/Net/SSH2.php b/lam/lib/3rdParty/composer/phpseclib/phpseclib/phpseclib/Net/SSH2.php index ede874331..43ddbccd6 100644 --- a/lam/lib/3rdParty/composer/phpseclib/phpseclib/phpseclib/Net/SSH2.php +++ b/lam/lib/3rdParty/composer/phpseclib/phpseclib/phpseclib/Net/SSH2.php @@ -104,6 +104,7 @@ class SSH2 const MASK_LOGIN_REQ = 0x00000004; const MASK_LOGIN = 0x00000008; const MASK_SHELL = 0x00000010; + const MASK_DISCONNECT = 0x00000020; /* * Channel constants @@ -1348,8 +1349,6 @@ class SSH2 $this->curTimeout = $this->timeout; - $this->last_packet = microtime(true); - if (!is_resource($this->fsock)) { $start = microtime(true); // with stream_select a timeout of 0 means that no timeout takes place; @@ -1368,12 +1367,21 @@ class SSH2 throw new \RuntimeException('Connection timed out whilst attempting to open socket connection'); } } + + if (defined('NET_SSH2_LOGGING')) { + $this->append_log('(fsockopen took ' . round($elapsed, 4) . 's)', ''); + } } $this->identifier = $this->generate_identifier(); if ($this->send_id_string_first) { + $start = microtime(true); fputs($this->fsock, $this->identifier . "\r\n"); + $elapsed = round(microtime(true) - $start, 4); + if (defined('NET_SSH2_LOGGING')) { + $this->append_log("-> (network: $elapsed)", $this->identifier . "\r\n"); + } } /* According to the SSH2 specs, @@ -1384,6 +1392,7 @@ class SSH2 in ISO-10646 UTF-8 [RFC3629] (language is not specified). Clients MUST be able to process such lines." */ $data = ''; + $totalElapsed = 0; while (!feof($this->fsock) && !preg_match('#(.*)^(SSH-(\d\.\d+).*)#ms', $data, $matches)) { $line = ''; while (true) { @@ -1400,28 +1409,21 @@ class SSH2 throw new \RuntimeException('Connection timed out whilst receiving server identification string'); } $elapsed = microtime(true) - $start; + $totalElapsed += $elapsed; $this->curTimeout -= $elapsed; } $temp = stream_get_line($this->fsock, 255, "\n"); if ($temp === false) { - throw new \RuntimeException('Error reading from socket'); + throw new \RuntimeException('Error reading SSH identification string; are you sure you\'re connecting to an SSH server?'); } + + $line .= $temp; if (strlen($temp) == 255) { continue; } - $line .= "$temp\n"; - - // quoting RFC4253, "Implementers who wish to maintain - // compatibility with older, undocumented versions of this protocol may - // want to process the identification string without expecting the - // presence of the carriage return character for reasons described in - // Section 5 of this document." - - //if (substr($line, -2) == "\r\n") { - // break; - //} + $line .= "\n"; break; } @@ -1429,19 +1431,18 @@ class SSH2 $data .= $line; } + if (defined('NET_SSH2_LOGGING')) { + $this->append_log('<- (network: ' . round($totalElapsed, 4) . ')', $line); + } + if (feof($this->fsock)) { $this->bitmap = 0; - throw new ConnectionClosedException('Connection closed by server'); + throw new ConnectionClosedException('Connection closed by server; are you sure you\'re connected to an SSH server?'); } $extra = $matches[1]; - if (defined('NET_SSH2_LOGGING')) { - $this->append_log('<-', $matches[0]); - $this->append_log('->', $this->identifier . "\r\n"); - } - - $this->server_identifier = trim($temp, "\r\n"); + $this->server_identifier = trim($data, "\r\n"); if (strlen($extra)) { $this->errors[] = $data; } @@ -1464,9 +1465,16 @@ class SSH2 $this->errorOnMultipleChannels = $match; if (!$this->send_id_string_first) { + $start = microtime(true); fputs($this->fsock, $this->identifier . "\r\n"); + $elapsed = round(microtime(true) - $start, 4); + if (defined('NET_SSH2_LOGGING')) { + $this->append_log("-> (network: $elapsed)", $this->identifier . "\r\n"); + } } + $this->last_packet = microtime(true); + if (!$this->send_kex_first) { $response = $this->get_binary_packet_or_close(NET_SSH2_MSG_KEXINIT); $this->key_exchange($response); @@ -4593,7 +4601,12 @@ class SSH2 */ protected function disconnect_helper($reason) { - if ($this->bitmap & self::MASK_CONNECTED) { + if ($this->bitmap & self::MASK_DISCONNECT) { + // Disregard subsequent disconnect requests + return false; + } + $this->bitmap |= self::MASK_DISCONNECT; + if ($this->isConnected()) { $data = Strings::packSSH2('CNss', NET_SSH2_MSG_DISCONNECT, $reason, '', ''); try { $this->send_binary_packet($data); @@ -4664,9 +4677,12 @@ class SSH2 { $output = ''; for ($i = 0; $i < count($message_log); $i++) { - $output .= $message_number_log[$i] . "\r\n"; + $output .= $message_number_log[$i]; $current_log = $message_log[$i]; $j = 0; + if (strlen($current_log)) { + $output .= "\r\n"; + } do { if (strlen($current_log)) { $output .= str_pad(dechex($j), 7, '0', STR_PAD_LEFT) . '0 '; @@ -4977,22 +4993,24 @@ class SSH2 return [ 'hmac-sha2-256-etm@openssh.com', 'hmac-sha2-512-etm@openssh.com', - 'umac-64-etm@openssh.com', - 'umac-128-etm@openssh.com', 'hmac-sha1-etm@openssh.com', // from : 'hmac-sha2-256',// RECOMMENDED HMAC-SHA256 (digest length = key length = 32) 'hmac-sha2-512',// OPTIONAL HMAC-SHA512 (digest length = key length = 64) - // from : - 'umac-64@openssh.com', - 'umac-128@openssh.com', - 'hmac-sha1-96', // RECOMMENDED first 96 bits of HMAC-SHA1 (digest length = 12, key length = 20) 'hmac-sha1', // REQUIRED HMAC-SHA1 (digest length = key length = 20) 'hmac-md5-96', // OPTIONAL first 96 bits of HMAC-MD5 (digest length = 12, key length = 16) 'hmac-md5', // OPTIONAL HMAC-MD5 (digest length = key length = 16) + + 'umac-64-etm@openssh.com', + 'umac-128-etm@openssh.com', + + // from : + 'umac-64@openssh.com', + 'umac-128@openssh.com', + //'none' // OPTIONAL no MAC; NOT RECOMMENDED ]; } @@ -5075,14 +5093,14 @@ class SSH2 if (isset($preferred['kex'])) { $preferred['kex'] = array_intersect( - $preferred['kex'], + is_string($preferred['kex']) ? [$preferred['kex']] : $preferred['kex'], static::getSupportedKEXAlgorithms() ); } if (isset($preferred['hostkey'])) { $preferred['hostkey'] = array_intersect( - $preferred['hostkey'], + is_string($preferred['hostkey']) ? [$preferred['hostkey']] : $preferred['hostkey'], static::getSupportedHostKeyAlgorithms() ); } @@ -5093,19 +5111,19 @@ class SSH2 $a = &$preferred[$key]; if (isset($a['crypt'])) { $a['crypt'] = array_intersect( - $a['crypt'], + is_string($a['crypt']) ? [$a['crypt']] : $a['crypt'], static::getSupportedEncryptionAlgorithms() ); } if (isset($a['comp'])) { $a['comp'] = array_intersect( - $a['comp'], + is_string($a['comp']) ? [$a['comp']] : $a['comp'], static::getSupportedCompressionAlgorithms() ); } if (isset($a['mac'])) { $a['mac'] = array_intersect( - $a['mac'], + is_string($a['mac']) ? [$a['mac']] : $a['mac'], static::getSupportedMACAlgorithms() ); } diff --git a/lam/lib/3rdParty/composer/psr/log/src/LoggerInterface.php b/lam/lib/3rdParty/composer/psr/log/src/LoggerInterface.php index 8afabc90c..cb4cf648b 100644 --- a/lam/lib/3rdParty/composer/psr/log/src/LoggerInterface.php +++ b/lam/lib/3rdParty/composer/psr/log/src/LoggerInterface.php @@ -89,6 +89,7 @@ interface LoggerInterface /** * Logs with an arbitrary level. * + * @param mixed $level * @param mixed[] $context * * @throws \Psr\Log\InvalidArgumentException diff --git a/lam/lib/3rdParty/composer/symfony/http-client-contracts/HttpClientInterface.php b/lam/lib/3rdParty/composer/symfony/http-client-contracts/HttpClientInterface.php index 4bb1dd376..a7c873721 100644 --- a/lam/lib/3rdParty/composer/symfony/http-client-contracts/HttpClientInterface.php +++ b/lam/lib/3rdParty/composer/symfony/http-client-contracts/HttpClientInterface.php @@ -46,9 +46,9 @@ interface HttpClientInterface 'buffer' => true, // bool|resource|\Closure - whether the content of the response should be buffered or not, // or a stream resource where the response body should be written, // or a closure telling if/where the response should be buffered based on its headers - 'on_progress' => null, // callable(int $dlNow, int $dlSize, array $info) - throwing any exceptions MUST abort - // the request; it MUST be called on DNS resolution, on arrival of headers and on - // completion; it SHOULD be called on upload/download of data and at least 1/s + 'on_progress' => null, // callable(int $dlNow, int $dlSize, array $info) - throwing any exceptions MUST abort the + // request; it MUST be called on connection, on headers and on completion; it SHOULD be + // called on upload/download of data and at least 1/s 'resolve' => [], // string[] - a map of host to IP address that SHOULD replace DNS resolution 'proxy' => null, // string - by default, the proxy-related env vars handled by curl SHOULD be honored 'no_proxy' => null, // string - a comma separated list of hosts that do not require a proxy to be reached diff --git a/lam/lib/3rdParty/composer/symfony/http-client-contracts/Test/Fixtures/web/index.php b/lam/lib/3rdParty/composer/symfony/http-client-contracts/Test/Fixtures/web/index.php index 8e28bf532..a75001785 100644 --- a/lam/lib/3rdParty/composer/symfony/http-client-contracts/Test/Fixtures/web/index.php +++ b/lam/lib/3rdParty/composer/symfony/http-client-contracts/Test/Fixtures/web/index.php @@ -12,26 +12,32 @@ if (!$_POST) { $_POST['content-type'] = $_SERVER['HTTP_CONTENT_TYPE'] ?? '?'; } +$headers = [ + 'SERVER_PROTOCOL', + 'SERVER_NAME', + 'REQUEST_URI', + 'REQUEST_METHOD', + 'PHP_AUTH_USER', + 'PHP_AUTH_PW', + 'REMOTE_ADDR', + 'REMOTE_PORT', +]; + +foreach ($headers as $k) { + if (isset($_SERVER[$k])) { + $vars[$k] = $_SERVER[$k]; + } +} + foreach ($_SERVER as $k => $v) { - switch ($k) { - default: - if (!str_starts_with($k, 'HTTP_')) { - continue 2; - } - // no break - case 'SERVER_NAME': - case 'SERVER_PROTOCOL': - case 'REQUEST_URI': - case 'REQUEST_METHOD': - case 'PHP_AUTH_USER': - case 'PHP_AUTH_PW': - $vars[$k] = $v; + if (str_starts_with($k, 'HTTP_')) { + $vars[$k] = $v; } } $json = json_encode($vars, \JSON_PRETTY_PRINT | \JSON_UNESCAPED_SLASHES | \JSON_UNESCAPED_UNICODE); -switch ($vars['REQUEST_URI']) { +switch (parse_url($vars['REQUEST_URI'], \PHP_URL_PATH)) { default: exit; @@ -94,7 +100,8 @@ switch ($vars['REQUEST_URI']) { case '/302': if (!isset($vars['HTTP_AUTHORIZATION'])) { - header('Location: http://localhost:8057/', true, 302); + $location = $_GET['location'] ?? 'http://localhost:8057/'; + header('Location: '.$location, true, 302); } break; diff --git a/lam/lib/3rdParty/composer/symfony/http-client-contracts/Test/HttpClientTestCase.php b/lam/lib/3rdParty/composer/symfony/http-client-contracts/Test/HttpClientTestCase.php index ec87d06d1..76b306077 100644 --- a/lam/lib/3rdParty/composer/symfony/http-client-contracts/Test/HttpClientTestCase.php +++ b/lam/lib/3rdParty/composer/symfony/http-client-contracts/Test/HttpClientTestCase.php @@ -25,6 +25,10 @@ abstract class HttpClientTestCase extends TestCase { public static function setUpBeforeClass(): void { + if (!function_exists('ob_gzhandler')) { + static::markTestSkipped('The "ob_gzhandler" function is not available.'); + } + TestHttpServer::start(); } @@ -32,6 +36,7 @@ abstract class HttpClientTestCase extends TestCase { TestHttpServer::stop(8067); TestHttpServer::stop(8077); + TestHttpServer::stop(8087); } abstract protected function getHttpClient(string $testCase): HttpClientInterface; @@ -730,6 +735,18 @@ abstract class HttpClientTestCase extends TestCase $this->assertSame(200, $response->getStatusCode()); } + public function testIPv6Resolve() + { + TestHttpServer::start(-8087); + + $client = $this->getHttpClient(__FUNCTION__); + $response = $client->request('GET', 'http://symfony.com:8087/', [ + 'resolve' => ['symfony.com' => '::1'], + ]); + + $this->assertSame(200, $response->getStatusCode()); + } + public function testNotATimeout() { $client = $this->getHttpClient(__FUNCTION__); @@ -1144,4 +1161,33 @@ abstract class HttpClientTestCase extends TestCase $response = $client2->request('GET', '/'); $this->assertSame(200, $response->getStatusCode()); } + + public function testBindToPort() + { + $client = $this->getHttpClient(__FUNCTION__); + $response = $client->request('GET', 'http://localhost:8057', ['bindto' => '127.0.0.1:9876']); + $response->getStatusCode(); + + $vars = $response->toArray(); + + self::assertSame('127.0.0.1', $vars['REMOTE_ADDR']); + self::assertSame('9876', $vars['REMOTE_PORT']); + } + + public function testBindToPortV6() + { + TestHttpServer::start(-8087); + + $client = $this->getHttpClient(__FUNCTION__); + $response = $client->request('GET', 'http://[::1]:8087', ['bindto' => '[::1]:9876']); + $response->getStatusCode(); + + $vars = $response->toArray(); + + self::assertSame('::1', $vars['REMOTE_ADDR']); + + if ('\\' !== \DIRECTORY_SEPARATOR) { + self::assertSame('9876', $vars['REMOTE_PORT']); + } + } } diff --git a/lam/lib/3rdParty/composer/symfony/http-client-contracts/Test/TestHttpServer.php b/lam/lib/3rdParty/composer/symfony/http-client-contracts/Test/TestHttpServer.php index 2a278479c..ec4705049 100644 --- a/lam/lib/3rdParty/composer/symfony/http-client-contracts/Test/TestHttpServer.php +++ b/lam/lib/3rdParty/composer/symfony/http-client-contracts/Test/TestHttpServer.php @@ -21,10 +21,17 @@ class TestHttpServer /** * @param string|null $workingDirectory */ - public static function start(int $port = 8057/* , string $workingDirectory = null */): Process + public static function start(int $port = 8057/* , ?string $workingDirectory = null */): Process { $workingDirectory = \func_get_args()[1] ?? __DIR__.'/Fixtures/web'; + if (0 > $port) { + $port = -$port; + $ip = '[::1]'; + } else { + $ip = '127.0.0.1'; + } + if (isset(self::$process[$port])) { self::$process[$port]->stop(); } else { @@ -34,14 +41,14 @@ class TestHttpServer } $finder = new PhpExecutableFinder(); - $process = new Process(array_merge([$finder->find(false)], $finder->findArguments(), ['-dopcache.enable=0', '-dvariables_order=EGPCS', '-S', '127.0.0.1:'.$port])); + $process = new Process(array_merge([$finder->find(false)], $finder->findArguments(), ['-dopcache.enable=0', '-dvariables_order=EGPCS', '-S', $ip.':'.$port])); $process->setWorkingDirectory($workingDirectory); $process->start(); self::$process[$port] = $process; do { usleep(50000); - } while (!@fopen('http://127.0.0.1:'.$port, 'r')); + } while (!@fopen('http://'.$ip.':'.$port, 'r')); return $process; } diff --git a/lam/lib/3rdParty/composer/symfony/http-client/AmpHttpClient.php b/lam/lib/3rdParty/composer/symfony/http-client/AmpHttpClient.php index f93aaa81e..a095d2081 100644 --- a/lam/lib/3rdParty/composer/symfony/http-client/AmpHttpClient.php +++ b/lam/lib/3rdParty/composer/symfony/http-client/AmpHttpClient.php @@ -118,6 +118,7 @@ final class AmpHttpClient implements HttpClientInterface, LoggerAwareInterface, } $request = new Request(implode('', $url), $method); + $request->setBodySizeLimit(0); if ($options['http_version']) { $request->setProtocolVersions(match ((float) $options['http_version']) { diff --git a/lam/lib/3rdParty/composer/symfony/http-client/CachingHttpClient.php b/lam/lib/3rdParty/composer/symfony/http-client/CachingHttpClient.php index b05b82636..34bc1189a 100644 --- a/lam/lib/3rdParty/composer/symfony/http-client/CachingHttpClient.php +++ b/lam/lib/3rdParty/composer/symfony/http-client/CachingHttpClient.php @@ -42,7 +42,7 @@ class CachingHttpClient implements HttpClientInterface, ResetInterface public function __construct(HttpClientInterface $client, StoreInterface $store, array $defaultOptions = []) { if (!class_exists(HttpClientKernel::class)) { - throw new \LogicException(sprintf('Using "%s" requires that the HttpKernel component version 4.3 or higher is installed, try running "composer require symfony/http-kernel:^5.4".', __CLASS__)); + throw new \LogicException(sprintf('Using "%s" requires the HttpKernel component, try running "composer require symfony/http-kernel".', __CLASS__)); } $this->client = $client; diff --git a/lam/lib/3rdParty/composer/symfony/http-client/CurlHttpClient.php b/lam/lib/3rdParty/composer/symfony/http-client/CurlHttpClient.php index 419aa890c..7d9962005 100644 --- a/lam/lib/3rdParty/composer/symfony/http-client/CurlHttpClient.php +++ b/lam/lib/3rdParty/composer/symfony/http-client/CurlHttpClient.php @@ -278,7 +278,7 @@ final class CurlHttpClient implements HttpClientInterface, LoggerAwareInterface, if (file_exists($options['bindto'])) { $curlopts[\CURLOPT_UNIX_SOCKET_PATH] = $options['bindto']; } elseif (!str_starts_with($options['bindto'], 'if!') && preg_match('/^(.*):(\d+)$/', $options['bindto'], $matches)) { - $curlopts[\CURLOPT_INTERFACE] = $matches[1]; + $curlopts[\CURLOPT_INTERFACE] = trim($matches[1], '[]'); $curlopts[\CURLOPT_LOCALPORT] = $matches[2]; } else { $curlopts[\CURLOPT_INTERFACE] = $options['bindto']; @@ -323,7 +323,7 @@ final class CurlHttpClient implements HttpClientInterface, LoggerAwareInterface, } } - return $pushedResponse ?? new CurlResponse($multi, $ch, $options, $this->logger, $method, self::createRedirectResolver($options, $host, $port), CurlClientState::$curlVersion['version_number'], $url); + return $pushedResponse ?? new CurlResponse($multi, $ch, $options, $this->logger, $method, self::createRedirectResolver($options, $authority), CurlClientState::$curlVersion['version_number'], $url); } public function stream(ResponseInterface|iterable $responses, ?float $timeout = null): ResponseStreamInterface @@ -404,12 +404,11 @@ final class CurlHttpClient implements HttpClientInterface, LoggerAwareInterface, * * Work around CVE-2018-1000007: Authorization and Cookie headers should not follow redirects - fixed in Curl 7.64 */ - private static function createRedirectResolver(array $options, string $host, int $port): \Closure + private static function createRedirectResolver(array $options, string $authority): \Closure { $redirectHeaders = []; if (0 < $options['max_redirects']) { - $redirectHeaders['host'] = $host; - $redirectHeaders['port'] = $port; + $redirectHeaders['authority'] = $authority; $redirectHeaders['with_auth'] = $redirectHeaders['no_auth'] = array_filter($options['headers'], static fn ($h) => 0 !== stripos($h, 'Host:')); if (isset($options['normalized_headers']['authorization'][0]) || isset($options['normalized_headers']['cookie'][0])) { @@ -420,6 +419,8 @@ final class CurlHttpClient implements HttpClientInterface, LoggerAwareInterface, return static function ($ch, string $location, bool $noContent) use (&$redirectHeaders, $options) { try { $location = self::parseUrl($location); + $url = self::parseUrl(curl_getinfo($ch, \CURLINFO_EFFECTIVE_URL)); + $url = self::resolveUrl($location, $url); } catch (InvalidArgumentException) { return null; } @@ -430,17 +431,13 @@ final class CurlHttpClient implements HttpClientInterface, LoggerAwareInterface, $redirectHeaders['with_auth'] = array_filter($redirectHeaders['with_auth'], $filterContentHeaders); } - if ($redirectHeaders && $host = parse_url('http:'.$location['authority'], \PHP_URL_HOST)) { - $port = parse_url('http:'.$location['authority'], \PHP_URL_PORT) ?: ('http:' === $location['scheme'] ? 80 : 443); - $requestHeaders = $redirectHeaders['host'] === $host && $redirectHeaders['port'] === $port ? $redirectHeaders['with_auth'] : $redirectHeaders['no_auth']; + if ($redirectHeaders && isset($location['authority'])) { + $requestHeaders = $location['authority'] === $redirectHeaders['authority'] ? $redirectHeaders['with_auth'] : $redirectHeaders['no_auth']; curl_setopt($ch, \CURLOPT_HTTPHEADER, $requestHeaders); } elseif ($noContent && $redirectHeaders) { curl_setopt($ch, \CURLOPT_HTTPHEADER, $redirectHeaders['with_auth']); } - $url = self::parseUrl(curl_getinfo($ch, \CURLINFO_EFFECTIVE_URL)); - $url = self::resolveUrl($location, $url); - curl_setopt($ch, \CURLOPT_PROXY, self::getProxyUrl($options['proxy'], $url)); return implode('', $url); diff --git a/lam/lib/3rdParty/composer/symfony/http-client/DataCollector/HttpClientDataCollector.php b/lam/lib/3rdParty/composer/symfony/http-client/DataCollector/HttpClientDataCollector.php index 8e8546273..a749aa61c 100644 --- a/lam/lib/3rdParty/composer/symfony/http-client/DataCollector/HttpClientDataCollector.php +++ b/lam/lib/3rdParty/composer/symfony/http-client/DataCollector/HttpClientDataCollector.php @@ -252,8 +252,8 @@ final class HttpClientDataCollector extends DataCollector implements LateDataCol { static $useProcess; - if ($useProcess ??= class_exists(Process::class)) { - return (new Process([$payload]))->getCommandLine(); + if ($useProcess ??= function_exists('proc_open') && class_exists(Process::class)) { + return substr((new Process(['', $payload]))->getCommandLine(), 3); } if ('\\' === \DIRECTORY_SEPARATOR) { diff --git a/lam/lib/3rdParty/composer/symfony/http-client/HttpClientTrait.php b/lam/lib/3rdParty/composer/symfony/http-client/HttpClientTrait.php index 393da774c..89446ff8c 100644 --- a/lam/lib/3rdParty/composer/symfony/http-client/HttpClientTrait.php +++ b/lam/lib/3rdParty/composer/symfony/http-client/HttpClientTrait.php @@ -207,7 +207,13 @@ trait HttpClientTrait if ($resolve = $options['resolve'] ?? false) { $options['resolve'] = []; foreach ($resolve as $k => $v) { - $options['resolve'][substr(self::parseUrl('http://'.$k)['authority'], 2)] = (string) $v; + if ('' === $v = (string) $v) { + $v = null; + } elseif ('[' === $v[0] && ']' === substr($v, -1) && str_contains($v, ':')) { + $v = substr($v, 1, -1); + } + + $options['resolve'][substr(self::parseUrl('http://'.$k)['authority'], 2)] = $v; } } @@ -230,7 +236,13 @@ trait HttpClientTrait if ($resolve = $defaultOptions['resolve'] ?? false) { foreach ($resolve as $k => $v) { - $options['resolve'] += [substr(self::parseUrl('http://'.$k)['authority'], 2) => (string) $v]; + if ('' === $v = (string) $v) { + $v = null; + } elseif ('[' === $v[0] && ']' === substr($v, -1) && str_contains($v, ':')) { + $v = substr($v, 1, -1); + } + + $options['resolve'] += [substr(self::parseUrl('http://'.$k)['authority'], 2) => $v]; } } @@ -626,7 +638,9 @@ trait HttpClientTrait */ private static function parseUrl(string $url, array $query = [], array $allowedSchemes = ['http' => 80, 'https' => 443]): array { - if (false === $parts = parse_url($url)) { + $tail = ''; + + if (false === $parts = parse_url(\strlen($url) !== strcspn($url, '?#') ? $url : $url.$tail = '#')) { throw new InvalidArgumentException(sprintf('Malformed URL "%s".', $url)); } @@ -634,18 +648,27 @@ trait HttpClientTrait $parts['query'] = self::mergeQueryString($parts['query'] ?? null, $query, true); } + $scheme = $parts['scheme'] ?? null; + $host = $parts['host'] ?? null; + + if (!$scheme && $host && !str_starts_with($url, '//')) { + $parts = parse_url(':/'.$url.$tail); + $parts['path'] = substr($parts['path'], 2); + $scheme = $host = null; + } + $port = $parts['port'] ?? 0; - if (null !== $scheme = $parts['scheme'] ?? null) { + if (null !== $scheme) { if (!isset($allowedSchemes[$scheme = strtolower($scheme)])) { - throw new InvalidArgumentException(sprintf('Unsupported scheme in "%s".', $url)); + throw new InvalidArgumentException(sprintf('Unsupported scheme in "%s": "%s" expected.', $url, implode('" or "', array_keys($allowedSchemes)))); } $port = $allowedSchemes[$scheme] === $port ? 0 : $port; $scheme .= ':'; } - if (null !== $host = $parts['host'] ?? null) { + if (null !== $host) { if (!\defined('INTL_IDNA_VARIANT_UTS46') && preg_match('/[\x80-\xFF]/', $host)) { throw new InvalidArgumentException(sprintf('Unsupported IDN "%s", try enabling the "intl" PHP extension or running "composer require symfony/polyfill-intl-idn".', $host)); } @@ -673,7 +696,7 @@ trait HttpClientTrait 'authority' => null !== $host ? '//'.(isset($parts['user']) ? $parts['user'].(isset($parts['pass']) ? ':'.$parts['pass'] : '').'@' : '').$host : null, 'path' => isset($parts['path'][0]) ? $parts['path'] : null, 'query' => isset($parts['query']) ? '?'.$parts['query'] : null, - 'fragment' => isset($parts['fragment']) ? '#'.$parts['fragment'] : null, + 'fragment' => isset($parts['fragment']) && !$tail ? '#'.$parts['fragment'] : null, ]; } diff --git a/lam/lib/3rdParty/composer/symfony/http-client/HttpOptions.php b/lam/lib/3rdParty/composer/symfony/http-client/HttpOptions.php index 57590d3c1..e21605a7a 100644 --- a/lam/lib/3rdParty/composer/symfony/http-client/HttpOptions.php +++ b/lam/lib/3rdParty/composer/symfony/http-client/HttpOptions.php @@ -156,6 +156,8 @@ class HttpOptions } /** + * @param callable(int, int, array, \Closure|null=):void $callback + * * @return $this */ public function setOnProgress(callable $callback): static diff --git a/lam/lib/3rdParty/composer/symfony/http-client/Internal/AmpListener.php b/lam/lib/3rdParty/composer/symfony/http-client/Internal/AmpListener.php index 95c3bb0ed..221a8cba9 100644 --- a/lam/lib/3rdParty/composer/symfony/http-client/Internal/AmpListener.php +++ b/lam/lib/3rdParty/composer/symfony/http-client/Internal/AmpListener.php @@ -81,12 +81,12 @@ class AmpListener implements EventListener public function startSendingRequest(Request $request, Stream $stream): Promise { $host = $stream->getRemoteAddress()->getHost(); + $this->info['primary_ip'] = $host; if (str_contains($host, ':')) { $host = '['.$host.']'; } - $this->info['primary_ip'] = $host; $this->info['primary_port'] = $stream->getRemoteAddress()->getPort(); $this->info['pretransfer_time'] = microtime(true) - $this->info['start_time']; $this->info['debug'] .= sprintf("* Connected to %s (%s) port %d\n", $request->getUri()->getHost(), $host, $this->info['primary_port']); diff --git a/lam/lib/3rdParty/composer/symfony/http-client/Internal/AmpResolver.php b/lam/lib/3rdParty/composer/symfony/http-client/Internal/AmpResolver.php index 9137be228..4c4af4416 100644 --- a/lam/lib/3rdParty/composer/symfony/http-client/Internal/AmpResolver.php +++ b/lam/lib/3rdParty/composer/symfony/http-client/Internal/AmpResolver.php @@ -34,19 +34,31 @@ class AmpResolver implements Dns\Resolver public function resolve(string $name, ?int $typeRestriction = null): Promise { - if (!isset($this->dnsMap[$name]) || !\in_array($typeRestriction, [Record::A, null], true)) { + $recordType = Record::A; + $ip = $this->dnsMap[$name] ?? null; + + if (null !== $ip && str_contains($ip, ':')) { + $recordType = Record::AAAA; + } + if (null === $ip || $recordType !== ($typeRestriction ?? $recordType)) { return Dns\resolver()->resolve($name, $typeRestriction); } - return new Success([new Record($this->dnsMap[$name], Record::A, null)]); + return new Success([new Record($ip, $recordType, null)]); } public function query(string $name, int $type): Promise { - if (!isset($this->dnsMap[$name]) || Record::A !== $type) { + $recordType = Record::A; + $ip = $this->dnsMap[$name] ?? null; + + if (null !== $ip && str_contains($ip, ':')) { + $recordType = Record::AAAA; + } + if (null === $ip || $recordType !== $type) { return Dns\resolver()->query($name, $type); } - return new Success([new Record($this->dnsMap[$name], Record::A, null)]); + return new Success([new Record($ip, $recordType, null)]); } } diff --git a/lam/lib/3rdParty/composer/symfony/http-client/Internal/CurlClientState.php b/lam/lib/3rdParty/composer/symfony/http-client/Internal/CurlClientState.php index ee0bafc11..2a15248eb 100644 --- a/lam/lib/3rdParty/composer/symfony/http-client/Internal/CurlClientState.php +++ b/lam/lib/3rdParty/composer/symfony/http-client/Internal/CurlClientState.php @@ -49,8 +49,8 @@ final class CurlClientState extends ClientState if (\defined('CURLPIPE_MULTIPLEX')) { curl_multi_setopt($this->handle, \CURLMOPT_PIPELINING, \CURLPIPE_MULTIPLEX); } - if (\defined('CURLMOPT_MAX_HOST_CONNECTIONS')) { - $maxHostConnections = curl_multi_setopt($this->handle, \CURLMOPT_MAX_HOST_CONNECTIONS, 0 < $maxHostConnections ? $maxHostConnections : \PHP_INT_MAX) ? 0 : $maxHostConnections; + if (\defined('CURLMOPT_MAX_HOST_CONNECTIONS') && 0 < $maxHostConnections) { + $maxHostConnections = curl_multi_setopt($this->handle, \CURLMOPT_MAX_HOST_CONNECTIONS, $maxHostConnections) ? 4294967295 : $maxHostConnections; } if (\defined('CURLMOPT_MAXCONNECTS') && 0 < $maxHostConnections) { curl_multi_setopt($this->handle, \CURLMOPT_MAXCONNECTS, $maxHostConnections); diff --git a/lam/lib/3rdParty/composer/symfony/http-client/NativeHttpClient.php b/lam/lib/3rdParty/composer/symfony/http-client/NativeHttpClient.php index db5cee698..7e13cbc56 100644 --- a/lam/lib/3rdParty/composer/symfony/http-client/NativeHttpClient.php +++ b/lam/lib/3rdParty/composer/symfony/http-client/NativeHttpClient.php @@ -80,6 +80,9 @@ final class NativeHttpClient implements HttpClientInterface, LoggerAwareInterfac if (str_starts_with($options['bindto'], 'host!')) { $options['bindto'] = substr($options['bindto'], 5); } + if ((\PHP_VERSION_ID < 80223 || 80300 <= \PHP_VERSION_ID && 80311 < \PHP_VERSION_ID) && '\\' === \DIRECTORY_SEPARATOR && '[' === $options['bindto'][0]) { + $options['bindto'] = preg_replace('{^\[[^\]]++\]}', '[$0]', $options['bindto']); + } } $hasContentLength = isset($options['normalized_headers']['content-length']); @@ -250,6 +253,7 @@ final class NativeHttpClient implements HttpClientInterface, LoggerAwareInterfac $context = stream_context_create($context, ['notification' => $notification]); $resolver = static function ($multi) use ($context, $options, $url, &$info, $onProgress) { + $authority = $url['authority']; [$host, $port] = self::parseHostPort($url, $info); if (!isset($options['normalized_headers']['host'])) { @@ -263,7 +267,7 @@ final class NativeHttpClient implements HttpClientInterface, LoggerAwareInterfac $url['authority'] = substr_replace($url['authority'], $ip, -\strlen($host) - \strlen($port), \strlen($host)); } - return [self::createRedirectResolver($options, $host, $port, $proxy, $info, $onProgress), implode('', $url)]; + return [self::createRedirectResolver($options, $authority, $proxy, $info, $onProgress), implode('', $url)]; }; return new NativeResponse($this->multi, $context, implode('', $url), $options, $info, $resolver, $onProgress, $this->logger); @@ -326,7 +330,12 @@ final class NativeHttpClient implements HttpClientInterface, LoggerAwareInterfac */ private static function dnsResolve(string $host, NativeClientState $multi, array &$info, ?\Closure $onProgress): string { - if (null === $ip = $multi->dnsCache[$host] ?? null) { + $flag = '' !== $host && '[' === $host[0] && ']' === $host[-1] && str_contains($host, ':') ? \FILTER_FLAG_IPV6 : \FILTER_FLAG_IPV4; + $ip = \FILTER_FLAG_IPV6 === $flag ? substr($host, 1, -1) : $host; + + if (filter_var($ip, \FILTER_VALIDATE_IP, $flag)) { + // The host is already an IP address + } elseif (null === $ip = $multi->dnsCache[$host] ?? null) { $info['debug'] .= "* Hostname was NOT found in DNS cache\n"; $now = microtime(true); @@ -334,13 +343,15 @@ final class NativeHttpClient implements HttpClientInterface, LoggerAwareInterfac throw new TransportException(sprintf('Could not resolve host "%s".', $host)); } - $info['namelookup_time'] = microtime(true) - ($info['start_time'] ?: $now); $multi->dnsCache[$host] = $ip = $ip[0]; $info['debug'] .= "* Added {$host}:0:{$ip} to DNS cache\n"; + $host = $ip; } else { $info['debug'] .= "* Hostname was found in DNS cache\n"; + $host = str_contains($ip, ':') ? "[$ip]" : $ip; } + $info['namelookup_time'] = microtime(true) - ($info['start_time'] ?: $now); $info['primary_ip'] = $ip; if ($onProgress) { @@ -348,17 +359,17 @@ final class NativeHttpClient implements HttpClientInterface, LoggerAwareInterfac $onProgress(); } - return $ip; + return $host; } /** * Handles redirects - the native logic is too buggy to be used. */ - private static function createRedirectResolver(array $options, string $host, string $port, ?array $proxy, array &$info, ?\Closure $onProgress): \Closure + private static function createRedirectResolver(array $options, string $authority, ?array $proxy, array &$info, ?\Closure $onProgress): \Closure { $redirectHeaders = []; if (0 < $maxRedirects = $options['max_redirects']) { - $redirectHeaders = ['host' => $host, 'port' => $port]; + $redirectHeaders = ['authority' => $authority]; $redirectHeaders['with_auth'] = $redirectHeaders['no_auth'] = array_filter($options['headers'], static fn ($h) => 0 !== stripos($h, 'Host:')); if (isset($options['normalized_headers']['authorization']) || isset($options['normalized_headers']['cookie'])) { @@ -375,13 +386,14 @@ final class NativeHttpClient implements HttpClientInterface, LoggerAwareInterfac try { $url = self::parseUrl($location); + $locationHasHost = isset($url['authority']); + $url = self::resolveUrl($url, $info['url']); } catch (InvalidArgumentException) { $info['redirect_url'] = null; return null; } - $url = self::resolveUrl($url, $info['url']); $info['redirect_url'] = implode('', $url); if ($info['redirect_count'] >= $maxRedirects) { @@ -414,9 +426,9 @@ final class NativeHttpClient implements HttpClientInterface, LoggerAwareInterfac [$host, $port] = self::parseHostPort($url, $info); - if (false !== (parse_url($location, \PHP_URL_HOST) ?? false)) { - // Authorization and Cookie headers MUST NOT follow except for the initial host name - $requestHeaders = $redirectHeaders['host'] === $host && $redirectHeaders['port'] === $port ? $redirectHeaders['with_auth'] : $redirectHeaders['no_auth']; + if ($locationHasHost) { + // Authorization and Cookie headers MUST NOT follow except for the initial authority name + $requestHeaders = $redirectHeaders['authority'] === $url['authority'] ? $redirectHeaders['with_auth'] : $redirectHeaders['no_auth']; $requestHeaders[] = 'Host: '.$host.$port; $dnsResolve = !self::configureHeadersAndProxy($context, $host, $requestHeaders, $proxy, 'https:' === $url['scheme']); } else { diff --git a/lam/lib/3rdParty/composer/symfony/http-client/NoPrivateNetworkHttpClient.php b/lam/lib/3rdParty/composer/symfony/http-client/NoPrivateNetworkHttpClient.php index 7bfe24db2..b38b0178b 100644 --- a/lam/lib/3rdParty/composer/symfony/http-client/NoPrivateNetworkHttpClient.php +++ b/lam/lib/3rdParty/composer/symfony/http-client/NoPrivateNetworkHttpClient.php @@ -13,9 +13,11 @@ namespace Symfony\Component\HttpClient; use Psr\Log\LoggerAwareInterface; use Psr\Log\LoggerInterface; -use Symfony\Component\HttpClient\Exception\InvalidArgumentException; use Symfony\Component\HttpClient\Exception\TransportException; +use Symfony\Component\HttpClient\Response\AsyncContext; +use Symfony\Component\HttpClient\Response\AsyncResponse; use Symfony\Component\HttpFoundation\IpUtils; +use Symfony\Contracts\HttpClient\ChunkInterface; use Symfony\Contracts\HttpClient\HttpClientInterface; use Symfony\Contracts\HttpClient\ResponseInterface; use Symfony\Contracts\HttpClient\ResponseStreamInterface; @@ -25,16 +27,21 @@ use Symfony\Contracts\Service\ResetInterface; * Decorator that blocks requests to private networks by default. * * @author Hallison Boaventura + * @author Nicolas Grekas */ final class NoPrivateNetworkHttpClient implements HttpClientInterface, LoggerAwareInterface, ResetInterface { use HttpClientTrait; + use AsyncDecoratorTrait; + private array $defaultOptions = self::OPTIONS_DEFAULTS; private HttpClientInterface $client; - private string|array|null $subnets; + private array|null $subnets; + private int $ipFlags; + private \ArrayObject $dnsCache; /** - * @param string|array|null $subnets String or array of subnets using CIDR notation that will be used by IpUtils. + * @param string|array|null $subnets String or array of subnets using CIDR notation that should be considered private. * If null is passed, the standard private subnets will be used. */ public function __construct(HttpClientInterface $client, string|array|null $subnets = null) @@ -43,33 +50,112 @@ final class NoPrivateNetworkHttpClient implements HttpClientInterface, LoggerAwa throw new \LogicException(sprintf('You cannot use "%s" if the HttpFoundation component is not installed. Try running "composer require symfony/http-foundation".', __CLASS__)); } + if (null === $subnets) { + $ipFlags = \FILTER_FLAG_IPV4 | \FILTER_FLAG_IPV6; + } else { + $ipFlags = 0; + foreach ((array) $subnets as $subnet) { + $ipFlags |= str_contains($subnet, ':') ? \FILTER_FLAG_IPV6 : \FILTER_FLAG_IPV4; + } + } + + if (!\defined('STREAM_PF_INET6')) { + $ipFlags &= ~\FILTER_FLAG_IPV6; + } + $this->client = $client; - $this->subnets = $subnets; + $this->subnets = null !== $subnets ? (array) $subnets : null; + $this->ipFlags = $ipFlags; + $this->dnsCache = new \ArrayObject(); } public function request(string $method, string $url, array $options = []): ResponseInterface { - $onProgress = $options['on_progress'] ?? null; - if (null !== $onProgress && !\is_callable($onProgress)) { - throw new InvalidArgumentException(sprintf('Option "on_progress" must be callable, "%s" given.', get_debug_type($onProgress))); + [$url, $options] = self::prepareRequest($method, $url, $options, $this->defaultOptions, true); + + $redirectHeaders = parse_url($url['authority']); + $host = $redirectHeaders['host']; + $url = implode('', $url); + $dnsCache = $this->dnsCache; + + $ip = self::dnsResolve($dnsCache, $host, $this->ipFlags, $options); + self::ipCheck($ip, $this->subnets, $this->ipFlags, $host, $url); + + if (0 < $maxRedirects = $options['max_redirects']) { + $options['max_redirects'] = 0; + $redirectHeaders['with_auth'] = $redirectHeaders['no_auth'] = $options['headers']; + + if (isset($options['normalized_headers']['host']) || isset($options['normalized_headers']['authorization']) || isset($options['normalized_headers']['cookie'])) { + $redirectHeaders['no_auth'] = array_filter($redirectHeaders['no_auth'], static function ($h) { + return 0 !== stripos($h, 'Host:') && 0 !== stripos($h, 'Authorization:') && 0 !== stripos($h, 'Cookie:'); + }); + } } + $onProgress = $options['on_progress'] ?? null; $subnets = $this->subnets; + $ipFlags = $this->ipFlags; - $options['on_progress'] = function (int $dlNow, int $dlSize, array $info) use ($onProgress, $subnets): void { + $options['on_progress'] = static function (int $dlNow, int $dlSize, array $info) use ($onProgress, $subnets, $ipFlags): void { static $lastPrimaryIp = ''; - if ($info['primary_ip'] !== $lastPrimaryIp) { - if ($info['primary_ip'] && IpUtils::checkIp($info['primary_ip'], $subnets ?? IpUtils::PRIVATE_SUBNETS)) { - throw new TransportException(sprintf('IP "%s" is blocked for "%s".', $info['primary_ip'], $info['url'])); - } + if (($info['primary_ip'] ?? '') !== $lastPrimaryIp) { + self::ipCheck($info['primary_ip'], $subnets, $ipFlags, null, $info['url']); $lastPrimaryIp = $info['primary_ip']; } null !== $onProgress && $onProgress($dlNow, $dlSize, $info); }; - return $this->client->request($method, $url, $options); + return new AsyncResponse($this->client, $method, $url, $options, static function (ChunkInterface $chunk, AsyncContext $context) use (&$method, &$options, $maxRedirects, &$redirectHeaders, $subnets, $ipFlags, $dnsCache): \Generator { + if (null !== $chunk->getError() || $chunk->isTimeout() || !$chunk->isFirst()) { + yield $chunk; + + return; + } + + $statusCode = $context->getStatusCode(); + + if ($statusCode < 300 || 400 <= $statusCode || null === $url = $context->getInfo('redirect_url')) { + $context->passthru(); + + yield $chunk; + + return; + } + + $host = parse_url($url, \PHP_URL_HOST); + $ip = self::dnsResolve($dnsCache, $host, $ipFlags, $options); + self::ipCheck($ip, $subnets, $ipFlags, $host, $url); + + // Do like curl and browsers: turn POST to GET on 301, 302 and 303 + if (303 === $statusCode || 'POST' === $method && \in_array($statusCode, [301, 302], true)) { + $method = 'HEAD' === $method ? 'HEAD' : 'GET'; + unset($options['body'], $options['json']); + + if (isset($options['normalized_headers']['content-length']) || isset($options['normalized_headers']['content-type']) || isset($options['normalized_headers']['transfer-encoding'])) { + $filterContentHeaders = static function ($h) { + return 0 !== stripos($h, 'Content-Length:') && 0 !== stripos($h, 'Content-Type:') && 0 !== stripos($h, 'Transfer-Encoding:'); + }; + $options['header'] = array_filter($options['header'], $filterContentHeaders); + $redirectHeaders['no_auth'] = array_filter($redirectHeaders['no_auth'], $filterContentHeaders); + $redirectHeaders['with_auth'] = array_filter($redirectHeaders['with_auth'], $filterContentHeaders); + } + } + + // Authorization and Cookie headers MUST NOT follow except for the initial host name + $port = parse_url($url, \PHP_URL_PORT); + $options['headers'] = $redirectHeaders['host'] === $host && ($redirectHeaders['port'] ?? null) === $port ? $redirectHeaders['with_auth'] : $redirectHeaders['no_auth']; + + static $redirectCount = 0; + $context->setInfo('redirect_count', ++$redirectCount); + + $context->replaceRequest($method, $url, $options); + + if ($redirectCount >= $maxRedirects) { + $context->passthru(); + } + }); } public function stream(ResponseInterface|iterable $responses, ?float $timeout = null): ResponseStreamInterface @@ -88,14 +174,73 @@ final class NoPrivateNetworkHttpClient implements HttpClientInterface, LoggerAwa { $clone = clone $this; $clone->client = $this->client->withOptions($options); + $clone->defaultOptions = self::mergeDefaultOptions($options, $this->defaultOptions); return $clone; } public function reset(): void { + $this->dnsCache->exchangeArray([]); + if ($this->client instanceof ResetInterface) { $this->client->reset(); } } + + private static function dnsResolve(\ArrayObject $dnsCache, string $host, int $ipFlags, array &$options): string + { + if ($ip = filter_var(trim($host, '[]'), \FILTER_VALIDATE_IP) ?: $options['resolve'][$host] ?? false) { + return $ip; + } + + if ($dnsCache->offsetExists($host)) { + return $dnsCache[$host]; + } + + if ((\FILTER_FLAG_IPV4 & $ipFlags) && $ip = gethostbynamel($host)) { + return $options['resolve'][$host] = $dnsCache[$host] = $ip[0]; + } + + if (!(\FILTER_FLAG_IPV6 & $ipFlags)) { + return $host; + } + + if ($ip = dns_get_record($host, \DNS_AAAA)) { + $ip = $ip[0]['ipv6']; + } elseif (extension_loaded('sockets')) { + if (!$info = socket_addrinfo_lookup($host, 0, ['ai_socktype' => \SOCK_STREAM, 'ai_family' => \AF_INET6])) { + return $host; + } + + $ip = socket_addrinfo_explain($info[0])['ai_addr']['sin6_addr']; + } elseif ('localhost' === $host || 'localhost.' === $host) { + $ip = '::1'; + } else { + return $host; + } + + return $options['resolve'][$host] = $dnsCache[$host] = $ip; + } + + private static function ipCheck(string $ip, ?array $subnets, int $ipFlags, ?string $host, string $url): void + { + if (null === $subnets) { + // Quick check, but not reliable enough, see https://github.com/php/php-src/issues/16944 + $ipFlags |= \FILTER_FLAG_NO_PRIV_RANGE | \FILTER_FLAG_NO_RES_RANGE; + } + + if (false !== filter_var($ip, \FILTER_VALIDATE_IP, $ipFlags) && !IpUtils::checkIp($ip, $subnets ?? IpUtils::PRIVATE_SUBNETS)) { + return; + } + + if (null !== $host) { + $type = 'Host'; + } else { + $host = $ip; + $type = 'IP'; + } + + throw new TransportException($type.\sprintf(' "%s" is blocked for "%s".', $host, $url)); + } } diff --git a/lam/lib/3rdParty/composer/symfony/http-client/Response/AmpResponse.php b/lam/lib/3rdParty/composer/symfony/http-client/Response/AmpResponse.php index bb9aab1e7..e01d97eb8 100644 --- a/lam/lib/3rdParty/composer/symfony/http-client/Response/AmpResponse.php +++ b/lam/lib/3rdParty/composer/symfony/http-client/Response/AmpResponse.php @@ -331,16 +331,14 @@ final class AmpResponse implements ResponseInterface, StreamableInterface $request->setTlsHandshakeTimeout($originRequest->getTlsHandshakeTimeout()); $request->setTransferTimeout($originRequest->getTransferTimeout()); - if (\in_array($status, [301, 302, 303], true)) { + if (303 === $status || \in_array($status, [301, 302], true) && 'POST' === $response->getRequest()->getMethod()) { + // Do like curl and browsers: turn POST to GET on 301, 302 and 303 $originRequest->removeHeader('transfer-encoding'); $originRequest->removeHeader('content-length'); $originRequest->removeHeader('content-type'); - // Do like curl and browsers: turn POST to GET on 301, 302 and 303 - if ('POST' === $response->getRequest()->getMethod() || 303 === $status) { - $info['http_method'] = 'HEAD' === $response->getRequest()->getMethod() ? 'HEAD' : 'GET'; - $request->setMethod($info['http_method']); - } + $info['http_method'] = 'HEAD' === $response->getRequest()->getMethod() ? 'HEAD' : 'GET'; + $request->setMethod($info['http_method']); } else { $request->setBody(AmpBody::rewind($response->getRequest()->getBody())); } diff --git a/lam/lib/3rdParty/composer/symfony/http-client/Response/AsyncResponse.php b/lam/lib/3rdParty/composer/symfony/http-client/Response/AsyncResponse.php index d139d3d0f..25f6409b6 100644 --- a/lam/lib/3rdParty/composer/symfony/http-client/Response/AsyncResponse.php +++ b/lam/lib/3rdParty/composer/symfony/http-client/Response/AsyncResponse.php @@ -118,11 +118,20 @@ class AsyncResponse implements ResponseInterface, StreamableInterface public function getInfo(?string $type = null): mixed { + if ('debug' === ($type ?? 'debug')) { + $debug = implode('', array_column($this->info['previous_info'] ?? [], 'debug')); + $debug .= $this->response->getInfo('debug'); + + if ('debug' === $type) { + return $debug; + } + } + if (null !== $type) { return $this->info[$type] ?? $this->response->getInfo($type); } - return $this->info + $this->response->getInfo(); + return array_merge($this->info + $this->response->getInfo(), ['debug' => $debug]); } /** @@ -253,6 +262,7 @@ class AsyncResponse implements ResponseInterface, StreamableInterface return; } + $chunk = null; foreach ($client->stream($wrappedResponses, $timeout) as $response => $chunk) { $r = $asyncMap[$response]; @@ -295,6 +305,9 @@ class AsyncResponse implements ResponseInterface, StreamableInterface } } + if (null === $chunk) { + throw new \LogicException(\sprintf('"%s" is not compliant with HttpClientInterface: its "stream()" method didn\'t yield any chunks when it should have.', get_debug_type($client))); + } if (null === $chunk->getError() && $chunk->isLast()) { $r->yieldedState = self::LAST_CHUNK_YIELDED; } diff --git a/lam/lib/3rdParty/composer/symfony/http-client/Response/CurlResponse.php b/lam/lib/3rdParty/composer/symfony/http-client/Response/CurlResponse.php index 1d9e4be8c..4cb2a3097 100644 --- a/lam/lib/3rdParty/composer/symfony/http-client/Response/CurlResponse.php +++ b/lam/lib/3rdParty/composer/symfony/http-client/Response/CurlResponse.php @@ -312,7 +312,7 @@ final class CurlResponse implements ResponseInterface, StreamableInterface } $multi->handlesActivity[$id][] = null; - $multi->handlesActivity[$id][] = \in_array($result, [\CURLE_OK, \CURLE_TOO_MANY_REDIRECTS], true) || '_0' === $waitFor || curl_getinfo($ch, \CURLINFO_SIZE_DOWNLOAD) === curl_getinfo($ch, \CURLINFO_CONTENT_LENGTH_DOWNLOAD) ? null : new TransportException(ucfirst(curl_error($ch) ?: curl_strerror($result)).sprintf(' for "%s".', curl_getinfo($ch, \CURLINFO_EFFECTIVE_URL))); + $multi->handlesActivity[$id][] = \in_array($result, [\CURLE_OK, \CURLE_TOO_MANY_REDIRECTS], true) || '_0' === $waitFor || curl_getinfo($ch, \CURLINFO_SIZE_DOWNLOAD) === curl_getinfo($ch, \CURLINFO_CONTENT_LENGTH_DOWNLOAD) || (curl_error($ch) === 'OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 0' && -1.0 === curl_getinfo($ch, \CURLINFO_CONTENT_LENGTH_DOWNLOAD) && \in_array('close', array_map('strtolower', $responses[$id]->headers['connection']), true)) ? null : new TransportException(ucfirst(curl_error($ch) ?: curl_strerror($result)).sprintf(' for "%s".', curl_getinfo($ch, \CURLINFO_EFFECTIVE_URL))); } } finally { $multi->performing = false; @@ -419,15 +419,6 @@ final class CurlResponse implements ResponseInterface, StreamableInterface $options['max_redirects'] = curl_getinfo($ch, \CURLINFO_REDIRECT_COUNT); curl_setopt($ch, \CURLOPT_FOLLOWLOCATION, false); curl_setopt($ch, \CURLOPT_MAXREDIRS, $options['max_redirects']); - } else { - $url = parse_url($location ?? ':'); - - if (isset($url['host']) && null !== $ip = $multi->dnsCache->hostnames[$url['host'] = strtolower($url['host'])] ?? null) { - // Populate DNS cache for redirects if needed - $port = $url['port'] ?? ('http' === ($url['scheme'] ?? parse_url(curl_getinfo($ch, \CURLINFO_EFFECTIVE_URL), \PHP_URL_SCHEME)) ? 80 : 443); - curl_setopt($ch, \CURLOPT_RESOLVE, ["{$url['host']}:$port:$ip"]); - $multi->dnsCache->removals["-{$url['host']}:$port"] = "-{$url['host']}:$port"; - } } } diff --git a/lam/lib/3rdParty/composer/symfony/http-client/composer.json b/lam/lib/3rdParty/composer/symfony/http-client/composer.json index ef456a603..23437d536 100644 --- a/lam/lib/3rdParty/composer/symfony/http-client/composer.json +++ b/lam/lib/3rdParty/composer/symfony/http-client/composer.json @@ -25,7 +25,7 @@ "php": ">=8.1", "psr/log": "^1|^2|^3", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/http-client-contracts": "^3.4.1", + "symfony/http-client-contracts": "~3.4.3|^3.5.1", "symfony/service-contracts": "^2.5|^3" }, "require-dev": { diff --git a/lam/lib/3rdParty/composer/symfony/http-foundation/BinaryFileResponse.php b/lam/lib/3rdParty/composer/symfony/http-foundation/BinaryFileResponse.php index 41c3166d8..41a244b81 100644 --- a/lam/lib/3rdParty/composer/symfony/http-foundation/BinaryFileResponse.php +++ b/lam/lib/3rdParty/composer/symfony/http-foundation/BinaryFileResponse.php @@ -217,8 +217,12 @@ class BinaryFileResponse extends Response } if ('x-accel-redirect' === strtolower($type)) { // Do X-Accel-Mapping substitutions. - // @link https://www.nginx.com/resources/wiki/start/topics/examples/x-accel/#x-accel-redirect - $parts = HeaderUtils::split($request->headers->get('X-Accel-Mapping', ''), ',='); + // @link https://github.com/rack/rack/blob/main/lib/rack/sendfile.rb + // @link https://mattbrictson.com/blog/accelerated-rails-downloads + if (!$request->headers->has('X-Accel-Mapping')) { + throw new \LogicException('The "X-Accel-Mapping" header must be set when "X-Sendfile-Type" is set to "X-Accel-Redirect".'); + } + $parts = HeaderUtils::split($request->headers->get('X-Accel-Mapping'), ',='); foreach ($parts as $part) { [$pathPrefix, $location] = $part; if (str_starts_with($path, $pathPrefix)) { diff --git a/lam/lib/3rdParty/composer/symfony/http-foundation/Request.php b/lam/lib/3rdParty/composer/symfony/http-foundation/Request.php index b482a76dd..922014133 100644 --- a/lam/lib/3rdParty/composer/symfony/http-foundation/Request.php +++ b/lam/lib/3rdParty/composer/symfony/http-foundation/Request.php @@ -11,6 +11,7 @@ namespace Symfony\Component\HttpFoundation; +use Symfony\Component\HttpFoundation\Exception\BadRequestException; use Symfony\Component\HttpFoundation\Exception\ConflictingHeadersException; use Symfony\Component\HttpFoundation\Exception\JsonException; use Symfony\Component\HttpFoundation\Exception\SessionNotFoundException; @@ -326,6 +327,8 @@ class Request * @param array $files The request files ($_FILES) * @param array $server The server parameters ($_SERVER) * @param string|resource|null $content The raw body data + * + * @throws BadRequestException When the URI is invalid */ public static function create(string $uri, string $method = 'GET', array $parameters = [], array $cookies = [], array $files = [], array $server = [], $content = null): static { @@ -348,11 +351,20 @@ class Request $server['PATH_INFO'] = ''; $server['REQUEST_METHOD'] = strtoupper($method); - $components = parse_url($uri); - if (false === $components) { - trigger_deprecation('symfony/http-foundation', '6.3', 'Calling "%s()" with an invalid URI is deprecated.', __METHOD__); - $components = []; + if (false === $components = parse_url(\strlen($uri) !== strcspn($uri, '?#') ? $uri : $uri.'#')) { + throw new BadRequestException('Invalid URI.'); } + + if (false !== ($i = strpos($uri, '\\')) && $i < strcspn($uri, '?#')) { + throw new BadRequestException('Invalid URI: A URI cannot contain a backslash.'); + } + if (\strlen($uri) !== strcspn($uri, "\r\n\t")) { + throw new BadRequestException('Invalid URI: A URI cannot contain CR/LF/TAB characters.'); + } + if ('' !== $uri && (\ord($uri[0]) <= 32 || \ord($uri[-1]) <= 32)) { + throw new BadRequestException('Invalid URI: A URI must not start nor end with ASCII control characters or spaces.'); + } + if (isset($components['host'])) { $server['SERVER_NAME'] = $components['host']; $server['HTTP_HOST'] = $components['host']; @@ -1230,7 +1242,7 @@ class Request } if (!preg_match('/^[A-Z]++$/D', $method)) { - throw new SuspiciousOperationException(sprintf('Invalid method override "%s".', $method)); + throw new SuspiciousOperationException('Invalid HTTP method override.'); } return $this->method = $method; diff --git a/lam/lib/3rdParty/composer/symfony/http-foundation/composer.json b/lam/lib/3rdParty/composer/symfony/http-foundation/composer.json index be85696e5..732a011e9 100644 --- a/lam/lib/3rdParty/composer/symfony/http-foundation/composer.json +++ b/lam/lib/3rdParty/composer/symfony/http-foundation/composer.json @@ -24,7 +24,7 @@ "require-dev": { "doctrine/dbal": "^2.13.1|^3|^4", "predis/predis": "^1.1|^2.0", - "symfony/cache": "^6.3|^7.0", + "symfony/cache": "^6.4.12|^7.1.5", "symfony/dependency-injection": "^5.4|^6.0|^7.0", "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4|^7.0", "symfony/mime": "^5.4|^6.0|^7.0", @@ -32,7 +32,7 @@ "symfony/rate-limiter": "^5.4|^6.0|^7.0" }, "conflict": { - "symfony/cache": "<6.3" + "symfony/cache": "<6.4.12|>=7.0,<7.1.5" }, "autoload": { "psr-4": { "Symfony\\Component\\HttpFoundation\\": "" }, diff --git a/lam/lib/3rdParty/composer/symfony/polyfill-mbstring/Mbstring.php b/lam/lib/3rdParty/composer/symfony/polyfill-mbstring/Mbstring.php index 1ad33a86b..3d45c9d9a 100644 --- a/lam/lib/3rdParty/composer/symfony/polyfill-mbstring/Mbstring.php +++ b/lam/lib/3rdParty/composer/symfony/polyfill-mbstring/Mbstring.php @@ -50,6 +50,9 @@ namespace Symfony\Polyfill\Mbstring; * - mb_substr_count - Count the number of substring occurrences * - mb_ucfirst - Make a string's first character uppercase * - mb_lcfirst - Make a string's first character lowercase + * - mb_trim - Strip whitespace (or other characters) from the beginning and end of a string + * - mb_ltrim - Strip whitespace (or other characters) from the beginning of a string + * - mb_rtrim - Strip whitespace (or other characters) from the end of a string * * Not implemented: * - mb_convert_kana - Convert "kana" one from another ("zen-kaku", "han-kaku" and more) @@ -83,12 +86,6 @@ final class Mbstring public static function mb_convert_encoding($s, $toEncoding, $fromEncoding = null) { if (\is_array($s)) { - if (PHP_VERSION_ID < 70200) { - trigger_error('mb_convert_encoding() expects parameter 1 to be string, array given', \E_USER_WARNING); - - return null; - } - $r = []; foreach ($s as $str) { $r[] = self::mb_convert_encoding($str, $toEncoding, $fromEncoding); @@ -427,12 +424,6 @@ final class Mbstring public static function mb_check_encoding($var = null, $encoding = null) { - if (\PHP_VERSION_ID < 70200 && \is_array($var)) { - trigger_error('mb_check_encoding() expects parameter 1 to be string, array given', \E_USER_WARNING); - - return null; - } - if (null === $encoding) { if (null === $var) { return false; @@ -980,17 +971,75 @@ final class Mbstring return $encoding; } + public static function mb_trim(string $string, ?string $characters = null, ?string $encoding = null): string + { + return self::mb_internal_trim('{^[%s]+|[%1$s]+$}Du', $string, $characters, $encoding, __FUNCTION__); + } + + public static function mb_ltrim(string $string, ?string $characters = null, ?string $encoding = null): string + { + return self::mb_internal_trim('{^[%s]+}Du', $string, $characters, $encoding, __FUNCTION__); + } + + public static function mb_rtrim(string $string, ?string $characters = null, ?string $encoding = null): string + { + return self::mb_internal_trim('{[%s]+$}D', $string, $characters, $encoding, __FUNCTION__); + } + + private static function mb_internal_trim(string $regex, string $string, ?string $characters, ?string $encoding, string $function): string + { + if (null === $encoding) { + $encoding = self::mb_internal_encoding(); + } else { + self::assertEncoding($encoding, $function.'(): Argument #3 ($encoding) must be a valid encoding, "%s" given'); + } + + if ('' === $characters) { + return null === $encoding ? $string : self::mb_convert_encoding($string, $encoding); + } + + if ('UTF-8' === $encoding) { + $encoding = null; + if (!preg_match('//u', $string)) { + $string = @iconv('UTF-8', 'UTF-8//IGNORE', $string); + } + if (null !== $characters && !preg_match('//u', $characters)) { + $characters = @iconv('UTF-8', 'UTF-8//IGNORE', $characters); + } + } else { + $string = iconv($encoding, 'UTF-8//IGNORE', $string); + + if (null !== $characters) { + $characters = iconv($encoding, 'UTF-8//IGNORE', $characters); + } + } + + if (null === $characters) { + $characters = "\\0 \f\n\r\t\v\u{00A0}\u{1680}\u{2000}\u{2001}\u{2002}\u{2003}\u{2004}\u{2005}\u{2006}\u{2007}\u{2008}\u{2009}\u{200A}\u{2028}\u{2029}\u{202F}\u{205F}\u{3000}\u{0085}\u{180E}"; + } else { + $characters = preg_quote($characters); + } + + $string = preg_replace(sprintf($regex, $characters), '', $string); + + if (null === $encoding) { + return $string; + } + + return iconv('UTF-8', $encoding.'//IGNORE', $string); + } + private static function assertEncoding(string $encoding, string $errorFormat): void { try { $validEncoding = @self::mb_check_encoding('', $encoding); } catch (\ValueError $e) { - throw new \ValueError(\sprintf($errorFormat, $encoding)); + throw new \ValueError(sprintf($errorFormat, $encoding)); } // BC for PHP 7.3 and lower if (!$validEncoding) { - throw new \ValueError(\sprintf($errorFormat, $encoding)); + throw new \ValueError(sprintf($errorFormat, $encoding)); } } } diff --git a/lam/lib/3rdParty/composer/symfony/polyfill-mbstring/bootstrap.php b/lam/lib/3rdParty/composer/symfony/polyfill-mbstring/bootstrap.php index 6e4b5fce8..ff51ae079 100644 --- a/lam/lib/3rdParty/composer/symfony/polyfill-mbstring/bootstrap.php +++ b/lam/lib/3rdParty/composer/symfony/polyfill-mbstring/bootstrap.php @@ -144,6 +144,19 @@ if (!function_exists('mb_lcfirst')) { function mb_lcfirst(string $string, ?string $encoding = null): string { return p\Mbstring::mb_lcfirst($string, $encoding); } } +if (!function_exists('mb_trim')) { + function mb_trim(string $string, ?string $characters = null, ?string $encoding = null): string { return p\Mbstring::mb_trim($string, $characters, $encoding); } +} + +if (!function_exists('mb_ltrim')) { + function mb_ltrim(string $string, ?string $characters = null, ?string $encoding = null): string { return p\Mbstring::mb_ltrim($string, $characters, $encoding); } +} + +if (!function_exists('mb_rtrim')) { + function mb_rtrim(string $string, ?string $characters = null, ?string $encoding = null): string { return p\Mbstring::mb_rtrim($string, $characters, $encoding); } +} + + if (extension_loaded('mbstring')) { return; } diff --git a/lam/lib/3rdParty/composer/symfony/polyfill-mbstring/bootstrap80.php b/lam/lib/3rdParty/composer/symfony/polyfill-mbstring/bootstrap80.php index ec2ae4276..5be7d2018 100644 --- a/lam/lib/3rdParty/composer/symfony/polyfill-mbstring/bootstrap80.php +++ b/lam/lib/3rdParty/composer/symfony/polyfill-mbstring/bootstrap80.php @@ -93,7 +93,7 @@ if (!function_exists('mb_strstr')) { function mb_strstr(?string $haystack, ?string $needle, ?bool $before_needle = false, ?string $encoding = null): string|false { return p\Mbstring::mb_strstr((string) $haystack, (string) $needle, (bool) $before_needle, $encoding); } } if (!function_exists('mb_get_info')) { - function mb_get_info(?string $type = 'all'): array|string|int|false { return p\Mbstring::mb_get_info((string) $type); } + function mb_get_info(?string $type = 'all'): array|string|int|false|null { return p\Mbstring::mb_get_info((string) $type); } } if (!function_exists('mb_http_output')) { function mb_http_output(?string $encoding = null): string|bool { return p\Mbstring::mb_http_output($encoding); } @@ -140,6 +140,18 @@ if (!function_exists('mb_lcfirst')) { function mb_lcfirst($string, ?string $encoding = null): string { return p\Mbstring::mb_lcfirst($string, $encoding); } } +if (!function_exists('mb_trim')) { + function mb_trim(string $string, ?string $characters = null, ?string $encoding = null): string { return p\Mbstring::mb_trim($string, $characters, $encoding); } +} + +if (!function_exists('mb_ltrim')) { + function mb_ltrim(string $string, ?string $characters = null, ?string $encoding = null): string { return p\Mbstring::mb_ltrim($string, $characters, $encoding); } +} + +if (!function_exists('mb_rtrim')) { + function mb_rtrim(string $string, ?string $characters = null, ?string $encoding = null): string { return p\Mbstring::mb_rtrim($string, $characters, $encoding); } +} + if (extension_loaded('mbstring')) { return; } diff --git a/lam/lib/3rdParty/composer/symfony/polyfill-mbstring/composer.json b/lam/lib/3rdParty/composer/symfony/polyfill-mbstring/composer.json index bd99d4b9d..4ed241a33 100644 --- a/lam/lib/3rdParty/composer/symfony/polyfill-mbstring/composer.json +++ b/lam/lib/3rdParty/composer/symfony/polyfill-mbstring/composer.json @@ -16,7 +16,7 @@ } ], "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-mbstring": "*" diff --git a/lam/lib/3rdParty/composer/symfony/polyfill-php80/composer.json b/lam/lib/3rdParty/composer/symfony/polyfill-php80/composer.json index 46ccde203..a503b039a 100644 --- a/lam/lib/3rdParty/composer/symfony/polyfill-php80/composer.json +++ b/lam/lib/3rdParty/composer/symfony/polyfill-php80/composer.json @@ -20,7 +20,7 @@ } ], "require": { - "php": ">=7.1" + "php": ">=7.2" }, "autoload": { "psr-4": { "Symfony\\Polyfill\\Php80\\": "" }, diff --git a/lam/lib/3rdParty/composer/symfony/polyfill-php83/bootstrap.php b/lam/lib/3rdParty/composer/symfony/polyfill-php83/bootstrap.php index f43af17e0..a92799cb3 100644 --- a/lam/lib/3rdParty/composer/symfony/polyfill-php83/bootstrap.php +++ b/lam/lib/3rdParty/composer/symfony/polyfill-php83/bootstrap.php @@ -19,8 +19,10 @@ if (!function_exists('json_validate')) { function json_validate(string $json, int $depth = 512, int $flags = 0): bool { return p\Php83::json_validate($json, $depth, $flags); } } -if (!function_exists('mb_str_pad') && function_exists('mb_substr')) { - function mb_str_pad(string $string, int $length, string $pad_string = ' ', int $pad_type = STR_PAD_RIGHT, ?string $encoding = null): string { return p\Php83::mb_str_pad($string, $length, $pad_string, $pad_type, $encoding); } +if (extension_loaded('mbstring')) { + if (!function_exists('mb_str_pad')) { + function mb_str_pad(string $string, int $length, string $pad_string = ' ', int $pad_type = STR_PAD_RIGHT, ?string $encoding = null): string { return p\Php83::mb_str_pad($string, $length, $pad_string, $pad_type, $encoding); } + } } if (!function_exists('stream_context_set_options')) { diff --git a/lam/lib/3rdParty/composer/symfony/polyfill-php83/composer.json b/lam/lib/3rdParty/composer/symfony/polyfill-php83/composer.json index 02a0bf830..a8b8ba707 100644 --- a/lam/lib/3rdParty/composer/symfony/polyfill-php83/composer.json +++ b/lam/lib/3rdParty/composer/symfony/polyfill-php83/composer.json @@ -16,7 +16,7 @@ } ], "require": { - "php": ">=7.1" + "php": ">=7.2" }, "autoload": { "psr-4": { "Symfony\\Polyfill\\Php83\\": "" }, diff --git a/lam/lib/3rdParty/composer/symfony/polyfill-uuid/composer.json b/lam/lib/3rdParty/composer/symfony/polyfill-uuid/composer.json index 2494ea172..f3c5045d5 100644 --- a/lam/lib/3rdParty/composer/symfony/polyfill-uuid/composer.json +++ b/lam/lib/3rdParty/composer/symfony/polyfill-uuid/composer.json @@ -16,7 +16,7 @@ } ], "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-uuid": "*" diff --git a/lam/lib/3rdParty/composer/symfony/translation/Dumper/CsvFileDumper.php b/lam/lib/3rdParty/composer/symfony/translation/Dumper/CsvFileDumper.php index 8f5475259..a4ae476b3 100644 --- a/lam/lib/3rdParty/composer/symfony/translation/Dumper/CsvFileDumper.php +++ b/lam/lib/3rdParty/composer/symfony/translation/Dumper/CsvFileDumper.php @@ -28,7 +28,7 @@ class CsvFileDumper extends FileDumper $handle = fopen('php://memory', 'r+'); foreach ($messages->all($domain) as $source => $target) { - fputcsv($handle, [$source, $target], $this->delimiter, $this->enclosure); + fputcsv($handle, [$source, $target], $this->delimiter, $this->enclosure, '\\'); } rewind($handle); diff --git a/lam/lib/3rdParty/composer/symfony/translation/Extractor/Visitor/TransMethodVisitor.php b/lam/lib/3rdParty/composer/symfony/translation/Extractor/Visitor/TransMethodVisitor.php index 011bf3b11..a3dcd6d2b 100644 --- a/lam/lib/3rdParty/composer/symfony/translation/Extractor/Visitor/TransMethodVisitor.php +++ b/lam/lib/3rdParty/composer/symfony/translation/Extractor/Visitor/TransMethodVisitor.php @@ -44,7 +44,7 @@ final class TransMethodVisitor extends AbstractVisitor implements NodeVisitor if ('trans' === $name || 't' === $name) { $firstNamedArgumentIndex = $this->nodeFirstNamedArgumentIndex($node); - if (!$messages = $this->getStringArguments($node, 0 < $firstNamedArgumentIndex ? 0 : 'message')) { + if (!$messages = $this->getStringArguments($node, 0 < $firstNamedArgumentIndex ? 0 : 'id')) { return null; } diff --git a/lam/lib/3rdParty/composer/symfony/uid/AbstractUid.php b/lam/lib/3rdParty/composer/symfony/uid/AbstractUid.php index c67e67e85..d556bb732 100644 --- a/lam/lib/3rdParty/composer/symfony/uid/AbstractUid.php +++ b/lam/lib/3rdParty/composer/symfony/uid/AbstractUid.php @@ -70,6 +70,8 @@ abstract class AbstractUid implements \JsonSerializable, \Stringable } /** + * @param string $uid A valid RFC 9562/4122 uid + * * @throws \InvalidArgumentException When the passed value is not valid */ public static function fromRfc4122(string $uid): static @@ -120,9 +122,9 @@ abstract class AbstractUid implements \JsonSerializable, \Stringable } /** - * Returns the identifier as a RFC4122 case insensitive string. + * Returns the identifier as a RFC 9562/4122 case insensitive string. * - * @see https://tools.ietf.org/html/rfc4122#section-3 + * @see https://datatracker.ietf.org/doc/html/rfc9562/#section-4 * * @example 09748193-048a-4bfb-b825-8528cf74fdc1 (len=36) */ diff --git a/lam/lib/3rdParty/composer/symfony/uid/BinaryUtil.php b/lam/lib/3rdParty/composer/symfony/uid/BinaryUtil.php index 8fd19d867..203e31357 100644 --- a/lam/lib/3rdParty/composer/symfony/uid/BinaryUtil.php +++ b/lam/lib/3rdParty/composer/symfony/uid/BinaryUtil.php @@ -36,7 +36,7 @@ class BinaryUtil 'u' => 52, 'v' => 53, 'w' => 54, 'x' => 55, 'y' => 56, 'z' => 57, ]; - // https://tools.ietf.org/html/rfc4122#section-4.1.4 + // https://datatracker.ietf.org/doc/html/rfc9562#section-5.1 // 0x01b21dd213814000 is the number of 100-ns intervals between the // UUID epoch 1582-10-15 00:00:00 and the Unix epoch 1970-01-01 00:00:00. private const TIME_OFFSET_INT = 0x01B21DD213814000; diff --git a/lam/lib/3rdParty/composer/symfony/uid/Uuid.php b/lam/lib/3rdParty/composer/symfony/uid/Uuid.php index 85d366c18..0c4cdf8c1 100644 --- a/lam/lib/3rdParty/composer/symfony/uid/Uuid.php +++ b/lam/lib/3rdParty/composer/symfony/uid/Uuid.php @@ -14,7 +14,7 @@ namespace Symfony\Component\Uid; /** * @author Grégoire Pineau * - * @see https://tools.ietf.org/html/rfc4122#appendix-C for details about namespaces + * @see https://datatracker.ietf.org/doc/html/rfc9562/#section-6.6 for details about namespaces */ class Uuid extends AbstractUid { @@ -153,9 +153,9 @@ class Uuid extends AbstractUid } /** - * Returns the identifier as a RFC4122 case insensitive string. + * Returns the identifier as a RFC 9562/4122 case insensitive string. * - * @see https://tools.ietf.org/html/rfc4122#section-3 + * @see https://datatracker.ietf.org/doc/html/rfc9562/#section-4 * * @example 09748193-048a-4bfb-b825-8528cf74fdc1 (len=36) */ diff --git a/lam/lib/3rdParty/composer/voku/portable-ascii/.deepsource.toml b/lam/lib/3rdParty/composer/voku/portable-ascii/.deepsource.toml new file mode 100644 index 000000000..3f8f43cef --- /dev/null +++ b/lam/lib/3rdParty/composer/voku/portable-ascii/.deepsource.toml @@ -0,0 +1,4 @@ +version = 1 + +[[analyzers]] +name = "php" \ No newline at end of file diff --git a/lam/lib/3rdParty/composer/voku/portable-ascii/CHANGELOG.md b/lam/lib/3rdParty/composer/voku/portable-ascii/CHANGELOG.md index 12fc393a7..52f4912e7 100644 --- a/lam/lib/3rdParty/composer/voku/portable-ascii/CHANGELOG.md +++ b/lam/lib/3rdParty/composer/voku/portable-ascii/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +### 2.0.3 (2024-11-21) + +- use modern phpdocs e.g. list or conditional-return annotations + +### 2.0.2 (2024-11-21) + +- small fix for PHP 8.4 (thanks to @gilbertoalbino) + ### 2.0.1 (2022-03-08) - "To people of Russia": There is a war in Ukraine right now. The forces of the Russian Federation are attacking civilians. diff --git a/lam/lib/3rdParty/composer/voku/portable-ascii/composer.json b/lam/lib/3rdParty/composer/voku/portable-ascii/composer.json index 99dee4f80..b3a22fa8c 100644 --- a/lam/lib/3rdParty/composer/voku/portable-ascii/composer.json +++ b/lam/lib/3rdParty/composer/voku/portable-ascii/composer.json @@ -12,7 +12,7 @@ "authors": [ { "name": "Lars Moelleken", - "homepage": "http://www.moelleken.org/" + "homepage": "https://www.moelleken.org/" } ], "require": { diff --git a/lam/lib/3rdParty/composer/voku/portable-ascii/src/voku/helper/ASCII.php b/lam/lib/3rdParty/composer/voku/portable-ascii/src/voku/helper/ASCII.php index 7d8b66de7..406407e19 100644 --- a/lam/lib/3rdParty/composer/voku/portable-ascii/src/voku/helper/ASCII.php +++ b/lam/lib/3rdParty/composer/voku/portable-ascii/src/voku/helper/ASCII.php @@ -214,9 +214,9 @@ final class ASCII /** * Get all languages from the constants "ASCII::.*LANGUAGE_CODE". * - * @return string[] - * - * @phpstan-return array + * @return array + *

An associative array where the key is the language code in lowercase + * and the value is the corresponding language string.

*/ public static function getAllLanguages(): array { @@ -246,15 +246,13 @@ final class ASCII * var_dump($array['ru']['б']); // 'b' * * - * @psalm-suppress InvalidNullableReturnType - we use the prepare* methods here, so we don't get NULL here - * * @param bool $replace_extra_symbols [optional]

Add some more replacements e.g. "£" with " pound ".

* * @psalm-pure * - * @return array - * - * @phpstan-return array> + * @return array> + *

An array where the key is the language code, and the value is + * an associative array mapping original characters to their replacements.

*/ public static function charsArray(bool $replace_extra_symbols = false): array { @@ -281,14 +279,11 @@ final class ASCII * * @psalm-pure * - * @return array - *

An array of replacements.

- * - * @phpstan-return array> + * @return array> + *

An array of replacements.

*/ public static function charsArrayWithMultiLanguageValues(bool $replace_extra_symbols = false): array { - /** @var array>> */ static $CHARS_ARRAY = []; $cacheKey = '' . $replace_extra_symbols; @@ -303,18 +298,13 @@ final class ASCII false ); - /** @noinspection PhpSillyAssignmentInspection - hack for phpstan */ - /** @var array $language_all_chars */ - $language_all_chars = $language_all_chars; - - /** @noinspection AlterInForeachInspection */ + /* @noinspection AlterInForeachInspection | ok here */ foreach ($language_all_chars as $key => &$value) { $return[$value][] = $key; } $CHARS_ARRAY[$cacheKey] = $return; - /** @var array> $return - hack for phpstan */ return $return; } @@ -330,21 +320,17 @@ final class ASCII * echo $array['orig'][$tmpKey]; // 'ё' * * - * @psalm-suppress InvalidNullableReturnType - we use the prepare* methods here, so we don't get NULL here - * * @param string $language [optional]

Language of the source string e.g.: en, de_at, or de-ch. * (default is 'en') | ASCII::*_LANGUAGE_CODE

* @param bool $replace_extra_symbols [optional]

Add some more replacements e.g. "£" with " pound ".

- * @param bool $asOrigReplaceArray [optional]

TRUE === return {orig: string[], replace: string[]} + * @param bool $asOrigReplaceArray [optional]

TRUE === return {orig: list, replace: list} * array

* * @psalm-pure * - * @return array - *

An array of replacements.

+ * @return ($asOrigReplaceArray is true ? array{orig: list, replace: list} : array) * * @phpstan-param ASCII::*_LANGUAGE_CODE $language - * @phpstan-return array{orig: string[], replace: string[]}|array */ public static function charsArrayWithOneLanguage( string $language = self::ENGLISH_LANGUAGE_CODE, @@ -354,7 +340,6 @@ final class ASCII $language = self::get_language($language); // init - /** @var array|array{orig: string[], replace: string[]}>> */ static $CHARS_ARRAY = []; $cacheKey = '' . $replace_extra_symbols . '-' . $asOrigReplaceArray; @@ -366,7 +351,6 @@ final class ASCII if ($replace_extra_symbols) { self::prepareAsciiAndExtrasMaps(); - /** @noinspection DuplicatedCode */ if (isset(self::$ASCII_MAPS_AND_EXTRAS[$language])) { $tmpArray = self::$ASCII_MAPS_AND_EXTRAS[$language]; @@ -379,7 +363,6 @@ final class ASCII $CHARS_ARRAY[$cacheKey][$language] = $tmpArray; } } else { - /** @noinspection NestedPositiveIfStatementsInspection */ if ($asOrigReplaceArray) { $CHARS_ARRAY[$cacheKey][$language] = [ 'orig' => [], @@ -392,7 +375,6 @@ final class ASCII } else { self::prepareAsciiMaps(); - /** @noinspection DuplicatedCode */ if (isset(self::$ASCII_MAPS[$language])) { $tmpArray = self::$ASCII_MAPS[$language]; @@ -405,7 +387,6 @@ final class ASCII $CHARS_ARRAY[$cacheKey][$language] = $tmpArray; } } else { - /** @noinspection NestedPositiveIfStatementsInspection */ if ($asOrigReplaceArray) { $CHARS_ARRAY[$cacheKey][$language] = [ 'orig' => [], @@ -430,22 +411,18 @@ final class ASCII * * * @param bool $replace_extra_symbols [optional]

Add some more replacements e.g. "£" with " pound ".

- * @param bool $asOrigReplaceArray [optional]

TRUE === return {orig: string[], replace: string[]} + * @param bool $asOrigReplaceArray [optional]

TRUE === return {orig: list, replace: list} * array

* * @psalm-pure * - * @return array - *

An array of replacements.

- * - * @phpstan-return array{orig: string[], replace: string[]}|array + * @return ($asOrigReplaceArray is true ? array{orig: list, replace: list} : array) */ public static function charsArrayWithSingleLanguageValues( bool $replace_extra_symbols = false, bool $asOrigReplaceArray = true ): array { // init - /** @var array|array{orig: string[], replace: string[]}> */ static $CHARS_ARRAY = []; $cacheKey = '' . $replace_extra_symbols . '-' . $asOrigReplaceArray; @@ -456,22 +433,19 @@ final class ASCII if ($replace_extra_symbols) { self::prepareAsciiAndExtrasMaps(); - /** @noinspection AlterInForeachInspection */ - /** @psalm-suppress PossiblyNullIterator - we use the prepare* methods here, so we don't get NULL here */ + /* @noinspection AlterInForeachInspection | ok here */ foreach (self::$ASCII_MAPS_AND_EXTRAS ?? [] as &$map) { $CHARS_ARRAY[$cacheKey][] = $map; } } else { self::prepareAsciiMaps(); - /** @noinspection AlterInForeachInspection */ - /** @psalm-suppress PossiblyNullIterator - we use the prepare* methods here, so we don't get NULL here */ + /* @noinspection AlterInForeachInspection | ok here */ foreach (self::$ASCII_MAPS ?? [] as &$map) { $CHARS_ARRAY[$cacheKey][] = $map; } } - /** @phpstan-ignore-next-line - ... error? */ $CHARS_ARRAY[$cacheKey] = \array_merge([], ...$CHARS_ARRAY[$cacheKey]); if ($asOrigReplaceArray) { @@ -590,13 +564,11 @@ final class ASCII return ''; } - /** @var array{orig: string[], replace: string[]} */ static $MSWORD_CACHE = ['orig' => [], 'replace' => []]; if (empty($MSWORD_CACHE['orig'])) { self::prepareAsciiMaps(); - /** @var array */ $map = self::$ASCII_MAPS[self::EXTRA_MSWORD_CHARS_LANGUAGE_CODE] ?? []; $MSWORD_CACHE = [ @@ -636,7 +608,6 @@ final class ASCII return ''; } - /** @var array> */ static $WHITESPACE_CACHE = []; $cacheKey = (int) $keepNonBreakingSpace; @@ -673,7 +644,6 @@ final class ASCII } if (!$keepBidiUnicodeControls) { - /** @var array|null */ static $BIDI_UNICODE_CONTROLS_CACHE = null; if ($BIDI_UNICODE_CONTROLS_CACHE === null) { @@ -689,7 +659,7 @@ final class ASCII /** * Remove invisible characters from a string. * - * e.g.: This prevents sandwiching null characters between ascii characters, like Java\0script. + * This prevents malicious code injection through null bytes or other control characters. * * copy&past from https://github.com/bcit-ci/CodeIgniter/blob/develop/system/core/Common.php * @@ -735,21 +705,16 @@ final class ASCII } /** - * WARNING: This method will return broken characters and is only for special cases. + * WARNING: This method will return broken characters and is only for special cases. * - * Convert two UTF-8 encoded string to a single-byte strings suitable for + * Convert two UTF-8 encoded strings to a single-byte strings suitable for * functions that need the same string length after the conversion. * * The function simply uses (and updates) a tailored dynamic encoding * (in/out map parameter) where non-ascii characters are remapped to * the range [128-255] in order of appearance. * - * @param string $str1 - * @param string $str2 - * - * @return string[] - * - * @phpstan-return array{0: string, 1: string} + * @return array{0: string, 1: string} */ public static function to_ascii_remap(string $str1, string $str2): array { @@ -775,14 +740,14 @@ final class ASCII * @param string $str

The input string.

* @param string $language [optional]

Language of the source string. * (default is 'en') | ASCII::*_LANGUAGE_CODE

- * @param bool $remove_unsupported_chars [optional]

Whether or not to remove the + * @param bool $remove_unsupported_chars [optional]

Whether to remove the * unsupported characters.

* @param bool $replace_extra_symbols [optional]

Add some more replacements e.g. "£" with " pound * ".

* @param bool $use_transliterate [optional]

Use ASCII::to_transliterate() for unknown chars.

- * @param bool|null $replace_single_chars_only [optional]

Single char replacement is better for the - * performance, but some languages need to replace more then one char - * at the same time. | NULL === auto-setting, depended on the + * @param bool $replace_single_chars_only [optional]

Single char replacement is better for the + * performance, but some languages need to replace more than one char + * at the same time. If FALSE === auto-setting, depended on the * language

* * @psalm-pure @@ -798,18 +763,17 @@ final class ASCII bool $remove_unsupported_chars = true, bool $replace_extra_symbols = false, bool $use_transliterate = false, - bool $replace_single_chars_only = null + bool $replace_single_chars_only = false ): string { if ($str === '') { return ''; } - /** @phpstan-var ASCII::*_LANGUAGE_CODE - hack for phpstan */ + /** @phpstan-var ASCII::*_LANGUAGE_CODE $language - hack for phpstan */ $language = self::get_language($language); static $EXTRA_SYMBOLS_CACHE = null; - /** @var array> */ static $REPLACE_HELPER_CACHE = []; $cacheKey = $language . '-' . $replace_extra_symbols; @@ -977,7 +941,6 @@ final class ASCII } } - /** @psalm-suppress PossiblyNullOperand - we use the prepare* methods here, so we don't get NULL here */ if (!isset(self::$ASCII_MAPS[$language])) { $use_transliterate = true; } @@ -1001,10 +964,10 @@ final class ASCII * ASCII::to_filename('שדגשדג.png', true)); // 'shdgshdg.png' * * - * @param string $str + * @param string $str

The string input.

* @param bool $use_transliterate

ASCII::to_transliterate() is used by default - unsafe characters are * simply replaced with hyphen otherwise.

- * @param string $fallback_char + * @param string $fallback_char

The fallback character. - "-" is the default

* * @psalm-pure * @@ -1040,27 +1003,27 @@ final class ASCII } /** - * Converts the string into an URL slug. This includes replacing non-ASCII - * characters with their closest ASCII equivalents, removing remaining - * non-ASCII and non-alphanumeric characters, and replacing whitespace with - * $separator. The separator defaults to a single dash, and the string - * is also converted to lowercase. The language of the source string can - * also be supplied for language-specific transliteration. + * Converts a string into a URL-friendly slug. * - * @param string $str + * - This includes replacing non-ASCII characters with their closest ASCII equivalents, removing remaining + * non-ASCII and non-alphanumeric characters, and replacing whitespace with $separator. + * - The separator defaults to a single dash, and the string is also converted to lowercase. + * - The language of the source string can also be supplied for language-specific transliteration. + * + * @param string $str

The string input.

* @param string $separator [optional]

The string used to replace whitespace.

* @param string $language [optional]

Language of the source string. * (default is 'en') | ASCII::*_LANGUAGE_CODE

* @param array $replacements [optional]

A map of replaceable strings.

- * @param bool $replace_extra_symbols [optional]

Add some more replacements e.g. "£" with " + * @param bool $replace_extra_symbols [optional]

Add some more replacements e.g. "£" with " * pound ".

* @param bool $use_str_to_lower [optional]

Use "string to lower" for the input.

- * @param bool $use_transliterate [optional]

Use ASCII::to_transliterate() for unknown + * @param bool $use_transliterate [optional]

Use ASCII::to_transliterate() for unknown * chars.

* @psalm-pure * * @return string - *

A string that has been converted to an URL slug.

+ *

The URL-friendly slug.

* * @phpstan-param ASCII::*_LANGUAGE_CODE $language */ @@ -1135,21 +1098,16 @@ final class ASCII * * @return string *

A String that contains only ASCII characters.

- * - * @noinspection ParameterDefaultValueIsNotNullInspection */ public static function to_transliterate( string $str, $unknown = '?', bool $strict = false ): string { - /** @var array|null */ static $UTF8_TO_TRANSLIT = null; - /** null|\Transliterator */ static $TRANSLITERATOR = null; - /** @var bool|null */ static $SUPPORT_INTL = null; if ($str === '') { @@ -1168,7 +1126,7 @@ final class ASCII $str = self::clean($str); - // check again, if we only have ASCII, now ... + // check again if we only have ASCII, now ... if ( $str_tmp !== $str && @@ -1184,7 +1142,6 @@ final class ASCII ) { if (!isset($TRANSLITERATOR)) { // INFO: see "*-Latin" rules via "transliterator_list_ids()" - /** @var \Transliterator */ $TRANSLITERATOR = \transliterator_create('NFKC; [:Nonspacing Mark:] Remove; NFKC; Any-Latin; Latin-ASCII;'); } @@ -1192,8 +1149,7 @@ final class ASCII $str_tmp = \transliterator_transliterate($TRANSLITERATOR, $str); if ($str_tmp !== false) { - - // check again, if we only have ASCII, now ... + // check again if we only have ASCII, now ... if ( $str_tmp !== $str && @@ -1285,7 +1241,6 @@ final class ASCII $new_char = $ord & 255; if (isset($UTF8_TO_TRANSLIT[$bank][$new_char])) { - // keep for debugging /* echo "file: " . sprintf('x%02x', $bank) . "\n"; @@ -1299,8 +1254,7 @@ final class ASCII $new_char = $UTF8_TO_TRANSLIT[$bank][$new_char]; - /** @noinspection MissingOrEmptyGroupStatementInspection */ - /** @noinspection PhpStatementHasEmptyBodyInspection */ + /* @noinspection PhpStatementHasEmptyBodyInspection */ if ($unknown === null && $new_char === '') { // nothing } elseif ( @@ -1313,7 +1267,6 @@ final class ASCII $c = $new_char; } } else { - // keep for debugging missing chars /* echo "file: " . sprintf('x%02x', $bank) . "\n"; @@ -1352,7 +1305,7 @@ final class ASCII * @param array $map

Internal-Map of code points to ASCII characters.

* * @return string - *

Mapped borken string.

+ *

Mapped broken string.

* * @phpstan-param array $map */ @@ -1385,12 +1338,6 @@ final class ASCII * DE_DE -> de * de-de -> de * - * @noinspection ReturnTypeCanBeDeclaredInspection - * - * @param string $language - * - * @psalm-pure - * * @return string */ private static function get_language(string $language) @@ -1417,39 +1364,22 @@ final class ASCII /** * Get data from "/data/*.php". * - * @noinspection ReturnTypeCanBeDeclaredInspection - * - * @param string $file - * - * @psalm-pure - * - * @return array + * @return array */ private static function getData(string $file) { - /** @noinspection PhpIncludeInspection */ - /** @noinspection UsingInclusionReturnValueInspection */ - /** @psalm-suppress UnresolvableInclude */ return include __DIR__ . '/data/' . $file . '.php'; } /** * Get data from "/data/*.php". * - * @param string $file - * - * @psalm-pure - * - * @return array + * @return array */ private static function getDataIfExists(string $file): array { $file = __DIR__ . '/data/' . $file . '.php'; - /** @psalm-suppress ImpureFunctionCall */ if (\is_file($file)) { - /** @noinspection PhpIncludeInspection */ - /** @noinspection UsingInclusionReturnValueInspection */ - /** @psalm-suppress UnresolvableInclude */ return include $file; } @@ -1457,8 +1387,6 @@ final class ASCII } /** - * @psalm-pure - * * @return void */ private static function prepareAsciiAndExtrasMaps() @@ -1467,7 +1395,6 @@ final class ASCII self::prepareAsciiMaps(); self::prepareAsciiExtras(); - /** @psalm-suppress PossiblyNullArgument - we use the prepare* methods here, so we don't get NULL here */ self::$ASCII_MAPS_AND_EXTRAS = \array_merge_recursive( self::$ASCII_MAPS ?? [], self::$ASCII_EXTRAS ?? [] @@ -1476,8 +1403,6 @@ final class ASCII } /** - * @psalm-pure - * * @return void */ private static function prepareAsciiMaps() @@ -1488,8 +1413,6 @@ final class ASCII } /** - * @psalm-pure - * * @return void */ private static function prepareAsciiExtras()