Update composer dependencies
authorTim Düsterhus <duesterhus@woltlab.com>
Mon, 28 Aug 2023 09:50:34 +0000 (11:50 +0200)
committerTim Düsterhus <duesterhus@woltlab.com>
Mon, 28 Aug 2023 09:51:04 +0000 (11:51 +0200)
54 files changed:
wcfsetup/install/files/lib/system/api/composer.json
wcfsetup/install/files/lib/system/api/composer.lock
wcfsetup/install/files/lib/system/api/composer/autoload_classmap.php
wcfsetup/install/files/lib/system/api/composer/autoload_static.php
wcfsetup/install/files/lib/system/api/composer/installed.json
wcfsetup/install/files/lib/system/api/composer/installed.php
wcfsetup/install/files/lib/system/api/guzzlehttp/guzzle/CHANGELOG.md
wcfsetup/install/files/lib/system/api/guzzlehttp/guzzle/UPGRADING.md
wcfsetup/install/files/lib/system/api/guzzlehttp/guzzle/composer.json
wcfsetup/install/files/lib/system/api/guzzlehttp/guzzle/src/Client.php
wcfsetup/install/files/lib/system/api/guzzlehttp/guzzle/src/ClientInterface.php
wcfsetup/install/files/lib/system/api/guzzlehttp/guzzle/src/Cookie/CookieJar.php
wcfsetup/install/files/lib/system/api/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php
wcfsetup/install/files/lib/system/api/guzzlehttp/guzzle/src/Handler/CurlFactory.php
wcfsetup/install/files/lib/system/api/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php
wcfsetup/install/files/lib/system/api/guzzlehttp/guzzle/src/HandlerStack.php
wcfsetup/install/files/lib/system/api/guzzlehttp/guzzle/src/MessageFormatter.php
wcfsetup/install/files/lib/system/api/guzzlehttp/guzzle/src/MessageFormatterInterface.php
wcfsetup/install/files/lib/system/api/guzzlehttp/guzzle/src/RedirectMiddleware.php
wcfsetup/install/files/lib/system/api/guzzlehttp/guzzle/src/TransferStats.php
wcfsetup/install/files/lib/system/api/guzzlehttp/psr7/CHANGELOG.md
wcfsetup/install/files/lib/system/api/guzzlehttp/psr7/src/AppendStream.php
wcfsetup/install/files/lib/system/api/guzzlehttp/psr7/src/BufferStream.php
wcfsetup/install/files/lib/system/api/guzzlehttp/psr7/src/FnStream.php
wcfsetup/install/files/lib/system/api/guzzlehttp/psr7/src/Message.php
wcfsetup/install/files/lib/system/api/guzzlehttp/psr7/src/MessageTrait.php
wcfsetup/install/files/lib/system/api/guzzlehttp/psr7/src/PumpStream.php
wcfsetup/install/files/lib/system/api/guzzlehttp/psr7/src/ServerRequest.php
wcfsetup/install/files/lib/system/api/guzzlehttp/psr7/src/Stream.php
wcfsetup/install/files/lib/system/api/guzzlehttp/psr7/src/StreamDecoratorTrait.php
wcfsetup/install/files/lib/system/api/guzzlehttp/psr7/src/UriNormalizer.php
wcfsetup/install/files/lib/system/api/guzzlehttp/psr7/src/UriResolver.php
wcfsetup/install/files/lib/system/api/guzzlehttp/psr7/src/Utils.php
wcfsetup/install/files/lib/system/api/symfony/polyfill-php82/LICENSE
wcfsetup/install/files/lib/system/api/symfony/polyfill-php82/Php82.php [new file with mode: 0644]
wcfsetup/install/files/lib/system/api/symfony/polyfill-php82/README.md
wcfsetup/install/files/lib/system/api/symfony/polyfill-php82/bootstrap.php
wcfsetup/install/files/lib/system/api/symfony/polyfill-php82/composer.json
wcfsetup/install/files/lib/system/api/symfony/polyfill-php83/LICENSE
wcfsetup/install/files/lib/system/api/symfony/polyfill-php83/Php83.php
wcfsetup/install/files/lib/system/api/symfony/polyfill-php83/README.md
wcfsetup/install/files/lib/system/api/symfony/polyfill-php83/Resources/stubs/DateError.php [new file with mode: 0644]
wcfsetup/install/files/lib/system/api/symfony/polyfill-php83/Resources/stubs/DateException.php [new file with mode: 0644]
wcfsetup/install/files/lib/system/api/symfony/polyfill-php83/Resources/stubs/DateInvalidOperationException.php [new file with mode: 0644]
wcfsetup/install/files/lib/system/api/symfony/polyfill-php83/Resources/stubs/DateInvalidTimeZoneException.php [new file with mode: 0644]
wcfsetup/install/files/lib/system/api/symfony/polyfill-php83/Resources/stubs/DateMalformedIntervalStringException.php [new file with mode: 0644]
wcfsetup/install/files/lib/system/api/symfony/polyfill-php83/Resources/stubs/DateMalformedPeriodStringException.php [new file with mode: 0644]
wcfsetup/install/files/lib/system/api/symfony/polyfill-php83/Resources/stubs/DateMalformedStringException.php [new file with mode: 0644]
wcfsetup/install/files/lib/system/api/symfony/polyfill-php83/Resources/stubs/DateObjectError.php [new file with mode: 0644]
wcfsetup/install/files/lib/system/api/symfony/polyfill-php83/Resources/stubs/DateRangeError.php [new file with mode: 0644]
wcfsetup/install/files/lib/system/api/symfony/polyfill-php83/Resources/stubs/Override.php [new file with mode: 0644]
wcfsetup/install/files/lib/system/api/symfony/polyfill-php83/bootstrap.php
wcfsetup/install/files/lib/system/api/symfony/polyfill-php83/bootstrap81.php [new file with mode: 0644]
wcfsetup/install/files/lib/system/api/symfony/polyfill-php83/composer.json

index 8717ec93f3f7ebd5e1babbe8559eb69536d5f446..2608362093aa4ffea704278985818dc602c1efa6 100644 (file)
@@ -14,8 +14,8 @@
         "dragonmantank/cron-expression": "^3.3.3",
         "erusev/parsedown": "^1.7.4",
         "ezyang/htmlpurifier": "^4.16",
-        "guzzlehttp/guzzle": "^7.7.0",
-        "guzzlehttp/psr7": "^2.6.0",
+        "guzzlehttp/guzzle": "^7.8.0",
+        "guzzlehttp/psr7": "^2.6.1",
         "laminas/laminas-diactoros": "^3.1.0",
         "laminas/laminas-httphandlerrunner": "^2.7.0",
         "laminas/laminas-progressbar": "^2.12",
@@ -29,8 +29,8 @@
         "psr/log": "^3.0",
         "scssphp/scssphp": "^1.11",
         "sebastian/diff": "^5.0.3",
-        "symfony/polyfill-php82": "^1.27.0",
-        "symfony/polyfill-php83": "^1.27",
+        "symfony/polyfill-php82": "^1.28.0",
+        "symfony/polyfill-php83": "^1.28",
         "willdurand/negotiation": "^3.1"
     },
     "replace": {
index 007747f7d025b866c1f24ec5cde2c7889bf49256..93f5faa44091c5c21313f12a335b2bbbefb6bd83 100644 (file)
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "7044d6daf69850dcfd60f482ab45327c",
+    "content-hash": "be8a1db5c9093dd354bbaaab259f50ff",
     "packages": [
         {
             "name": "cuyz/valinor",
         },
         {
             "name": "guzzlehttp/guzzle",
-            "version": "7.7.0",
+            "version": "7.8.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/guzzle/guzzle.git",
-                "reference": "fb7566caccf22d74d1ab270de3551f72a58399f5"
+                "reference": "1110f66a6530a40fe7aea0378fe608ee2b2248f9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/fb7566caccf22d74d1ab270de3551f72a58399f5",
-                "reference": "fb7566caccf22d74d1ab270de3551f72a58399f5",
+                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/1110f66a6530a40fe7aea0378fe608ee2b2248f9",
+                "reference": "1110f66a6530a40fe7aea0378fe608ee2b2248f9",
                 "shasum": ""
             },
             "require": {
                 "ext-json": "*",
-                "guzzlehttp/promises": "^1.5.3 || ^2.0",
-                "guzzlehttp/psr7": "^1.9.1 || ^2.4.5",
+                "guzzlehttp/promises": "^1.5.3 || ^2.0.1",
+                "guzzlehttp/psr7": "^1.9.1 || ^2.5.1",
                 "php": "^7.2.5 || ^8.0",
                 "psr/http-client": "^1.0",
                 "symfony/deprecation-contracts": "^2.2 || ^3.0"
             ],
             "support": {
                 "issues": "https://github.com/guzzle/guzzle/issues",
-                "source": "https://github.com/guzzle/guzzle/tree/7.7.0"
+                "source": "https://github.com/guzzle/guzzle/tree/7.8.0"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2023-05-21T14:04:53+00:00"
+            "time": "2023-08-27T10:20:53+00:00"
         },
         {
             "name": "guzzlehttp/promises",
         },
         {
             "name": "guzzlehttp/psr7",
-            "version": "2.6.0",
+            "version": "2.6.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/guzzle/psr7.git",
-                "reference": "8bd7c33a0734ae1c5d074360512beb716bef3f77"
+                "reference": "be45764272e8873c72dbe3d2edcfdfcc3bc9f727"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/guzzle/psr7/zipball/8bd7c33a0734ae1c5d074360512beb716bef3f77",
-                "reference": "8bd7c33a0734ae1c5d074360512beb716bef3f77",
+                "url": "https://api.github.com/repos/guzzle/psr7/zipball/be45764272e8873c72dbe3d2edcfdfcc3bc9f727",
+                "reference": "be45764272e8873c72dbe3d2edcfdfcc3bc9f727",
                 "shasum": ""
             },
             "require": {
             ],
             "support": {
                 "issues": "https://github.com/guzzle/psr7/issues",
-                "source": "https://github.com/guzzle/psr7/tree/2.6.0"
+                "source": "https://github.com/guzzle/psr7/tree/2.6.1"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2023-08-03T15:06:02+00:00"
+            "time": "2023-08-27T10:13:57+00:00"
         },
         {
             "name": "laminas/laminas-diactoros",
         },
         {
             "name": "symfony/polyfill-php82",
-            "version": "v1.27.0",
+            "version": "v1.28.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-php82.git",
-                "reference": "80ddf7bfa17ef7b06db4e6d007a95bf584e07b44"
+                "reference": "7716bea9c86776fb3362d6b52fe1fc9471056a49"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-php82/zipball/80ddf7bfa17ef7b06db4e6d007a95bf584e07b44",
-                "reference": "80ddf7bfa17ef7b06db4e6d007a95bf584e07b44",
+                "url": "https://api.github.com/repos/symfony/polyfill-php82/zipball/7716bea9c86776fb3362d6b52fe1fc9471056a49",
+                "reference": "7716bea9c86776fb3362d6b52fe1fc9471056a49",
                 "shasum": ""
             },
             "require": {
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-main": "1.27-dev"
+                    "dev-main": "1.28-dev"
                 },
                 "thanks": {
                     "name": "symfony/polyfill",
                 "shim"
             ],
             "support": {
-                "source": "https://github.com/symfony/polyfill-php82/tree/v1.27.0"
+                "source": "https://github.com/symfony/polyfill-php82/tree/v1.28.0"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2022-11-10T10:10:54+00:00"
+            "time": "2023-08-25T17:27:25+00:00"
         },
         {
             "name": "symfony/polyfill-php83",
-            "version": "v1.27.0",
+            "version": "v1.28.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-php83.git",
-                "reference": "508c652ba3ccf69f8c97f251534f229791b52a57"
+                "reference": "b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/508c652ba3ccf69f8c97f251534f229791b52a57",
-                "reference": "508c652ba3ccf69f8c97f251534f229791b52a57",
+                "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11",
+                "reference": "b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11",
                 "shasum": ""
             },
             "require": {
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-main": "1.27-dev"
+                    "dev-main": "1.28-dev"
                 },
                 "thanks": {
                     "name": "symfony/polyfill",
                 ],
                 "psr-4": {
                     "Symfony\\Polyfill\\Php83\\": ""
-                }
+                },
+                "classmap": [
+                    "Resources/stubs"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
                 "shim"
             ],
             "support": {
-                "source": "https://github.com/symfony/polyfill-php83/tree/v1.27.0"
+                "source": "https://github.com/symfony/polyfill-php83/tree/v1.28.0"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2022-11-03T14:55:06+00:00"
+            "time": "2023-08-16T06:22:46+00:00"
         },
         {
             "name": "webmozart/assert",
index a7bfbf9a4d07b3d7e4c96310cbb5ad24e227e0db..b27c7fceffe9dc279361a6699be39e8df0c46ef3 100644 (file)
@@ -341,6 +341,15 @@ return array(
     'CuyZ\\Valinor\\Utility\\String\\StringFormatterError' => $vendorDir . '/cuyz/valinor/src/Utility/String/StringFormatterError.php',
     'CuyZ\\Valinor\\Utility\\TypeHelper' => $vendorDir . '/cuyz/valinor/src/Utility/TypeHelper.php',
     'CuyZ\\Valinor\\Utility\\ValueDumper' => $vendorDir . '/cuyz/valinor/src/Utility/ValueDumper.php',
+    'DateError' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/DateError.php',
+    'DateException' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/DateException.php',
+    'DateInvalidOperationException' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/DateInvalidOperationException.php',
+    'DateInvalidTimeZoneException' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/DateInvalidTimeZoneException.php',
+    'DateMalformedIntervalStringException' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/DateMalformedIntervalStringException.php',
+    'DateMalformedPeriodStringException' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/DateMalformedPeriodStringException.php',
+    'DateMalformedStringException' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/DateMalformedStringException.php',
+    'DateObjectError' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/DateObjectError.php',
+    'DateRangeError' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/DateRangeError.php',
     'GuzzleHttp\\BodySummarizer' => $vendorDir . '/guzzlehttp/guzzle/src/BodySummarizer.php',
     'GuzzleHttp\\BodySummarizerInterface' => $vendorDir . '/guzzlehttp/guzzle/src/BodySummarizerInterface.php',
     'GuzzleHttp\\Client' => $vendorDir . '/guzzlehttp/guzzle/src/Client.php',
@@ -802,6 +811,7 @@ return array(
     'Negotiation\\Exception\\InvalidMediaType' => $vendorDir . '/willdurand/negotiation/src/Negotiation/Exception/InvalidMediaType.php',
     'Negotiation\\LanguageNegotiator' => $vendorDir . '/willdurand/negotiation/src/Negotiation/LanguageNegotiator.php',
     'Negotiation\\Negotiator' => $vendorDir . '/willdurand/negotiation/src/Negotiation/Negotiator.php',
+    'Override' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/Override.php',
     'ParagonIE\\ConstantTime\\Base32' => $vendorDir . '/paragonie/constant_time_encoding/src/Base32.php',
     'ParagonIE\\ConstantTime\\Base32Hex' => $vendorDir . '/paragonie/constant_time_encoding/src/Base32Hex.php',
     'ParagonIE\\ConstantTime\\Base64' => $vendorDir . '/paragonie/constant_time_encoding/src/Base64.php',
@@ -1020,6 +1030,7 @@ return array(
     'Symfony\\Component\\CssSelector\\XPath\\TranslatorInterface' => $vendorDir . '/symfony/css-selector/XPath/TranslatorInterface.php',
     'Symfony\\Component\\CssSelector\\XPath\\XPathExpr' => $vendorDir . '/symfony/css-selector/XPath/XPathExpr.php',
     'Symfony\\Polyfill\\Php82\\NoDynamicProperties' => $vendorDir . '/symfony/polyfill-php82/NoDynamicProperties.php',
+    'Symfony\\Polyfill\\Php82\\Php82' => $vendorDir . '/symfony/polyfill-php82/Php82.php',
     'Symfony\\Polyfill\\Php82\\Random\\Engine\\Secure' => $vendorDir . '/symfony/polyfill-php82/Random/Engine/Secure.php',
     'Symfony\\Polyfill\\Php82\\SensitiveParameterValue' => $vendorDir . '/symfony/polyfill-php82/SensitiveParameterValue.php',
     'Symfony\\Polyfill\\Php83\\Php83' => $vendorDir . '/symfony/polyfill-php83/Php83.php',
index c837b0ca6c28deba4739ef5e1ee90f1f2fd2971a..76774ed415593316cdf8e39a4316069c8aead9cc 100644 (file)
@@ -529,6 +529,15 @@ class ComposerStaticInita1f5f7c74275d47a45049a2936db1d0d
         'CuyZ\\Valinor\\Utility\\String\\StringFormatterError' => __DIR__ . '/..' . '/cuyz/valinor/src/Utility/String/StringFormatterError.php',
         'CuyZ\\Valinor\\Utility\\TypeHelper' => __DIR__ . '/..' . '/cuyz/valinor/src/Utility/TypeHelper.php',
         'CuyZ\\Valinor\\Utility\\ValueDumper' => __DIR__ . '/..' . '/cuyz/valinor/src/Utility/ValueDumper.php',
+        'DateError' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/DateError.php',
+        'DateException' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/DateException.php',
+        'DateInvalidOperationException' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/DateInvalidOperationException.php',
+        'DateInvalidTimeZoneException' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/DateInvalidTimeZoneException.php',
+        'DateMalformedIntervalStringException' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/DateMalformedIntervalStringException.php',
+        'DateMalformedPeriodStringException' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/DateMalformedPeriodStringException.php',
+        'DateMalformedStringException' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/DateMalformedStringException.php',
+        'DateObjectError' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/DateObjectError.php',
+        'DateRangeError' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/DateRangeError.php',
         'GuzzleHttp\\BodySummarizer' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/BodySummarizer.php',
         'GuzzleHttp\\BodySummarizerInterface' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/BodySummarizerInterface.php',
         'GuzzleHttp\\Client' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Client.php',
@@ -990,6 +999,7 @@ class ComposerStaticInita1f5f7c74275d47a45049a2936db1d0d
         'Negotiation\\Exception\\InvalidMediaType' => __DIR__ . '/..' . '/willdurand/negotiation/src/Negotiation/Exception/InvalidMediaType.php',
         'Negotiation\\LanguageNegotiator' => __DIR__ . '/..' . '/willdurand/negotiation/src/Negotiation/LanguageNegotiator.php',
         'Negotiation\\Negotiator' => __DIR__ . '/..' . '/willdurand/negotiation/src/Negotiation/Negotiator.php',
+        'Override' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/Override.php',
         'ParagonIE\\ConstantTime\\Base32' => __DIR__ . '/..' . '/paragonie/constant_time_encoding/src/Base32.php',
         'ParagonIE\\ConstantTime\\Base32Hex' => __DIR__ . '/..' . '/paragonie/constant_time_encoding/src/Base32Hex.php',
         'ParagonIE\\ConstantTime\\Base64' => __DIR__ . '/..' . '/paragonie/constant_time_encoding/src/Base64.php',
@@ -1208,6 +1218,7 @@ class ComposerStaticInita1f5f7c74275d47a45049a2936db1d0d
         'Symfony\\Component\\CssSelector\\XPath\\TranslatorInterface' => __DIR__ . '/..' . '/symfony/css-selector/XPath/TranslatorInterface.php',
         'Symfony\\Component\\CssSelector\\XPath\\XPathExpr' => __DIR__ . '/..' . '/symfony/css-selector/XPath/XPathExpr.php',
         'Symfony\\Polyfill\\Php82\\NoDynamicProperties' => __DIR__ . '/..' . '/symfony/polyfill-php82/NoDynamicProperties.php',
+        'Symfony\\Polyfill\\Php82\\Php82' => __DIR__ . '/..' . '/symfony/polyfill-php82/Php82.php',
         'Symfony\\Polyfill\\Php82\\Random\\Engine\\Secure' => __DIR__ . '/..' . '/symfony/polyfill-php82/Random/Engine/Secure.php',
         'Symfony\\Polyfill\\Php82\\SensitiveParameterValue' => __DIR__ . '/..' . '/symfony/polyfill-php82/SensitiveParameterValue.php',
         'Symfony\\Polyfill\\Php83\\Php83' => __DIR__ . '/..' . '/symfony/polyfill-php83/Php83.php',
index 0863aadc5e3d8a57526091d77414e403e12c5fe6..b3085237f93c05954ca0264bea698b9957bf04b4 100644 (file)
         },
         {
             "name": "guzzlehttp/guzzle",
-            "version": "7.7.0",
-            "version_normalized": "7.7.0.0",
+            "version": "7.8.0",
+            "version_normalized": "7.8.0.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/guzzle/guzzle.git",
-                "reference": "fb7566caccf22d74d1ab270de3551f72a58399f5"
+                "reference": "1110f66a6530a40fe7aea0378fe608ee2b2248f9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/fb7566caccf22d74d1ab270de3551f72a58399f5",
-                "reference": "fb7566caccf22d74d1ab270de3551f72a58399f5",
+                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/1110f66a6530a40fe7aea0378fe608ee2b2248f9",
+                "reference": "1110f66a6530a40fe7aea0378fe608ee2b2248f9",
                 "shasum": ""
             },
             "require": {
                 "ext-json": "*",
-                "guzzlehttp/promises": "^1.5.3 || ^2.0",
-                "guzzlehttp/psr7": "^1.9.1 || ^2.4.5",
+                "guzzlehttp/promises": "^1.5.3 || ^2.0.1",
+                "guzzlehttp/psr7": "^1.9.1 || ^2.5.1",
                 "php": "^7.2.5 || ^8.0",
                 "psr/http-client": "^1.0",
                 "symfony/deprecation-contracts": "^2.2 || ^3.0"
                 "ext-intl": "Required for Internationalized Domain Name (IDN) support",
                 "psr/log": "Required for using the Log middleware"
             },
-            "time": "2023-05-21T14:04:53+00:00",
+            "time": "2023-08-27T10:20:53+00:00",
             "type": "library",
             "extra": {
                 "bamarni-bin": {
             ],
             "support": {
                 "issues": "https://github.com/guzzle/guzzle/issues",
-                "source": "https://github.com/guzzle/guzzle/tree/7.7.0"
+                "source": "https://github.com/guzzle/guzzle/tree/7.8.0"
             },
             "funding": [
                 {
         },
         {
             "name": "guzzlehttp/psr7",
-            "version": "2.6.0",
-            "version_normalized": "2.6.0.0",
+            "version": "2.6.1",
+            "version_normalized": "2.6.1.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/guzzle/psr7.git",
-                "reference": "8bd7c33a0734ae1c5d074360512beb716bef3f77"
+                "reference": "be45764272e8873c72dbe3d2edcfdfcc3bc9f727"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/guzzle/psr7/zipball/8bd7c33a0734ae1c5d074360512beb716bef3f77",
-                "reference": "8bd7c33a0734ae1c5d074360512beb716bef3f77",
+                "url": "https://api.github.com/repos/guzzle/psr7/zipball/be45764272e8873c72dbe3d2edcfdfcc3bc9f727",
+                "reference": "be45764272e8873c72dbe3d2edcfdfcc3bc9f727",
                 "shasum": ""
             },
             "require": {
             "suggest": {
                 "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
             },
-            "time": "2023-08-03T15:06:02+00:00",
+            "time": "2023-08-27T10:13:57+00:00",
             "type": "library",
             "extra": {
                 "bamarni-bin": {
             ],
             "support": {
                 "issues": "https://github.com/guzzle/psr7/issues",
-                "source": "https://github.com/guzzle/psr7/tree/2.6.0"
+                "source": "https://github.com/guzzle/psr7/tree/2.6.1"
             },
             "funding": [
                 {
         },
         {
             "name": "symfony/polyfill-php82",
-            "version": "v1.27.0",
-            "version_normalized": "1.27.0.0",
+            "version": "v1.28.0",
+            "version_normalized": "1.28.0.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-php82.git",
-                "reference": "80ddf7bfa17ef7b06db4e6d007a95bf584e07b44"
+                "reference": "7716bea9c86776fb3362d6b52fe1fc9471056a49"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-php82/zipball/80ddf7bfa17ef7b06db4e6d007a95bf584e07b44",
-                "reference": "80ddf7bfa17ef7b06db4e6d007a95bf584e07b44",
+                "url": "https://api.github.com/repos/symfony/polyfill-php82/zipball/7716bea9c86776fb3362d6b52fe1fc9471056a49",
+                "reference": "7716bea9c86776fb3362d6b52fe1fc9471056a49",
                 "shasum": ""
             },
             "require": {
                 "php": ">=7.1"
             },
-            "time": "2022-11-10T10:10:54+00:00",
+            "time": "2023-08-25T17:27:25+00:00",
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-main": "1.27-dev"
+                    "dev-main": "1.28-dev"
                 },
                 "thanks": {
                     "name": "symfony/polyfill",
                 "shim"
             ],
             "support": {
-                "source": "https://github.com/symfony/polyfill-php82/tree/v1.27.0"
+                "source": "https://github.com/symfony/polyfill-php82/tree/v1.28.0"
             },
             "funding": [
                 {
         },
         {
             "name": "symfony/polyfill-php83",
-            "version": "v1.27.0",
-            "version_normalized": "1.27.0.0",
+            "version": "v1.28.0",
+            "version_normalized": "1.28.0.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-php83.git",
-                "reference": "508c652ba3ccf69f8c97f251534f229791b52a57"
+                "reference": "b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/508c652ba3ccf69f8c97f251534f229791b52a57",
-                "reference": "508c652ba3ccf69f8c97f251534f229791b52a57",
+                "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11",
+                "reference": "b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11",
                 "shasum": ""
             },
             "require": {
                 "php": ">=7.1",
                 "symfony/polyfill-php80": "^1.14"
             },
-            "time": "2022-11-03T14:55:06+00:00",
+            "time": "2023-08-16T06:22:46+00:00",
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-main": "1.27-dev"
+                    "dev-main": "1.28-dev"
                 },
                 "thanks": {
                     "name": "symfony/polyfill",
                 ],
                 "psr-4": {
                     "Symfony\\Polyfill\\Php83\\": ""
-                }
+                },
+                "classmap": [
+                    "Resources/stubs"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
                 "shim"
             ],
             "support": {
-                "source": "https://github.com/symfony/polyfill-php83/tree/v1.27.0"
+                "source": "https://github.com/symfony/polyfill-php83/tree/v1.28.0"
             },
             "funding": [
                 {
index 7b29adc6b1946f384d895c32593b1212d81ed582..f35bfe5b8fab4a70a1d4fb2cb236fb35fee9f4bd 100644 (file)
@@ -56,9 +56,9 @@
             'dev_requirement' => false,
         ),
         'guzzlehttp/guzzle' => array(
-            'pretty_version' => '7.7.0',
-            'version' => '7.7.0.0',
-            'reference' => 'fb7566caccf22d74d1ab270de3551f72a58399f5',
+            'pretty_version' => '7.8.0',
+            'version' => '7.8.0.0',
+            'reference' => '1110f66a6530a40fe7aea0378fe608ee2b2248f9',
             'type' => 'library',
             'install_path' => __DIR__ . '/../guzzlehttp/guzzle',
             'aliases' => array(),
@@ -74,9 +74,9 @@
             'dev_requirement' => false,
         ),
         'guzzlehttp/psr7' => array(
-            'pretty_version' => '2.6.0',
-            'version' => '2.6.0.0',
-            'reference' => '8bd7c33a0734ae1c5d074360512beb716bef3f77',
+            'pretty_version' => '2.6.1',
+            'version' => '2.6.1.0',
+            'reference' => 'be45764272e8873c72dbe3d2edcfdfcc3bc9f727',
             'type' => 'library',
             'install_path' => __DIR__ . '/../guzzlehttp/psr7',
             'aliases' => array(),
         'psr/http-factory-implementation' => array(
             'dev_requirement' => false,
             'provided' => array(
-                0 => '1.0',
-                1 => '^1.1 || ^2.0',
+                0 => '^1.1 || ^2.0',
+                1 => '1.0',
             ),
         ),
         'psr/http-message' => array(
         'psr/http-message-implementation' => array(
             'dev_requirement' => false,
             'provided' => array(
-                0 => '1.0',
-                1 => '^1.1 || ^2.0',
+                0 => '^1.1 || ^2.0',
+                1 => '1.0',
             ),
         ),
         'psr/http-server-handler' => array(
             ),
         ),
         'symfony/polyfill-php82' => array(
-            'pretty_version' => 'v1.27.0',
-            'version' => '1.27.0.0',
-            'reference' => '80ddf7bfa17ef7b06db4e6d007a95bf584e07b44',
+            'pretty_version' => 'v1.28.0',
+            'version' => '1.28.0.0',
+            'reference' => '7716bea9c86776fb3362d6b52fe1fc9471056a49',
             'type' => 'library',
             'install_path' => __DIR__ . '/../symfony/polyfill-php82',
             'aliases' => array(),
             'dev_requirement' => false,
         ),
         'symfony/polyfill-php83' => array(
-            'pretty_version' => 'v1.27.0',
-            'version' => '1.27.0.0',
-            'reference' => '508c652ba3ccf69f8c97f251534f229791b52a57',
+            'pretty_version' => 'v1.28.0',
+            'version' => '1.28.0.0',
+            'reference' => 'b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11',
             'type' => 'library',
             'install_path' => __DIR__ . '/../symfony/polyfill-php83',
             'aliases' => array(),
index 1144eb76307e8d50f644c19a4d2f99588aa2a600..990b86c9e60cef42fcf7883775c9f76f8284f26a 100644 (file)
@@ -3,6 +3,21 @@
 Please refer to [UPGRADING](UPGRADING.md) guide for upgrading to a major version.
 
 
+## 7.8.0 - 2023-08-27
+
+### Added
+
+- Support for PHP 8.3
+- Added automatic closing of handles on `CurlFactory` object destruction
+
+
+## 7.7.1 - 2023-08-27
+
+### Changed
+
+- Remove the need for `AllowDynamicProperties` in `CurlMultiHandler`
+
+
 ## 7.7.0 - 2023-05-21
 
 ### Added
index 45417a7e1fc868de11ece660f6eae537d2a470ae..8fa0afb5dc19f5b7cc6e03929c4fc1f9ef25d88e 100644 (file)
@@ -27,7 +27,7 @@ Please make sure:
 - Function `GuzzleHttp\Exception\RequestException::getResponseBodySummary` is removed.
   Use `\GuzzleHttp\Psr7\get_message_body_summary` as an alternative.
 - Function `GuzzleHttp\Cookie\CookieJar::getCookieValue` is removed.
-- Request option `exception` is removed. Please use `http_errors`.
+- Request option `exceptions` is removed. Please use `http_errors`.
 - Request option `save_to` is removed. Please use `sink`.
 - Pool option `pool_size` is removed. Please use `concurrency`.
 - We now look for environment variables in the `$_SERVER` super global, due to thread safety issues with `getenv`. We continue to fallback to `getenv` in CLI environments, for maximum compatibility.
index 3207f8c3a8304e717e86d38dcd22efdf25900e65..72defd61413a08fc7b75b27bd3bebfad0dd2b9fe 100644 (file)
@@ -53,8 +53,8 @@
     "require": {
         "php": "^7.2.5 || ^8.0",
         "ext-json": "*",
-        "guzzlehttp/promises": "^1.5.3 || ^2.0",
-        "guzzlehttp/psr7": "^1.9.1 || ^2.4.5",
+        "guzzlehttp/promises": "^1.5.3 || ^2.0.1",
+        "guzzlehttp/psr7": "^1.9.1 || ^2.5.1",
         "psr/http-client": "^1.0",
         "symfony/deprecation-contracts": "^2.2 || ^3.0"
     },
index 9b0d71070e4692f0a0ea4a7b994deb1f3a24b5dc..bc6efc90fcbd6055c80748c6b2a38ecffea39608 100644 (file)
@@ -202,7 +202,7 @@ class Client implements ClientInterface, \Psr\Http\Client\ClientInterface
      *
      * @deprecated Client::getConfig will be removed in guzzlehttp/guzzle:8.0.
      */
-    public function getConfig(?string $option = null)
+    public function getConfig(string $option = null)
     {
         return $option === null
             ? $this->config
index 6aaee61afc27304a6606087fa95cd8c8f27ba64e..1788e16ab35a8ce4b2a7ed0ede92ffbaf133ba5f 100644 (file)
@@ -80,5 +80,5 @@ interface ClientInterface
      *
      * @deprecated ClientInterface::getConfig will be removed in guzzlehttp/guzzle:8.0.
      */
-    public function getConfig(?string $option = null);
+    public function getConfig(string $option = null);
 }
index b4ced5a1ace786ace76feb48addfa510ae8e4ca0..fa2b10a8c6bd07dd2ed895ea3113d803d77db7bb 100644 (file)
@@ -96,9 +96,6 @@ class CookieJar implements CookieJarInterface
         return null;
     }
 
-    /**
-     * {@inheritDoc}
-     */
     public function toArray(): array
     {
         return \array_map(static function (SetCookie $cookie): array {
@@ -106,10 +103,7 @@ class CookieJar implements CookieJarInterface
         }, $this->getIterator()->getArrayCopy());
     }
 
-    /**
-     * {@inheritDoc}
-     */
-    public function clear(?string $domain = null, ?string $path = null, ?string $name = null): void
+    public function clear(string $domain = null, string $path = null, string $name = null): void
     {
         if (!$domain) {
             $this->cookies = [];
@@ -126,25 +120,22 @@ class CookieJar implements CookieJarInterface
             $this->cookies = \array_filter(
                 $this->cookies,
                 static function (SetCookie $cookie) use ($path, $domain): bool {
-                    return !($cookie->matchesPath($path) &&
-                        $cookie->matchesDomain($domain));
+                    return !($cookie->matchesPath($path)
+                        && $cookie->matchesDomain($domain));
                 }
             );
         } else {
             $this->cookies = \array_filter(
                 $this->cookies,
                 static function (SetCookie $cookie) use ($path, $domain, $name) {
-                    return !($cookie->getName() == $name &&
-                        $cookie->matchesPath($path) &&
-                        $cookie->matchesDomain($domain));
+                    return !($cookie->getName() == $name
+                        && $cookie->matchesPath($path)
+                        && $cookie->matchesDomain($domain));
                 }
             );
         }
     }
 
-    /**
-     * {@inheritDoc}
-     */
     public function clearSessionCookies(): void
     {
         $this->cookies = \array_filter(
@@ -155,9 +146,6 @@ class CookieJar implements CookieJarInterface
         );
     }
 
-    /**
-     * {@inheritDoc}
-     */
     public function setCookie(SetCookie $cookie): bool
     {
         // If the name string is empty (but not 0), ignore the set-cookie
@@ -182,9 +170,9 @@ class CookieJar implements CookieJarInterface
         foreach ($this->cookies as $i => $c) {
             // Two cookies are identical, when their path, and domain are
             // identical.
-            if ($c->getPath() != $cookie->getPath() ||
-                $c->getDomain() != $cookie->getDomain() ||
-                $c->getName() != $cookie->getName()
+            if ($c->getPath() != $cookie->getPath()
+                || $c->getDomain() != $cookie->getDomain()
+                || $c->getName() != $cookie->getName()
             ) {
                 continue;
             }
@@ -286,10 +274,10 @@ class CookieJar implements CookieJarInterface
         $path = $uri->getPath() ?: '/';
 
         foreach ($this->cookies as $cookie) {
-            if ($cookie->matchesPath($path) &&
-                $cookie->matchesDomain($host) &&
-                !$cookie->isExpired() &&
-                (!$cookie->getSecure() || $scheme === 'https')
+            if ($cookie->matchesPath($path)
+                && $cookie->matchesDomain($host)
+                && !$cookie->isExpired()
+                && (!$cookie->getSecure() || $scheme === 'https')
             ) {
                 $values[] = $cookie->getName().'='
                     .$cookie->getValue();
index 50bc36398bd51742a9044fd2a2a6e2d103390673..8c55cc6f70097af4445a3f6fe84f0e9099e90456 100644 (file)
@@ -14,6 +14,7 @@ use Psr\Http\Message\ResponseInterface;
  * cookies from a file, database, etc.
  *
  * @see https://docs.python.org/2/library/cookielib.html Inspiration
+ *
  * @extends \IteratorAggregate<SetCookie>
  */
 interface CookieJarInterface extends \Countable, \IteratorAggregate
@@ -61,7 +62,7 @@ interface CookieJarInterface extends \Countable, \IteratorAggregate
      * @param string|null $path   Clears cookies matching a domain and path
      * @param string|null $name   Clears cookies matching a domain, path, and name
      */
-    public function clear(?string $domain = null, ?string $path = null, ?string $name = null): void;
+    public function clear(string $domain = null, string $path = null, string $name = null): void;
 
     /**
      * Discard all sessions cookies.
index 3a6a8db26331c9e711978c6bab5ae8839be87397..be88d9e49707ab179ab7a2686f1293f00b164f49 100644 (file)
@@ -367,11 +367,11 @@ class CurlFactory implements CurlFactoryInterface
                     // If it's a directory or a link to a directory use CURLOPT_CAPATH.
                     // If not, it's probably a file, or a link to a file, so use CURLOPT_CAINFO.
                     if (
-                        \is_dir($options['verify']) ||
-                        (
-                            \is_link($options['verify']) === true &&
-                            ($verifyLink = \readlink($options['verify'])) !== false &&
-                            \is_dir($verifyLink)
+                        \is_dir($options['verify'])
+                        || (
+                            \is_link($options['verify']) === true
+                            && ($verifyLink = \readlink($options['verify'])) !== false
+                            && \is_dir($verifyLink)
                         )
                     ) {
                         $conf[\CURLOPT_CAPATH] = $options['verify'];
@@ -627,4 +627,12 @@ class CurlFactory implements CurlFactoryInterface
             return \strlen($h);
         };
     }
+
+    public function __destruct()
+    {
+        foreach ($this->handles as $id => $handle) {
+            \curl_close($handle);
+            unset($this->handles[$id]);
+        }
+    }
 }
index f0acde145e670dbf97abeb9d3eaea00fadf29bd5..a64e1821a9f3ac6791f07585642645637cf6f8f7 100644 (file)
@@ -15,11 +15,8 @@ use Psr\Http\Message\RequestInterface;
  * associative array of curl option constants mapping to values in the
  * **curl** key of the provided request options.
  *
- * @property resource|\CurlMultiHandle $_mh Internal use only. Lazy loaded multi-handle.
- *
  * @final
  */
-#[\AllowDynamicProperties]
 class CurlMultiHandler
 {
     /**
@@ -56,6 +53,9 @@ class CurlMultiHandler
      */
     private $options = [];
 
+    /** @var resource|\CurlMultiHandle */
+    private $_mh;
+
     /**
      * This handler accepts the following options:
      *
@@ -79,6 +79,10 @@ class CurlMultiHandler
         }
 
         $this->options = $options['options'] ?? [];
+
+        // unsetting the property forces the first access to go through
+        // __get().
+        unset($this->_mh);
     }
 
     /**
index 1ce9c4b19ec4e6b14fa11766e38b83e690d07bff..6cb12f07ab59e5852710b822fe1cb6eefc06494b 100644 (file)
@@ -44,7 +44,7 @@ class HandlerStack
      *                                                                            handler is provided, the best handler for your
      *                                                                            system will be utilized.
      */
-    public static function create(?callable $handler = null): self
+    public static function create(callable $handler = null): self
     {
         $stack = new self($handler ?: Utils::chooseHandler());
         $stack->push(Middleware::httpErrors(), 'http_errors');
@@ -131,7 +131,7 @@ class HandlerStack
      * @param callable(callable): callable $middleware Middleware function
      * @param string                       $name       Name to register for this middleware.
      */
-    public function unshift(callable $middleware, ?string $name = null): void
+    public function unshift(callable $middleware, string $name = null): void
     {
         \array_unshift($this->stack, [$middleware, $name]);
         $this->cached = null;
index 9b77eee8324dcb825825dc689d6b7a9a01bba933..04e9eb37a42591c9807b8687def12eff9bdba129 100644 (file)
@@ -68,7 +68,7 @@ class MessageFormatter implements MessageFormatterInterface
      * @param ResponseInterface|null $response Response that was received
      * @param \Throwable|null        $error    Exception that was received
      */
-    public function format(RequestInterface $request, ?ResponseInterface $response = null, ?\Throwable $error = null): string
+    public function format(RequestInterface $request, ResponseInterface $response = null, \Throwable $error = null): string
     {
         $cache = [];
 
index a39ac248ee32913583e7e497715ee1f1f461bb3e..47934614a05d4541fcef0b7ce72574fa151fd662 100644 (file)
@@ -14,5 +14,5 @@ interface MessageFormatterInterface
      * @param ResponseInterface|null $response Response that was received
      * @param \Throwable|null        $error    Exception that was received
      */
-    public function format(RequestInterface $request, ?ResponseInterface $response = null, ?\Throwable $error = null): string;
+    public function format(RequestInterface $request, ResponseInterface $response = null, \Throwable $error = null): string;
 }
index f32808a75820b00d647ffe23c31146bf28a409ff..7aa21a62323759a0f9c2f1659846a124511a96e1 100644 (file)
@@ -166,8 +166,8 @@ class RedirectMiddleware
         // not forcing RFC compliance, but rather emulating what all browsers
         // would do.
         $statusCode = $response->getStatusCode();
-        if ($statusCode == 303 ||
-            ($statusCode <= 302 && !$options['allow_redirects']['strict'])
+        if ($statusCode == 303
+            || ($statusCode <= 302 && !$options['allow_redirects']['strict'])
         ) {
             $safeMethods = ['GET', 'HEAD', 'OPTIONS'];
             $requestMethod = $request->getMethod();
index 93fa334c8d7aa71688628270b30f317c97e4d2d9..2ce9e38f2753546fc85fbba5ffdd1c47083c64c2 100644 (file)
@@ -46,8 +46,8 @@ final class TransferStats
      */
     public function __construct(
         RequestInterface $request,
-        ?ResponseInterface $response = null,
-        ?float $transferTime = null,
+        ResponseInterface $response = null,
+        float $transferTime = null,
         $handlerErrorData = null,
         array $handlerStats = []
     ) {
index e841f67ff7192b20ec7bdc9024800aca503fe34c..d897feedda0ddf6bd210b37debc4dcda55e3cc11 100644 (file)
@@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file.
 The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
 and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
 
+## 2.6.1 - 2023-08-27
+
+### Fixed
+
+- Properly handle the fact that PHP transforms numeric strings in array keys to ints
+
 ## 2.6.0 - 2023-08-03
 
 ### Changed
index 8361564b0d02e9806d8617d6d2683970ea9f1c63..ee8f37882f74607ddf4a41326cb8943fba892a45 100644 (file)
@@ -140,9 +140,9 @@ final class AppendStream implements StreamInterface
 
     public function eof(): bool
     {
-        return !$this->streams ||
-            ($this->current >= count($this->streams) - 1 &&
-             $this->streams[$this->current]->eof());
+        return !$this->streams
+            || ($this->current >= count($this->streams) - 1
+             && $this->streams[$this->current]->eof());
     }
 
     public function rewind(): void
@@ -239,8 +239,6 @@ final class AppendStream implements StreamInterface
     }
 
     /**
-     * {@inheritdoc}
-     *
      * @return mixed
      */
     public function getMetadata($key = null)
index 21be8c0a9de87066c140e597638a8ee905eec3c3..2b0eb77be056323bdccfbc1dab726ca41bfb3a6e 100644 (file)
@@ -134,8 +134,6 @@ final class BufferStream implements StreamInterface
     }
 
     /**
-     * {@inheritdoc}
-     *
      * @return mixed
      */
     public function getMetadata($key = null)
index 312b80ec7004f9b0ccd8ba6f8cc6a18d6200ed02..9fdddb9c6a2e167d7e0d3c297d176820b1455f13 100644 (file)
@@ -170,8 +170,6 @@ final class FnStream implements StreamInterface
     }
 
     /**
-     * {@inheritdoc}
-     *
      * @return mixed
      */
     public function getMetadata($key = null)
index 9b74b8d46f7f812e38869d8fb54b8b8df78e5c12..6e6c3e51be4b5acb54ef5d71285a352fa575b7a6 100644 (file)
@@ -33,7 +33,7 @@ final class Message
         }
 
         foreach ($message->getHeaders() as $name => $values) {
-            if (strtolower($name) === 'set-cookie') {
+            if (is_string($name) && strtolower($name) === 'set-cookie') {
                 foreach ($values as $value) {
                     $msg .= "\r\n{$name}: ".$value;
                 }
index a85d3ab2569def91741be9410114827ad0a5bcef..e05ebea88fc0a55161e6488378021bebee49463f 100644 (file)
@@ -12,10 +12,10 @@ use Psr\Http\Message\StreamInterface;
  */
 trait MessageTrait
 {
-    /** @var array<string, string[]> Map of all registered headers, as original name => array of values */
+    /** @var string[][] Map of all registered headers, as original name => array of values */
     private $headers = [];
 
-    /** @var array<string, string> Map of lowercase header name => original name at registration */
+    /** @var string[] Map of lowercase header name => original name at registration */
     private $headerNames = [];
 
     /** @var string */
index b52341d9ea7c668b882ab44deb96211d9ac3117f..5585190cfd3d83c07d2895a62850feabfa91f531 100644 (file)
@@ -34,7 +34,7 @@ final class PumpStream implements StreamInterface
     private $buffer;
 
     /**
-     * @param callable(int): (string|null|false)  $source  Source of the stream data. The callable MAY
+     * @param callable(int): (string|false|null)  $source  Source of the stream data. The callable MAY
      *                                                     accept an integer argument used to control the
      *                                                     amount of data to return. The callable MUST
      *                                                     return a string when called, or false|null on error
@@ -150,8 +150,6 @@ final class PumpStream implements StreamInterface
     }
 
     /**
-     * {@inheritdoc}
-     *
      * @return mixed
      */
     public function getMetadata($key = null)
index 1198ff63d5da012172aaf747add5bfddc67310c3..c852d96f53a6fc153a474db1ff6d6aeafde99035 100644 (file)
@@ -286,8 +286,6 @@ class ServerRequest extends Request implements ServerRequestInterface
     }
 
     /**
-     * {@inheritdoc}
-     *
      * @return array|object|null
      */
     public function getParsedBody()
@@ -309,8 +307,6 @@ class ServerRequest extends Request implements ServerRequestInterface
     }
 
     /**
-     * {@inheritdoc}
-     *
      * @return mixed
      */
     public function getAttribute($attribute, $default = null)
index c2477fe321ffede19dc49d3c07efb011c5ae7dba..f730ddacf4541b5a024ed114cc84649beb9fbbb2 100644 (file)
@@ -264,8 +264,6 @@ class Stream implements StreamInterface
     }
 
     /**
-     * {@inheritdoc}
-     *
      * @return mixed
      */
     public function getMetadata($key = null)
index dfb3e45493dac4d73115578cde388769f3511a49..96196a3eaead92aab398e4d8ec5f1e47cc0e0c19 100644 (file)
@@ -82,8 +82,6 @@ trait StreamDecoratorTrait
     }
 
     /**
-     * {@inheritdoc}
-     *
      * @return mixed
      */
     public function getMetadata($key = null)
index 3d98210b05c2447b55a5aa17530bd5c8138af553..cd4c383aa16185fa45db8cc2e5314bf54ca36ccb 100644 (file)
@@ -131,8 +131,8 @@ final class UriNormalizer
             $uri = self::decodeUnreservedCharacters($uri);
         }
 
-        if ($flags & self::CONVERT_EMPTY_PATH && $uri->getPath() === '' &&
-            ($uri->getScheme() === 'http' || $uri->getScheme() === 'https')
+        if ($flags & self::CONVERT_EMPTY_PATH && $uri->getPath() === ''
+            && ($uri->getScheme() === 'http' || $uri->getScheme() === 'https')
         ) {
             $uri = $uri->withPath('/');
         }
index b942d1cece6df57598672636f51eced6eb6bd9bd..38d5793c7b1a160cbcf6f9d057b2de79e5a52f74 100644 (file)
@@ -127,8 +127,8 @@ final class UriResolver
      */
     public static function relativize(UriInterface $base, UriInterface $target): UriInterface
     {
-        if ($target->getScheme() !== '' &&
-            ($base->getScheme() !== $target->getScheme() || $target->getAuthority() === '' && $base->getAuthority() !== '')
+        if ($target->getScheme() !== ''
+            && ($base->getScheme() !== $target->getScheme() || $target->getAuthority() === '' && $base->getAuthority() !== '')
         ) {
             return $target;
         }
index 49b481e53b76844f0621ee2fc47c6d74adaa03a1..917c05e304fc14eb91e11b50f07c2a26a2064c61 100644 (file)
@@ -231,7 +231,7 @@ final class Utils
      * @param StreamInterface $stream    Stream to read from
      * @param int|null        $maxLength Maximum buffer length
      */
-    public static function readLine(StreamInterface $stream, ?int $maxLength = null): string
+    public static function readLine(StreamInterface $stream, int $maxLength = null): string
     {
         $buffer = '';
         $size = 0;
index 0ece8964f767de3d142a932a13b15aa73f4d4d82..733c826ebcd63b8c9e717d655e73290bca953484 100644 (file)
@@ -1,4 +1,4 @@
-Copyright (c) 2022 Fabien Potencier
+Copyright (c) 2022-present Fabien Potencier
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
diff --git a/wcfsetup/install/files/lib/system/api/symfony/polyfill-php82/Php82.php b/wcfsetup/install/files/lib/system/api/symfony/polyfill-php82/Php82.php
new file mode 100644 (file)
index 0000000..fcd1281
--- /dev/null
@@ -0,0 +1,368 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Polyfill\Php82;
+
+/**
+ * @author Alexander M. Turek <me@derrabus.de>
+ * @author Greg Roach <greg@subaqua.co.uk>
+ *
+ * @internal
+ */
+class Php82
+{
+    /**
+     * Determines if a string matches the ODBC quoting rules.
+     *
+     * A valid quoted string begins with a '{', ends with a '}', and has no '}'
+     * inside of the string that aren't repeated (as to be escaped).
+     *
+     * These rules are what .NET also follows.
+     *
+     * @see https://github.com/php/php-src/blob/838f6bffff6363a204a2597cbfbaad1d7ee3f2b6/main/php_odbc_utils.c#L31-L57
+     */
+    public static function odbc_connection_string_is_quoted(string $str): bool
+    {
+        if ('' === $str || '{' !== $str[0]) {
+            return false;
+        }
+
+        /* Check for } that aren't doubled up or at the end of the string */
+        $length = \strlen($str) - 1;
+        for ($i = 0; $i < $length; ++$i) {
+            if ('}' !== $str[$i]) {
+                continue;
+            }
+
+            if ('}' !== $str[++$i]) {
+                return $i === $length;
+            }
+        }
+
+        return true;
+    }
+
+    /**
+     * Determines if a value for a connection string should be quoted.
+     *
+     * The ODBC specification mentions:
+     * "Because of connection string and initialization file grammar, keywords and
+     * attribute values that contain the characters []{}(),;?*=!@ not enclosed
+     * with braces should be avoided."
+     *
+     * Note that it assumes that the string is *not* already quoted. You should
+     * check beforehand.
+     *
+     * @see https://github.com/php/php-src/blob/838f6bffff6363a204a2597cbfbaad1d7ee3f2b6/main/php_odbc_utils.c#L59-L73
+     */
+    public static function odbc_connection_string_should_quote(string $str): bool
+    {
+        return false !== strpbrk($str, '[]{}(),;?*=!@');
+    }
+
+    public static function odbc_connection_string_quote(string $str): string
+    {
+        return '{'.str_replace('}', '}}', $str).'}';
+    }
+
+    /**
+     * Implementation closely based on the original C code - including the GOTOs
+     * and pointer-style string access.
+     *
+     * @see https://github.com/php/php-src/blob/master/Zend/zend_ini.c
+     */
+    public static function ini_parse_quantity(string $value): int
+    {
+        // Avoid dependency on ctype_space()
+        $ctype_space = " \t\v\r\n\f";
+
+        $str = 0;
+        $str_end = \strlen($value);
+        $digits = $str;
+        $overflow = false;
+
+        /* Ignore leading whitespace, but keep it for error messages. */
+        while ($digits < $str_end && false !== strpos($ctype_space, $value[$digits])) {
+            ++$digits;
+        }
+
+        /* Ignore trailing whitespace, but keep it for error messages. */
+        while ($digits < $str_end && false !== strpos($ctype_space, $value[$str_end - 1])) {
+            --$str_end;
+        }
+
+        if ($digits === $str_end) {
+            return 0;
+        }
+
+        $is_negative = false;
+
+        if ('+' === $value[$digits]) {
+            ++$digits;
+        } elseif ('-' === $value[$digits]) {
+            $is_negative = true;
+            ++$digits;
+        }
+
+        if ($value[$digits] < '0' || $value[$digits] > 9) {
+            $message = sprintf(
+                'Invalid quantity "%s": no valid leading digits, interpreting as "0" for backwards compatibility',
+                self::escapeString($value)
+            );
+
+            trigger_error($message, \E_USER_WARNING);
+
+            return 0;
+        }
+
+        $base = 10;
+        $allowed_digits = '0123456789';
+
+        if ('0' === $value[$digits] && ($digits + 1 === $str_end || false === strpos($allowed_digits, $value[$digits + 1]))) {
+            if ($digits + 1 === $str_end) {
+                return 0;
+            }
+
+            switch ($value[$digits + 1]) {
+                case 'g':
+                case 'G':
+                case 'm':
+                case 'M':
+                case 'k':
+                case 'K':
+                    goto evaluation;
+                case 'x':
+                case 'X':
+                    $base = 16;
+                    $allowed_digits = '0123456789abcdefABCDEF';
+                    break;
+                case 'o':
+                case 'O':
+                    $base = 8;
+                    $allowed_digits = '01234567';
+                    break;
+                case 'b':
+                case 'B':
+                    $base = 2;
+                    $allowed_digits = '01';
+                    break;
+                default:
+                    $message = sprintf(
+                        'Invalid prefix "0%s", interpreting as "0" for backwards compatibility',
+                        $value[$digits + 1]
+                    );
+                    trigger_error($message, \E_USER_WARNING);
+
+                    return 0;
+            }
+
+            $digits += 2;
+            if ($digits === $str_end) {
+                $message = sprintf(
+                    'Invalid quantity "%s": no digits after base prefix, interpreting as "0" for backwards compatibility',
+                    self::escapeString($value)
+                );
+                trigger_error($message, \E_USER_WARNING);
+
+                return 0;
+            }
+        }
+
+        evaluation:
+
+        if (10 === $base && '0' === $value[$digits]) {
+            $base = 8;
+            $allowed_digits = '01234567';
+        }
+
+        while ($digits < $str_end && ' ' === $value[$digits]) {
+            ++$digits;
+        }
+
+        if ($digits < $str_end && '+' === $value[$digits]) {
+            ++$digits;
+        } elseif ($digits < $str_end && '-' === $value[$digits]) {
+            $is_negative = true;
+            $overflow = true;
+            ++$digits;
+        }
+
+        $digits_end = $digits;
+
+        // The native function treats 0x0x123 the same as 0x123.  This is a bug which we must replicate.
+        if (
+            16 === $base
+            && $digits_end + 2 < $str_end
+            && '0x' === substr($value, $digits_end, 2)
+            && false !== strpos($allowed_digits, $value[$digits_end + 2])
+        ) {
+            $digits_end += 2;
+        }
+
+        while ($digits_end < $str_end && false !== strpos($allowed_digits, $value[$digits_end])) {
+            ++$digits_end;
+        }
+
+        $retval = base_convert(substr($value, $digits, $digits_end - $digits), $base, 10);
+
+        if ($is_negative && '0' === $retval) {
+            $is_negative = false;
+            $overflow = false;
+        }
+
+        // Check for overflow - remember that -PHP_INT_MIN = 1 + PHP_INT_MAX
+        if ($is_negative) {
+            $signed_max = strtr((string) \PHP_INT_MIN, ['-' => '']);
+        } else {
+            $signed_max = (string) \PHP_INT_MAX;
+        }
+
+        $max_length = max(\strlen($retval), \strlen($signed_max));
+
+        $tmp1 = str_pad($retval, $max_length, '0', \STR_PAD_LEFT);
+        $tmp2 = str_pad($signed_max, $max_length, '0', \STR_PAD_LEFT);
+
+        if ($tmp1 > $tmp2) {
+            $retval = -1;
+            $overflow = true;
+        } elseif ($is_negative) {
+            $retval = '-'.$retval;
+        }
+
+        $retval = (int) $retval;
+
+        if ($digits_end === $digits) {
+            $message = sprintf(
+                'Invalid quantity "%s": no valid leading digits, interpreting as "0" for backwards compatibility',
+                self::escapeString($value)
+            );
+            trigger_error($message, \E_USER_WARNING);
+
+            return 0;
+        }
+
+        /* Allow for whitespace between integer portion and any suffix character */
+        while ($digits_end < $str_end && false !== strpos($ctype_space, $value[$digits_end])) {
+            ++$digits_end;
+        }
+
+        /* No exponent suffix. */
+        if ($digits_end === $str_end) {
+            goto end;
+        }
+
+        switch ($value[$str_end - 1]) {
+            case 'g':
+            case 'G':
+                $shift = 30;
+                break;
+            case 'm':
+            case 'M':
+                $shift = 20;
+                break;
+            case 'k':
+            case 'K':
+                $shift = 10;
+                break;
+            default:
+                /* Unknown suffix */
+                $invalid = self::escapeString($value);
+                $interpreted = self::escapeString(substr($value, $str, $digits_end - $str));
+                $chr = self::escapeString($value[$str_end - 1]);
+
+                $message = sprintf(
+                    'Invalid quantity "%s": unknown multiplier "%s", interpreting as "%s" for backwards compatibility',
+                    $invalid,
+                    $chr,
+                    $interpreted
+                );
+
+                trigger_error($message, \E_USER_WARNING);
+
+                return $retval;
+        }
+
+        $factor = 1 << $shift;
+
+        if (!$overflow) {
+            if ($retval > 0) {
+                $overflow = $retval > \PHP_INT_MAX / $factor;
+            } else {
+                $overflow = $retval < \PHP_INT_MIN / $factor;
+            }
+        }
+
+        if (\is_float($retval * $factor)) {
+            $overflow = true;
+            $retval <<= $shift;
+        } else {
+            $retval *= $factor;
+        }
+
+        if ($digits_end !== $str_end - 1) {
+            /* More than one character in suffix */
+            $message = sprintf(
+                'Invalid quantity "%s", interpreting as "%s%s" for backwards compatibility',
+                self::escapeString($value),
+                self::escapeString(substr($value, $str, $digits_end - $str)),
+                self::escapeString($value[$str_end - 1])
+            );
+            trigger_error($message, \E_USER_WARNING);
+
+            return $retval;
+        }
+
+        end:
+
+        if ($overflow) {
+            /* Not specifying the resulting value here because the caller may make
+             * additional conversions. Not specifying the allowed range
+             * because the caller may do narrower range checks. */
+            $message = sprintf(
+                'Invalid quantity "%s": value is out of range, using overflow result for backwards compatibility',
+                self::escapeString($value)
+            );
+            trigger_error($message, \E_USER_WARNING);
+        }
+
+        return $retval;
+    }
+
+    /**
+     * Escape the string to avoid null bytes and to make non-printable chars visible.
+     */
+    private static function escapeString(string $string): string
+    {
+        $escaped = '';
+
+        for ($n = 0, $len = \strlen($string); $n < $len; ++$n) {
+            $c = \ord($string[$n]);
+
+            if ($c < 32 || '\\' === $string[$n] || $c > 126) {
+                switch ($string[$n]) {
+                    case "\n": $escaped .= '\\n'; break;
+                    case "\r": $escaped .= '\\r'; break;
+                    case "\t": $escaped .= '\\t'; break;
+                    case "\f": $escaped .= '\\f'; break;
+                    case "\v": $escaped .= '\\v'; break;
+                    case '\\': $escaped .= '\\\\'; break;
+                    case "\x1B": $escaped .= '\\e'; break;
+                    default:
+                        $escaped .= '\\x'.strtoupper(sprintf('%02x', $c));
+                }
+            } else {
+                $escaped .= $string[$n];
+            }
+        }
+
+        return $escaped;
+    }
+}
index 4a4d88175603d7c4fad4e56fc96a813705e2ceb0..b3191557a8699be7cb06679b193d547115e0be4b 100644 (file)
@@ -9,6 +9,10 @@ This component provides features added to PHP 8.2 core:
 - [`Random\Engine`](https://wiki.php.net/rfc/rng_extension)
 - [`Random\Engine\CryptoSafeEngine`](https://wiki.php.net/rfc/rng_extension)
 - [`Random\Engine\Secure`](https://wiki.php.net/rfc/rng_extension) (check [arokettu/random-polyfill](https://packagist.org/packages/arokettu/random-polyfill) for more engines)
+- [`odbc_connection_string_is_quoted()`](https://php.net/odbc_connection_string_is_quoted)
+- [`odbc_connection_string_should_quote()`](https://php.net/odbc_connection_string_should_quote)
+- [`odbc_connection_string_quote()`](https://php.net/odbc_connection_string_quote)
+- [`ini_parse_quantity()`](https://php.net/ini_parse_quantity)
 
 More information can be found in the
 [main Polyfill README](https://github.com/symfony/polyfill/blob/main/README.md).
index 1ebfdba286781e3bcd735ba118bea2e7f6f35a8d..f875f3947ca1cfb8ec802fe487274781b9a2baee 100644 (file)
@@ -9,6 +9,28 @@
  * file that was distributed with this source code.
  */
 
+use Symfony\Polyfill\Php82 as p;
+
 if (\PHP_VERSION_ID >= 80200) {
     return;
 }
+
+if (!extension_loaded('odbc')) {
+    return;
+}
+
+if (!function_exists('odbc_connection_string_is_quoted')) {
+    function odbc_connection_string_is_quoted(string $str): bool { return p\Php82::odbc_connection_string_is_quoted($str); }
+}
+
+if (!function_exists('odbc_connection_string_should_quote')) {
+    function odbc_connection_string_should_quote(string $str): bool { return p\Php82::odbc_connection_string_should_quote($str); }
+}
+
+if (!function_exists('odbc_connection_string_quote')) {
+    function odbc_connection_string_quote(string $str): string { return p\Php82::odbc_connection_string_quote($str); }
+}
+
+if (!function_exists('ini_parse_quantity')) {
+    function ini_parse_quantity(string $shorthand): int { return p\Php82::ini_parse_quantity($shorthand); }
+}
index cf56362198b15776f983fab88cbd66205c26147f..e0422658ac9b885dfeefb26d2cc3653ad16f33d2 100644 (file)
@@ -26,7 +26,7 @@
     "minimum-stability": "dev",
     "extra": {
         "branch-alias": {
-            "dev-main": "1.27-dev"
+            "dev-main": "1.28-dev"
         },
         "thanks": {
             "name": "symfony/polyfill",
index 0ece8964f767de3d142a932a13b15aa73f4d4d82..733c826ebcd63b8c9e717d655e73290bca953484 100644 (file)
@@ -1,4 +1,4 @@
-Copyright (c) 2022 Fabien Potencier
+Copyright (c) 2022-present Fabien Potencier
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
index 04a5ad46a61b0706ec452f000a205e495315f00c..23a9cf389003d72c24948c8099641213b2dfa401 100644 (file)
@@ -30,7 +30,7 @@ final class Php83
             throw new \ValueError('json_validate(): Argument #2 ($depth) must be greater than 0');
         }
 
-        if ($depth >= self::JSON_MAX_DEPTH) {
+        if ($depth > self::JSON_MAX_DEPTH) {
             throw new \ValueError(sprintf('json_validate(): Argument #2 ($depth) must be less than %d', self::JSON_MAX_DEPTH));
         }
 
@@ -38,4 +38,48 @@ final class Php83
 
         return \JSON_ERROR_NONE === json_last_error();
     }
+
+    public static function mb_str_pad(string $string, int $length, string $pad_string = ' ', int $pad_type = \STR_PAD_RIGHT, string $encoding = null): string
+    {
+        if (!\in_array($pad_type, [\STR_PAD_RIGHT, \STR_PAD_LEFT, \STR_PAD_BOTH], true)) {
+            throw new \ValueError('mb_str_pad(): Argument #4 ($pad_type) must be STR_PAD_LEFT, STR_PAD_RIGHT, or STR_PAD_BOTH');
+        }
+
+        if (null === $encoding) {
+            $encoding = mb_internal_encoding();
+        }
+
+        try {
+            $validEncoding = @mb_check_encoding('', $encoding);
+        } catch (\ValueError $e) {
+            throw new \ValueError(sprintf('mb_str_pad(): Argument #5 ($encoding) must be a valid encoding, "%s" given', $encoding));
+        }
+
+        // BC for PHP 7.3 and lower
+        if (!$validEncoding) {
+            throw new \ValueError(sprintf('mb_str_pad(): Argument #5 ($encoding) must be a valid encoding, "%s" given', $encoding));
+        }
+
+        if (mb_strlen($pad_string, $encoding) <= 0) {
+            throw new \ValueError('mb_str_pad(): Argument #3 ($pad_string) must be a non-empty string');
+        }
+
+        $paddingRequired = $length - mb_strlen($string, $encoding);
+
+        if ($paddingRequired < 1) {
+            return $string;
+        }
+
+        switch ($pad_type) {
+            case \STR_PAD_LEFT:
+                return mb_substr(str_repeat($pad_string, $paddingRequired), 0, $paddingRequired, $encoding).$string;
+            case \STR_PAD_RIGHT:
+                return $string.mb_substr(str_repeat($pad_string, $paddingRequired), 0, $paddingRequired, $encoding);
+            default:
+                $leftPaddingLength = floor($paddingRequired / 2);
+                $rightPaddingLength = $paddingRequired - $leftPaddingLength;
+
+                return mb_substr(str_repeat($pad_string, $leftPaddingLength), 0, $leftPaddingLength, $encoding).$string.mb_substr(str_repeat($pad_string, $rightPaddingLength), 0, $rightPaddingLength, $encoding);
+        }
+    }
 }
index bc3ae3f065e6c3065042141fe222673959ab8055..92516e7a45012a59c9e5dc194498dafbbc24fd21 100644 (file)
@@ -4,6 +4,12 @@ Symfony Polyfill / Php83
 This component provides features added to PHP 8.3 core:
 
 - [`json_validate`](https://wiki.php.net/rfc/json_validate)
+- [`Override`](https://wiki.php.net/rfc/marking_overriden_methods)
+- [`mb_str_pad`](https://wiki.php.net/rfc/mb_str_pad)
+- [`ldap_exop_sync`](https://wiki.php.net/rfc/deprecate_functions_with_overloaded_signatures)
+- [`ldap_connect_wallet`](https://wiki.php.net/rfc/deprecate_functions_with_overloaded_signatures)
+- [`stream_context_set_options`](https://wiki.php.net/rfc/deprecate_functions_with_overloaded_signatures)
+- [`Date*Exception/Error classes`](https://wiki.php.net/rfc/datetime-exceptions)
 
 More information can be found in the
 [main Polyfill README](https://github.com/symfony/polyfill/blob/main/README.md).
diff --git a/wcfsetup/install/files/lib/system/api/symfony/polyfill-php83/Resources/stubs/DateError.php b/wcfsetup/install/files/lib/system/api/symfony/polyfill-php83/Resources/stubs/DateError.php
new file mode 100644 (file)
index 0000000..6e7ed8c
--- /dev/null
@@ -0,0 +1,16 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+if (\PHP_VERSION_ID < 80300) {
+    class DateError extends Error
+    {
+    }
+}
diff --git a/wcfsetup/install/files/lib/system/api/symfony/polyfill-php83/Resources/stubs/DateException.php b/wcfsetup/install/files/lib/system/api/symfony/polyfill-php83/Resources/stubs/DateException.php
new file mode 100644 (file)
index 0000000..041710a
--- /dev/null
@@ -0,0 +1,16 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+if (\PHP_VERSION_ID < 80300) {
+    class DateException extends Exception
+    {
+    }
+}
diff --git a/wcfsetup/install/files/lib/system/api/symfony/polyfill-php83/Resources/stubs/DateInvalidOperationException.php b/wcfsetup/install/files/lib/system/api/symfony/polyfill-php83/Resources/stubs/DateInvalidOperationException.php
new file mode 100644 (file)
index 0000000..e2e9dfc
--- /dev/null
@@ -0,0 +1,16 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+if (\PHP_VERSION_ID < 80300) {
+    class DateInvalidOperationException extends DateException
+    {
+    }
+}
diff --git a/wcfsetup/install/files/lib/system/api/symfony/polyfill-php83/Resources/stubs/DateInvalidTimeZoneException.php b/wcfsetup/install/files/lib/system/api/symfony/polyfill-php83/Resources/stubs/DateInvalidTimeZoneException.php
new file mode 100644 (file)
index 0000000..75bcd26
--- /dev/null
@@ -0,0 +1,16 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+if (\PHP_VERSION_ID < 80300) {
+    class DateInvalidTimeZoneException extends DateException
+    {
+    }
+}
diff --git a/wcfsetup/install/files/lib/system/api/symfony/polyfill-php83/Resources/stubs/DateMalformedIntervalStringException.php b/wcfsetup/install/files/lib/system/api/symfony/polyfill-php83/Resources/stubs/DateMalformedIntervalStringException.php
new file mode 100644 (file)
index 0000000..af91b8e
--- /dev/null
@@ -0,0 +1,16 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+if (\PHP_VERSION_ID < 80300) {
+    class DateMalformedIntervalStringException extends DateException
+    {
+    }
+}
diff --git a/wcfsetup/install/files/lib/system/api/symfony/polyfill-php83/Resources/stubs/DateMalformedPeriodStringException.php b/wcfsetup/install/files/lib/system/api/symfony/polyfill-php83/Resources/stubs/DateMalformedPeriodStringException.php
new file mode 100644 (file)
index 0000000..9b6d276
--- /dev/null
@@ -0,0 +1,16 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+if (\PHP_VERSION_ID < 80300) {
+    class DateMalformedPeriodStringException extends DateException
+    {
+    }
+}
diff --git a/wcfsetup/install/files/lib/system/api/symfony/polyfill-php83/Resources/stubs/DateMalformedStringException.php b/wcfsetup/install/files/lib/system/api/symfony/polyfill-php83/Resources/stubs/DateMalformedStringException.php
new file mode 100644 (file)
index 0000000..7ad0484
--- /dev/null
@@ -0,0 +1,16 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+if (\PHP_VERSION_ID < 80300) {
+    class DateMalformedStringException extends DateException
+    {
+    }
+}
diff --git a/wcfsetup/install/files/lib/system/api/symfony/polyfill-php83/Resources/stubs/DateObjectError.php b/wcfsetup/install/files/lib/system/api/symfony/polyfill-php83/Resources/stubs/DateObjectError.php
new file mode 100644 (file)
index 0000000..11f0edc
--- /dev/null
@@ -0,0 +1,16 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+if (\PHP_VERSION_ID < 80300) {
+    class DateObjectError extends DateError
+    {
+    }
+}
diff --git a/wcfsetup/install/files/lib/system/api/symfony/polyfill-php83/Resources/stubs/DateRangeError.php b/wcfsetup/install/files/lib/system/api/symfony/polyfill-php83/Resources/stubs/DateRangeError.php
new file mode 100644 (file)
index 0000000..98e6703
--- /dev/null
@@ -0,0 +1,16 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+if (\PHP_VERSION_ID < 80300) {
+    class DateRangeError extends DateError
+    {
+    }
+}
diff --git a/wcfsetup/install/files/lib/system/api/symfony/polyfill-php83/Resources/stubs/Override.php b/wcfsetup/install/files/lib/system/api/symfony/polyfill-php83/Resources/stubs/Override.php
new file mode 100644 (file)
index 0000000..d3e6b3e
--- /dev/null
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+if (\PHP_VERSION_ID < 80300) {
+    #[Attribute(Attribute::TARGET_METHOD)]
+    final class Override
+    {
+        public function __construct()
+        {
+        }
+    }
+}
index 3b8ccc8b00e630fbdf1ac3f23b5fef49dfd6cb30..b5beb71a6084b117fabbad90d24cc6d310f084d9 100644 (file)
@@ -18,3 +18,23 @@ if (\PHP_VERSION_ID >= 80300) {
 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 (!function_exists('stream_context_set_options')) {
+    function stream_context_set_options($context, array $options): bool { return stream_context_set_option($context, $options); }
+}
+
+if (\PHP_VERSION_ID >= 80100) {
+    return require __DIR__.'/bootstrap81.php';
+}
+
+if (!function_exists('ldap_exop_sync') && function_exists('ldap_exop')) {
+    function ldap_exop_sync($ldap, string $request_oid, string $request_data = null, array $controls = null, &$response_data = null, &$response_oid = null): bool { return ldap_exop($ldap, $request_oid, $request_data, $controls, $response_data, $response_oid); }
+}
+
+if (!function_exists('ldap_connect_wallet') && function_exists('ldap_connect')) {
+    function ldap_connect_wallet(?string $uri, string $wallet, string $password, int $auth_mode = \GSLC_SSL_NO_AUTH) { return ldap_connect($uri, $wallet, $password, $auth_mode); }
+}
diff --git a/wcfsetup/install/files/lib/system/api/symfony/polyfill-php83/bootstrap81.php b/wcfsetup/install/files/lib/system/api/symfony/polyfill-php83/bootstrap81.php
new file mode 100644 (file)
index 0000000..63a4f78
--- /dev/null
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+if (\PHP_VERSION_ID >= 80300) {
+    return;
+}
+
+if (!function_exists('ldap_exop_sync') && function_exists('ldap_exop')) {
+    function ldap_exop_sync(\LDAP\Connection $ldap, string $request_oid, string $request_data = null, array $controls = null, &$response_data = null, &$response_oid = null): bool { return ldap_exop($ldap, $request_oid, $request_data, $controls, $response_data, $response_oid); }
+}
+
+if (!function_exists('ldap_connect_wallet') && function_exists('ldap_connect')) {
+    function ldap_connect_wallet(?string $uri, string $wallet, #[\SensitiveParameter] string $password, int $auth_mode = \GSLC_SSL_NO_AUTH): \LDAP\Connection|false { return ldap_connect($uri, $wallet, $password, $auth_mode); }
+}
index 31c96ea5be0970ea470b869ca69e12b5914b9fda..51c81b16a2e0da4d46bd7355f6c88daf9fbf2c50 100644 (file)
     },
     "autoload": {
         "psr-4": { "Symfony\\Polyfill\\Php83\\": "" },
-        "files": [ "bootstrap.php" ]
+        "files": [ "bootstrap.php" ],
+        "classmap": [ "Resources/stubs" ]
     },
     "minimum-stability": "dev",
     "extra": {
         "branch-alias": {
-            "dev-main": "1.27-dev"
+            "dev-main": "1.28-dev"
         },
         "thanks": {
             "name": "symfony/polyfill",