Composr drupal9 update

This commit is contained in:
Robert 2022-06-29 00:21:49 +02:00
parent fb43e21189
commit 44053e65d6
28 changed files with 1115 additions and 349 deletions

View File

@ -4409,17 +4409,17 @@
},
{
"name": "laminas/laminas-diactoros",
"version": "2.11.0",
"version_normalized": "2.11.0.0",
"version": "2.11.1",
"version_normalized": "2.11.1.0",
"source": {
"type": "git",
"url": "https://github.com/laminas/laminas-diactoros.git",
"reference": "d1bc565b23c2040fafde398a8a5db083c47928c0"
"reference": "25b11d422c2e5dad868f68619888763b30f91e2d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laminas/laminas-diactoros/zipball/d1bc565b23c2040fafde398a8a5db083c47928c0",
"reference": "d1bc565b23c2040fafde398a8a5db083c47928c0",
"url": "https://api.github.com/repos/laminas/laminas-diactoros/zipball/25b11d422c2e5dad868f68619888763b30f91e2d",
"reference": "25b11d422c2e5dad868f68619888763b30f91e2d",
"shasum": ""
},
"require": {
@ -4448,7 +4448,7 @@
"psalm/plugin-phpunit": "^0.14.0",
"vimeo/psalm": "^4.3"
},
"time": "2022-05-17T10:57:52+00:00",
"time": "2022-06-28T21:07:29+00:00",
"type": "library",
"extra": {
"laminas": {
@ -5495,17 +5495,17 @@
},
{
"name": "symfony/console",
"version": "v4.4.42",
"version_normalized": "4.4.42.0",
"version": "v4.4.43",
"version_normalized": "4.4.43.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
"reference": "cce7a9f99e22937a71a16b23afa762558808d587"
"reference": "8a2628d2d5639f35113dc1b833ecd91e1ed1cf46"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/console/zipball/cce7a9f99e22937a71a16b23afa762558808d587",
"reference": "cce7a9f99e22937a71a16b23afa762558808d587",
"url": "https://api.github.com/repos/symfony/console/zipball/8a2628d2d5639f35113dc1b833ecd91e1ed1cf46",
"reference": "8a2628d2d5639f35113dc1b833ecd91e1ed1cf46",
"shasum": ""
},
"require": {
@ -5540,7 +5540,7 @@
"symfony/lock": "",
"symfony/process": ""
},
"time": "2022-05-14T12:35:33+00:00",
"time": "2022-06-23T12:22:25+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
@ -5568,7 +5568,7 @@
"description": "Eases the creation of beautiful and testable command line interfaces",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/console/tree/v4.4.42"
"source": "https://github.com/symfony/console/tree/v4.4.43"
},
"funding": [
{
@ -5660,17 +5660,17 @@
},
{
"name": "symfony/dependency-injection",
"version": "v4.4.42",
"version_normalized": "4.4.42.0",
"version": "v4.4.43",
"version_normalized": "4.4.43.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/dependency-injection.git",
"reference": "f6fdbf252765a09c7ac243617f79f1babef792c9"
"reference": "8d0ae6d87ceea5f3a352413f9d1f71ed2234dcbd"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/dependency-injection/zipball/f6fdbf252765a09c7ac243617f79f1babef792c9",
"reference": "f6fdbf252765a09c7ac243617f79f1babef792c9",
"url": "https://api.github.com/repos/symfony/dependency-injection/zipball/8d0ae6d87ceea5f3a352413f9d1f71ed2234dcbd",
"reference": "8d0ae6d87ceea5f3a352413f9d1f71ed2234dcbd",
"shasum": ""
},
"require": {
@ -5701,7 +5701,7 @@
"symfony/proxy-manager-bridge": "Generate service proxies to lazy load them",
"symfony/yaml": ""
},
"time": "2022-05-24T15:15:52+00:00",
"time": "2022-06-22T15:01:38+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
@ -5729,7 +5729,7 @@
"description": "Allows you to standardize and centralize the way objects are constructed in your application",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/dependency-injection/tree/v4.4.42"
"source": "https://github.com/symfony/dependency-injection/tree/v4.4.43"
},
"funding": [
{
@ -5749,8 +5749,8 @@
},
{
"name": "symfony/deprecation-contracts",
"version": "v2.5.1",
"version_normalized": "2.5.1.0",
"version": "v2.5.2",
"version_normalized": "2.5.2.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/deprecation-contracts.git",
@ -5799,7 +5799,7 @@
"description": "A generic function and convention to trigger deprecation notices",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.1"
"source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.2"
},
"funding": [
{
@ -5977,8 +5977,8 @@
},
{
"name": "symfony/event-dispatcher-contracts",
"version": "v1.1.12",
"version_normalized": "1.1.12.0",
"version": "v1.1.13",
"version_normalized": "1.1.13.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher-contracts.git",
@ -6039,7 +6039,7 @@
"standards"
],
"support": {
"source": "https://github.com/symfony/event-dispatcher-contracts/tree/v1.1.12"
"source": "https://github.com/symfony/event-dispatcher-contracts/tree/v1.1.13"
},
"funding": [
{
@ -6059,17 +6059,17 @@
},
{
"name": "symfony/http-client-contracts",
"version": "v2.5.1",
"version_normalized": "2.5.1.0",
"version": "v2.5.2",
"version_normalized": "2.5.2.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-client-contracts.git",
"reference": "1a4f708e4e87f335d1b1be6148060739152f0bd5"
"reference": "ba6a9f0e8f3edd190520ee3b9a958596b6ca2e70"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/1a4f708e4e87f335d1b1be6148060739152f0bd5",
"reference": "1a4f708e4e87f335d1b1be6148060739152f0bd5",
"url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/ba6a9f0e8f3edd190520ee3b9a958596b6ca2e70",
"reference": "ba6a9f0e8f3edd190520ee3b9a958596b6ca2e70",
"shasum": ""
},
"require": {
@ -6078,7 +6078,7 @@
"suggest": {
"symfony/http-client-implementation": ""
},
"time": "2022-03-13T20:07:29+00:00",
"time": "2022-04-12T15:48:08+00:00",
"type": "library",
"extra": {
"branch-alias": {
@ -6120,7 +6120,7 @@
"standards"
],
"support": {
"source": "https://github.com/symfony/http-client-contracts/tree/v2.5.1"
"source": "https://github.com/symfony/http-client-contracts/tree/v2.5.2"
},
"funding": [
{
@ -6140,17 +6140,17 @@
},
{
"name": "symfony/http-foundation",
"version": "v4.4.41",
"version_normalized": "4.4.41.0",
"version": "v4.4.43",
"version_normalized": "4.4.43.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-foundation.git",
"reference": "27441220aebeb096b4eb8267acaaa7feb5e4266c"
"reference": "4441dada27f9208e03f449d73cb9253c639e53c5"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/27441220aebeb096b4eb8267acaaa7feb5e4266c",
"reference": "27441220aebeb096b4eb8267acaaa7feb5e4266c",
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/4441dada27f9208e03f449d73cb9253c639e53c5",
"reference": "4441dada27f9208e03f449d73cb9253c639e53c5",
"shasum": ""
},
"require": {
@ -6163,7 +6163,7 @@
"predis/predis": "~1.0",
"symfony/expression-language": "^3.4|^4.0|^5.0"
},
"time": "2022-04-21T07:22:34+00:00",
"time": "2022-06-19T13:07:44+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
@ -6191,7 +6191,7 @@
"description": "Defines an object-oriented layer for the HTTP specification",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/http-foundation/tree/v4.4.41"
"source": "https://github.com/symfony/http-foundation/tree/v4.4.43"
},
"funding": [
{
@ -6211,17 +6211,17 @@
},
{
"name": "symfony/http-kernel",
"version": "v4.4.42",
"version_normalized": "4.4.42.0",
"version": "v4.4.43",
"version_normalized": "4.4.43.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-kernel.git",
"reference": "04181de9459df639512dadf83d544ce12edd6776"
"reference": "c4c33fb9203e6f166ac0f318ce34e00686702522"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/04181de9459df639512dadf83d544ce12edd6776",
"reference": "04181de9459df639512dadf83d544ce12edd6776",
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/c4c33fb9203e6f166ac0f318ce34e00686702522",
"reference": "c4c33fb9203e6f166ac0f318ce34e00686702522",
"shasum": ""
},
"require": {
@ -6270,7 +6270,7 @@
"symfony/console": "",
"symfony/dependency-injection": ""
},
"time": "2022-05-27T07:04:21+00:00",
"time": "2022-06-26T16:51:30+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
@ -6298,7 +6298,7 @@
"description": "Provides a structured process for converting a Request into a Response",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/http-kernel/tree/v4.4.42"
"source": "https://github.com/symfony/http-kernel/tree/v4.4.43"
},
"funding": [
{
@ -6318,17 +6318,17 @@
},
{
"name": "symfony/mime",
"version": "v5.4.9",
"version_normalized": "5.4.9.0",
"version": "v5.4.10",
"version_normalized": "5.4.10.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/mime.git",
"reference": "2b3802a24e48d0cfccf885173d2aac91e73df92e"
"reference": "02265e1e5111c3cd7480387af25e82378b7ab9cc"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/mime/zipball/2b3802a24e48d0cfccf885173d2aac91e73df92e",
"reference": "2b3802a24e48d0cfccf885173d2aac91e73df92e",
"url": "https://api.github.com/repos/symfony/mime/zipball/02265e1e5111c3cd7480387af25e82378b7ab9cc",
"reference": "02265e1e5111c3cd7480387af25e82378b7ab9cc",
"shasum": ""
},
"require": {
@ -6352,7 +6352,7 @@
"symfony/property-info": "^4.4|^5.1|^6.0",
"symfony/serializer": "^5.2|^6.0"
},
"time": "2022-05-21T10:24:18+00:00",
"time": "2022-06-09T12:22:40+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
@ -6384,7 +6384,7 @@
"mime-type"
],
"support": {
"source": "https://github.com/symfony/mime/tree/v5.4.9"
"source": "https://github.com/symfony/mime/tree/v5.4.10"
},
"funding": [
{
@ -7333,17 +7333,17 @@
},
{
"name": "symfony/serializer",
"version": "v4.4.42",
"version_normalized": "4.4.42.0",
"version": "v4.4.43",
"version_normalized": "4.4.43.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/serializer.git",
"reference": "234c6d024b5664d8fe6c117140196e00ba3fa626"
"reference": "bd020a578d786952cf5d67f8140dfacc161f58a4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/serializer/zipball/234c6d024b5664d8fe6c117140196e00ba3fa626",
"reference": "234c6d024b5664d8fe6c117140196e00ba3fa626",
"url": "https://api.github.com/repos/symfony/serializer/zipball/bd020a578d786952cf5d67f8140dfacc161f58a4",
"reference": "bd020a578d786952cf5d67f8140dfacc161f58a4",
"shasum": ""
},
"require": {
@ -7382,7 +7382,7 @@
"symfony/property-info": "To deserialize relations.",
"symfony/yaml": "For using the default YAML mapping loader."
},
"time": "2022-05-10T09:16:50+00:00",
"time": "2022-06-24T10:10:05+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
@ -7410,7 +7410,7 @@
"description": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/serializer/tree/v4.4.42"
"source": "https://github.com/symfony/serializer/tree/v4.4.43"
},
"funding": [
{
@ -7430,17 +7430,17 @@
},
{
"name": "symfony/service-contracts",
"version": "v2.5.1",
"version_normalized": "2.5.1.0",
"version": "v2.5.2",
"version_normalized": "2.5.2.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/service-contracts.git",
"reference": "24d9dc654b83e91aa59f9d167b131bc3b5bea24c"
"reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/service-contracts/zipball/24d9dc654b83e91aa59f9d167b131bc3b5bea24c",
"reference": "24d9dc654b83e91aa59f9d167b131bc3b5bea24c",
"url": "https://api.github.com/repos/symfony/service-contracts/zipball/4b426aac47d6427cc1a1d0f7e2ac724627f5966c",
"reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c",
"shasum": ""
},
"require": {
@ -7454,7 +7454,7 @@
"suggest": {
"symfony/service-implementation": ""
},
"time": "2022-03-13T20:07:29+00:00",
"time": "2022-05-30T19:17:29+00:00",
"type": "library",
"extra": {
"branch-alias": {
@ -7496,7 +7496,7 @@
"standards"
],
"support": {
"source": "https://github.com/symfony/service-contracts/tree/v2.5.1"
"source": "https://github.com/symfony/service-contracts/tree/v2.5.2"
},
"funding": [
{
@ -7608,17 +7608,17 @@
},
{
"name": "symfony/translation-contracts",
"version": "v2.5.1",
"version_normalized": "2.5.1.0",
"version": "v2.5.2",
"version_normalized": "2.5.2.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation-contracts.git",
"reference": "1211df0afa701e45a04253110e959d4af4ef0f07"
"reference": "136b19dd05cdf0709db6537d058bcab6dd6e2dbe"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/translation-contracts/zipball/1211df0afa701e45a04253110e959d4af4ef0f07",
"reference": "1211df0afa701e45a04253110e959d4af4ef0f07",
"url": "https://api.github.com/repos/symfony/translation-contracts/zipball/136b19dd05cdf0709db6537d058bcab6dd6e2dbe",
"reference": "136b19dd05cdf0709db6537d058bcab6dd6e2dbe",
"shasum": ""
},
"require": {
@ -7627,7 +7627,7 @@
"suggest": {
"symfony/translation-implementation": ""
},
"time": "2022-01-02T09:53:40+00:00",
"time": "2022-06-27T16:58:25+00:00",
"type": "library",
"extra": {
"branch-alias": {
@ -7669,7 +7669,7 @@
"standards"
],
"support": {
"source": "https://github.com/symfony/translation-contracts/tree/v2.5.1"
"source": "https://github.com/symfony/translation-contracts/tree/v2.5.2"
},
"funding": [
{
@ -7689,17 +7689,17 @@
},
{
"name": "symfony/validator",
"version": "v4.4.41",
"version_normalized": "4.4.41.0",
"version": "v4.4.43",
"version_normalized": "4.4.43.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/validator.git",
"reference": "b79a7830b8ead3fb0a2a0080ba6f5b2a0861c28c"
"reference": "5ae0de59615dff1896d44bc986ad87600ea121e7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/validator/zipball/b79a7830b8ead3fb0a2a0080ba6f5b2a0861c28c",
"reference": "b79a7830b8ead3fb0a2a0080ba6f5b2a0861c28c",
"url": "https://api.github.com/repos/symfony/validator/zipball/5ae0de59615dff1896d44bc986ad87600ea121e7",
"reference": "5ae0de59615dff1896d44bc986ad87600ea121e7",
"shasum": ""
},
"require": {
@ -7750,7 +7750,7 @@
"symfony/translation": "For translating validation errors.",
"symfony/yaml": ""
},
"time": "2022-04-14T15:50:15+00:00",
"time": "2022-06-05T18:35:51+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
@ -7778,7 +7778,7 @@
"description": "Provides tools to validate values",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/validator/tree/v4.4.41"
"source": "https://github.com/symfony/validator/tree/v4.4.43"
},
"funding": [
{
@ -7890,17 +7890,17 @@
},
{
"name": "symfony/yaml",
"version": "v4.4.37",
"version_normalized": "4.4.37.0",
"version": "v4.4.43",
"version_normalized": "4.4.43.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",
"reference": "d7f637cc0f0cc14beb0984f2bb50da560b271311"
"reference": "07e392f0ef78376d080d5353c081a5e5704835bd"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/yaml/zipball/d7f637cc0f0cc14beb0984f2bb50da560b271311",
"reference": "d7f637cc0f0cc14beb0984f2bb50da560b271311",
"url": "https://api.github.com/repos/symfony/yaml/zipball/07e392f0ef78376d080d5353c081a5e5704835bd",
"reference": "07e392f0ef78376d080d5353c081a5e5704835bd",
"shasum": ""
},
"require": {
@ -7916,7 +7916,7 @@
"suggest": {
"symfony/console": "For validating YAML files using the lint command"
},
"time": "2022-01-24T20:11:01+00:00",
"time": "2022-06-20T08:31:17+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
@ -7944,7 +7944,7 @@
"description": "Loads and dumps YAML files",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/yaml/tree/v4.4.37"
"source": "https://github.com/symfony/yaml/tree/v4.4.43"
},
"funding": [
{

View File

@ -5,7 +5,7 @@
'type' => 'project',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),
'reference' => '6afb768f89cca773bc45d6083a33264ecd6d6495',
'reference' => 'fb43e21189acd8226ad108c8df09231f59195e20',
'name' => 'drupal/recommended-project',
'dev' => true,
),
@ -904,7 +904,7 @@
'type' => 'project',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),
'reference' => '6afb768f89cca773bc45d6083a33264ecd6d6495',
'reference' => 'fb43e21189acd8226ad108c8df09231f59195e20',
'dev_requirement' => false,
),
'drupal/redirect' => array(
@ -1249,12 +1249,12 @@
'dev_requirement' => false,
),
'laminas/laminas-diactoros' => array(
'pretty_version' => '2.11.0',
'version' => '2.11.0.0',
'pretty_version' => '2.11.1',
'version' => '2.11.1.0',
'type' => 'library',
'install_path' => __DIR__ . '/../laminas/laminas-diactoros',
'aliases' => array(),
'reference' => 'd1bc565b23c2040fafde398a8a5db083c47928c0',
'reference' => '25b11d422c2e5dad868f68619888763b30f91e2d',
'dev_requirement' => false,
),
'laminas/laminas-escaper' => array(
@ -1459,12 +1459,12 @@
'dev_requirement' => false,
),
'symfony/console' => array(
'pretty_version' => 'v4.4.42',
'version' => '4.4.42.0',
'pretty_version' => 'v4.4.43',
'version' => '4.4.43.0',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/console',
'aliases' => array(),
'reference' => 'cce7a9f99e22937a71a16b23afa762558808d587',
'reference' => '8a2628d2d5639f35113dc1b833ecd91e1ed1cf46',
'dev_requirement' => false,
),
'symfony/debug' => array(
@ -1477,17 +1477,17 @@
'dev_requirement' => false,
),
'symfony/dependency-injection' => array(
'pretty_version' => 'v4.4.42',
'version' => '4.4.42.0',
'pretty_version' => 'v4.4.43',
'version' => '4.4.43.0',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/dependency-injection',
'aliases' => array(),
'reference' => 'f6fdbf252765a09c7ac243617f79f1babef792c9',
'reference' => '8d0ae6d87ceea5f3a352413f9d1f71ed2234dcbd',
'dev_requirement' => false,
),
'symfony/deprecation-contracts' => array(
'pretty_version' => 'v2.5.1',
'version' => '2.5.1.0',
'pretty_version' => 'v2.5.2',
'version' => '2.5.2.0',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/deprecation-contracts',
'aliases' => array(),
@ -1513,8 +1513,8 @@
'dev_requirement' => false,
),
'symfony/event-dispatcher-contracts' => array(
'pretty_version' => 'v1.1.12',
'version' => '1.1.12.0',
'pretty_version' => 'v1.1.13',
'version' => '1.1.13.0',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/event-dispatcher-contracts',
'aliases' => array(),
@ -1528,39 +1528,39 @@
),
),
'symfony/http-client-contracts' => array(
'pretty_version' => 'v2.5.1',
'version' => '2.5.1.0',
'pretty_version' => 'v2.5.2',
'version' => '2.5.2.0',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/http-client-contracts',
'aliases' => array(),
'reference' => '1a4f708e4e87f335d1b1be6148060739152f0bd5',
'reference' => 'ba6a9f0e8f3edd190520ee3b9a958596b6ca2e70',
'dev_requirement' => false,
),
'symfony/http-foundation' => array(
'pretty_version' => 'v4.4.41',
'version' => '4.4.41.0',
'pretty_version' => 'v4.4.43',
'version' => '4.4.43.0',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/http-foundation',
'aliases' => array(),
'reference' => '27441220aebeb096b4eb8267acaaa7feb5e4266c',
'reference' => '4441dada27f9208e03f449d73cb9253c639e53c5',
'dev_requirement' => false,
),
'symfony/http-kernel' => array(
'pretty_version' => 'v4.4.42',
'version' => '4.4.42.0',
'pretty_version' => 'v4.4.43',
'version' => '4.4.43.0',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/http-kernel',
'aliases' => array(),
'reference' => '04181de9459df639512dadf83d544ce12edd6776',
'reference' => 'c4c33fb9203e6f166ac0f318ce34e00686702522',
'dev_requirement' => false,
),
'symfony/mime' => array(
'pretty_version' => 'v5.4.9',
'version' => '5.4.9.0',
'pretty_version' => 'v5.4.10',
'version' => '5.4.10.0',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/mime',
'aliases' => array(),
'reference' => '2b3802a24e48d0cfccf885173d2aac91e73df92e',
'reference' => '02265e1e5111c3cd7480387af25e82378b7ab9cc',
'dev_requirement' => false,
),
'symfony/polyfill-ctype' => array(
@ -1663,21 +1663,21 @@
'dev_requirement' => false,
),
'symfony/serializer' => array(
'pretty_version' => 'v4.4.42',
'version' => '4.4.42.0',
'pretty_version' => 'v4.4.43',
'version' => '4.4.43.0',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/serializer',
'aliases' => array(),
'reference' => '234c6d024b5664d8fe6c117140196e00ba3fa626',
'reference' => 'bd020a578d786952cf5d67f8140dfacc161f58a4',
'dev_requirement' => false,
),
'symfony/service-contracts' => array(
'pretty_version' => 'v2.5.1',
'version' => '2.5.1.0',
'pretty_version' => 'v2.5.2',
'version' => '2.5.2.0',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/service-contracts',
'aliases' => array(),
'reference' => '24d9dc654b83e91aa59f9d167b131bc3b5bea24c',
'reference' => '4b426aac47d6427cc1a1d0f7e2ac724627f5966c',
'dev_requirement' => false,
),
'symfony/service-implementation' => array(
@ -1696,12 +1696,12 @@
'dev_requirement' => false,
),
'symfony/translation-contracts' => array(
'pretty_version' => 'v2.5.1',
'version' => '2.5.1.0',
'pretty_version' => 'v2.5.2',
'version' => '2.5.2.0',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/translation-contracts',
'aliases' => array(),
'reference' => '1211df0afa701e45a04253110e959d4af4ef0f07',
'reference' => '136b19dd05cdf0709db6537d058bcab6dd6e2dbe',
'dev_requirement' => false,
),
'symfony/translation-implementation' => array(
@ -1711,12 +1711,12 @@
),
),
'symfony/validator' => array(
'pretty_version' => 'v4.4.41',
'version' => '4.4.41.0',
'pretty_version' => 'v4.4.43',
'version' => '4.4.43.0',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/validator',
'aliases' => array(),
'reference' => 'b79a7830b8ead3fb0a2a0080ba6f5b2a0861c28c',
'reference' => '5ae0de59615dff1896d44bc986ad87600ea121e7',
'dev_requirement' => false,
),
'symfony/var-dumper' => array(
@ -1729,12 +1729,12 @@
'dev_requirement' => false,
),
'symfony/yaml' => array(
'pretty_version' => 'v4.4.37',
'version' => '4.4.37.0',
'pretty_version' => 'v4.4.43',
'version' => '4.4.43.0',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/yaml',
'aliases' => array(),
'reference' => 'd7f637cc0f0cc14beb0984f2bb50da560b271311',
'reference' => '07e392f0ef78376d080d5353c081a5e5704835bd',
'dev_requirement' => false,
),
'twig/twig' => array(

View File

@ -357,30 +357,30 @@
},
{
"name": "composer/pcre",
"version": "1.0.1",
"version": "2.0.0",
"source": {
"type": "git",
"url": "https://github.com/composer/pcre.git",
"reference": "67a32d7d6f9f560b726ab25a061b38ff3a80c560"
"reference": "c8e9d27cfc5ed22643c19c160455b473ffd8aabe"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/composer/pcre/zipball/67a32d7d6f9f560b726ab25a061b38ff3a80c560",
"reference": "67a32d7d6f9f560b726ab25a061b38ff3a80c560",
"url": "https://api.github.com/repos/composer/pcre/zipball/c8e9d27cfc5ed22643c19c160455b473ffd8aabe",
"reference": "c8e9d27cfc5ed22643c19c160455b473ffd8aabe",
"shasum": ""
},
"require": {
"php": "^5.3.2 || ^7.0 || ^8.0"
"php": "^7.2 || ^8.0"
},
"require-dev": {
"phpstan/phpstan": "^1.3",
"phpstan/phpstan-strict-rules": "^1.1",
"symfony/phpunit-bridge": "^4.2 || ^5"
"symfony/phpunit-bridge": "^5"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.x-dev"
"dev-main": "2.x-dev"
}
},
"autoload": {
@ -408,7 +408,7 @@
],
"support": {
"issues": "https://github.com/composer/pcre/issues",
"source": "https://github.com/composer/pcre/tree/1.0.1"
"source": "https://github.com/composer/pcre/tree/2.0.0"
},
"funding": [
{
@ -424,20 +424,20 @@
"type": "tidelift"
}
],
"time": "2022-01-21T20:24:37+00:00"
"time": "2022-02-25T20:05:29+00:00"
},
{
"name": "composer/semver",
"version": "3.2.9",
"version": "3.3.2",
"source": {
"type": "git",
"url": "https://github.com/composer/semver.git",
"reference": "a951f614bd64dcd26137bc9b7b2637ddcfc57649"
"reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/composer/semver/zipball/a951f614bd64dcd26137bc9b7b2637ddcfc57649",
"reference": "a951f614bd64dcd26137bc9b7b2637ddcfc57649",
"url": "https://api.github.com/repos/composer/semver/zipball/3953f23262f2bff1919fc82183ad9acb13ff62c9",
"reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9",
"shasum": ""
},
"require": {
@ -489,7 +489,7 @@
"support": {
"irc": "irc://irc.freenode.org/composer",
"issues": "https://github.com/composer/semver/issues",
"source": "https://github.com/composer/semver/tree/3.2.9"
"source": "https://github.com/composer/semver/tree/3.3.2"
},
"funding": [
{
@ -505,24 +505,24 @@
"type": "tidelift"
}
],
"time": "2022-02-04T13:58:43+00:00"
"time": "2022-04-01T19:23:25+00:00"
},
{
"name": "composer/xdebug-handler",
"version": "3.0.1",
"version": "3.0.3",
"source": {
"type": "git",
"url": "https://github.com/composer/xdebug-handler.git",
"reference": "12f1b79476638a5615ed00ea6adbb269cec96fd8"
"reference": "ced299686f41dce890debac69273b47ffe98a40c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/composer/xdebug-handler/zipball/12f1b79476638a5615ed00ea6adbb269cec96fd8",
"reference": "12f1b79476638a5615ed00ea6adbb269cec96fd8",
"url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ced299686f41dce890debac69273b47ffe98a40c",
"reference": "ced299686f41dce890debac69273b47ffe98a40c",
"shasum": ""
},
"require": {
"composer/pcre": "^1",
"composer/pcre": "^1 || ^2 || ^3",
"php": "^7.2.5 || ^8.0",
"psr/log": "^1 || ^2 || ^3"
},
@ -555,7 +555,7 @@
"support": {
"irc": "irc://irc.freenode.org/composer",
"issues": "https://github.com/composer/xdebug-handler/issues",
"source": "https://github.com/composer/xdebug-handler/tree/3.0.1"
"source": "https://github.com/composer/xdebug-handler/tree/3.0.3"
},
"funding": [
{
@ -571,7 +571,7 @@
"type": "tidelift"
}
],
"time": "2022-01-04T18:29:42+00:00"
"time": "2022-02-25T21:32:43+00:00"
},
{
"name": "dnoegel/php-xdg-base-dir",
@ -612,29 +612,30 @@
},
{
"name": "doctrine/instantiator",
"version": "1.4.0",
"version": "1.4.1",
"source": {
"type": "git",
"url": "https://github.com/doctrine/instantiator.git",
"reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b"
"reference": "10dcfce151b967d20fde1b34ae6640712c3891bc"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b",
"reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b",
"url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc",
"reference": "10dcfce151b967d20fde1b34ae6640712c3891bc",
"shasum": ""
},
"require": {
"php": "^7.1 || ^8.0"
},
"require-dev": {
"doctrine/coding-standard": "^8.0",
"doctrine/coding-standard": "^9",
"ext-pdo": "*",
"ext-phar": "*",
"phpbench/phpbench": "^0.13 || 1.0.0-alpha2",
"phpstan/phpstan": "^0.12",
"phpstan/phpstan-phpunit": "^0.12",
"phpunit/phpunit": "^7.0 || ^8.0 || ^9.0"
"phpbench/phpbench": "^0.16 || ^1",
"phpstan/phpstan": "^1.4",
"phpstan/phpstan-phpunit": "^1",
"phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
"vimeo/psalm": "^4.22"
},
"type": "library",
"autoload": {
@ -661,7 +662,7 @@
],
"support": {
"issues": "https://github.com/doctrine/instantiator/issues",
"source": "https://github.com/doctrine/instantiator/tree/1.4.0"
"source": "https://github.com/doctrine/instantiator/tree/1.4.1"
},
"funding": [
{
@ -677,7 +678,7 @@
"type": "tidelift"
}
],
"time": "2020-11-10T18:47:58+00:00"
"time": "2022-03-03T08:28:38+00:00"
},
{
"name": "felixfbecker/advanced-json-rpc",
@ -726,16 +727,16 @@
},
{
"name": "felixfbecker/language-server-protocol",
"version": "1.5.1",
"version": "v1.5.2",
"source": {
"type": "git",
"url": "https://github.com/felixfbecker/php-language-server-protocol.git",
"reference": "9d846d1f5cf101deee7a61c8ba7caa0a975cd730"
"reference": "6e82196ffd7c62f7794d778ca52b69feec9f2842"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/felixfbecker/php-language-server-protocol/zipball/9d846d1f5cf101deee7a61c8ba7caa0a975cd730",
"reference": "9d846d1f5cf101deee7a61c8ba7caa0a975cd730",
"url": "https://api.github.com/repos/felixfbecker/php-language-server-protocol/zipball/6e82196ffd7c62f7794d778ca52b69feec9f2842",
"reference": "6e82196ffd7c62f7794d778ca52b69feec9f2842",
"shasum": ""
},
"require": {
@ -776,9 +777,9 @@
],
"support": {
"issues": "https://github.com/felixfbecker/php-language-server-protocol/issues",
"source": "https://github.com/felixfbecker/php-language-server-protocol/tree/1.5.1"
"source": "https://github.com/felixfbecker/php-language-server-protocol/tree/v1.5.2"
},
"time": "2021-02-22T14:02:09+00:00"
"time": "2022-03-02T22:36:06+00:00"
},
{
"name": "http-interop/http-factory-tests",
@ -935,25 +936,29 @@
},
{
"name": "myclabs/deep-copy",
"version": "1.10.2",
"version": "1.11.0",
"source": {
"type": "git",
"url": "https://github.com/myclabs/DeepCopy.git",
"reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220"
"reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220",
"reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220",
"url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614",
"reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614",
"shasum": ""
},
"require": {
"php": "^7.1 || ^8.0"
},
"conflict": {
"doctrine/collections": "<1.6.8",
"doctrine/common": "<2.13.3 || >=3,<3.2.2"
},
"require-dev": {
"doctrine/collections": "^1.0",
"doctrine/common": "^2.6",
"phpunit/phpunit": "^7.1"
"doctrine/collections": "^1.6.8",
"doctrine/common": "^2.13.3 || ^3.2.2",
"phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13"
},
"type": "library",
"autoload": {
@ -978,7 +983,7 @@
],
"support": {
"issues": "https://github.com/myclabs/DeepCopy/issues",
"source": "https://github.com/myclabs/DeepCopy/tree/1.10.2"
"source": "https://github.com/myclabs/DeepCopy/tree/1.11.0"
},
"funding": [
{
@ -986,7 +991,7 @@
"type": "tidelift"
}
],
"time": "2020-11-13T09:40:50+00:00"
"time": "2022-03-03T13:19:32+00:00"
},
{
"name": "netresearch/jsonmapper",
@ -1041,16 +1046,16 @@
},
{
"name": "nikic/php-parser",
"version": "v4.13.2",
"version": "v4.14.0",
"source": {
"type": "git",
"url": "https://github.com/nikic/PHP-Parser.git",
"reference": "210577fe3cf7badcc5814d99455df46564f3c077"
"reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/210577fe3cf7badcc5814d99455df46564f3c077",
"reference": "210577fe3cf7badcc5814d99455df46564f3c077",
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/34bea19b6e03d8153165d8f30bba4c3be86184c1",
"reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1",
"shasum": ""
},
"require": {
@ -1091,9 +1096,9 @@
],
"support": {
"issues": "https://github.com/nikic/PHP-Parser/issues",
"source": "https://github.com/nikic/PHP-Parser/tree/v4.13.2"
"source": "https://github.com/nikic/PHP-Parser/tree/v4.14.0"
},
"time": "2021-11-30T19:35:32+00:00"
"time": "2022-05-31T20:59:12+00:00"
},
{
"name": "openlss/lib-array2xml",
@ -1430,16 +1435,16 @@
},
{
"name": "phpdocumentor/type-resolver",
"version": "1.6.0",
"version": "1.6.1",
"source": {
"type": "git",
"url": "https://github.com/phpDocumentor/TypeResolver.git",
"reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706"
"reference": "77a32518733312af16a44300404e945338981de3"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/93ebd0014cab80c4ea9f5e297ea48672f1b87706",
"reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706",
"url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/77a32518733312af16a44300404e945338981de3",
"reference": "77a32518733312af16a44300404e945338981de3",
"shasum": ""
},
"require": {
@ -1474,9 +1479,9 @@
"description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
"support": {
"issues": "https://github.com/phpDocumentor/TypeResolver/issues",
"source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.0"
"source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.1"
},
"time": "2022-01-04T19:58:01+00:00"
"time": "2022-03-15T21:29:03+00:00"
},
{
"name": "phpspec/prophecy",
@ -1599,16 +1604,16 @@
},
{
"name": "phpunit/php-code-coverage",
"version": "9.2.11",
"version": "9.2.15",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
"reference": "665a1ac0a763c51afc30d6d130dac0813092b17f"
"reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/665a1ac0a763c51afc30d6d130dac0813092b17f",
"reference": "665a1ac0a763c51afc30d6d130dac0813092b17f",
"url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2e9da11878c4202f97915c1cb4bb1ca318a63f5f",
"reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f",
"shasum": ""
},
"require": {
@ -1664,7 +1669,7 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
"source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.11"
"source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.15"
},
"funding": [
{
@ -1672,7 +1677,7 @@
"type": "github"
}
],
"time": "2022-02-18T12:46:09+00:00"
"time": "2022-03-07T09:28:20+00:00"
},
{
"name": "phpunit/php-file-iterator",
@ -1917,16 +1922,16 @@
},
{
"name": "phpunit/phpunit",
"version": "9.5.14",
"version": "9.5.21",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
"reference": "1883687169c017d6ae37c58883ca3994cfc34189"
"reference": "0e32b76be457de00e83213528f6bb37e2a38fcb1"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/1883687169c017d6ae37c58883ca3994cfc34189",
"reference": "1883687169c017d6ae37c58883ca3994cfc34189",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/0e32b76be457de00e83213528f6bb37e2a38fcb1",
"reference": "0e32b76be457de00e83213528f6bb37e2a38fcb1",
"shasum": ""
},
"require": {
@ -1942,7 +1947,7 @@
"phar-io/version": "^3.0.2",
"php": ">=7.3",
"phpspec/prophecy": "^1.12.1",
"phpunit/php-code-coverage": "^9.2.7",
"phpunit/php-code-coverage": "^9.2.13",
"phpunit/php-file-iterator": "^3.0.5",
"phpunit/php-invoker": "^3.1.1",
"phpunit/php-text-template": "^2.0.3",
@ -1956,11 +1961,10 @@
"sebastian/global-state": "^5.0.1",
"sebastian/object-enumerator": "^4.0.3",
"sebastian/resource-operations": "^3.0.3",
"sebastian/type": "^2.3.4",
"sebastian/type": "^3.0",
"sebastian/version": "^3.0.2"
},
"require-dev": {
"ext-pdo": "*",
"phpspec/prophecy-phpunit": "^2.0.1"
},
"suggest": {
@ -2004,7 +2008,7 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
"source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.14"
"source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.21"
},
"funding": [
{
@ -2016,7 +2020,7 @@
"type": "github"
}
],
"time": "2022-02-18T12:54:07+00:00"
"time": "2022-06-19T12:14:25+00:00"
},
{
"name": "psalm/plugin-phpunit",
@ -2542,16 +2546,16 @@
},
{
"name": "sebastian/environment",
"version": "5.1.3",
"version": "5.1.4",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/environment.git",
"reference": "388b6ced16caa751030f6a69e588299fa09200ac"
"reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac",
"reference": "388b6ced16caa751030f6a69e588299fa09200ac",
"url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/1b5dff7bb151a4db11d49d90e5408e4e938270f7",
"reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7",
"shasum": ""
},
"require": {
@ -2593,7 +2597,7 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/environment/issues",
"source": "https://github.com/sebastianbergmann/environment/tree/5.1.3"
"source": "https://github.com/sebastianbergmann/environment/tree/5.1.4"
},
"funding": [
{
@ -2601,7 +2605,7 @@
"type": "github"
}
],
"time": "2020-09-28T05:52:38+00:00"
"time": "2022-04-03T09:37:03+00:00"
},
{
"name": "sebastian/exporter",
@ -3033,28 +3037,28 @@
},
{
"name": "sebastian/type",
"version": "2.3.4",
"version": "3.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/type.git",
"reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914"
"reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b8cd8a1c753c90bc1a0f5372170e3e489136f914",
"reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914",
"url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b233b84bc4465aff7b57cf1c4bc75c86d00d6dad",
"reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad",
"shasum": ""
},
"require": {
"php": ">=7.3"
},
"require-dev": {
"phpunit/phpunit": "^9.3"
"phpunit/phpunit": "^9.5"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.3-dev"
"dev-master": "3.0-dev"
}
},
"autoload": {
@ -3077,7 +3081,7 @@
"homepage": "https://github.com/sebastianbergmann/type",
"support": {
"issues": "https://github.com/sebastianbergmann/type/issues",
"source": "https://github.com/sebastianbergmann/type/tree/2.3.4"
"source": "https://github.com/sebastianbergmann/type/tree/3.0.0"
},
"funding": [
{
@ -3085,7 +3089,7 @@
"type": "github"
}
],
"time": "2021-06-15T12:49:02+00:00"
"time": "2022-03-15T09:54:48+00:00"
},
{
"name": "sebastian/version",
@ -3225,16 +3229,16 @@
},
{
"name": "symfony/console",
"version": "v5.4.3",
"version": "v5.4.9",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
"reference": "a2a86ec353d825c75856c6fd14fac416a7bdb6b8"
"reference": "829d5d1bf60b2efeb0887b7436873becc71a45eb"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/console/zipball/a2a86ec353d825c75856c6fd14fac416a7bdb6b8",
"reference": "a2a86ec353d825c75856c6fd14fac416a7bdb6b8",
"url": "https://api.github.com/repos/symfony/console/zipball/829d5d1bf60b2efeb0887b7436873becc71a45eb",
"reference": "829d5d1bf60b2efeb0887b7436873becc71a45eb",
"shasum": ""
},
"require": {
@ -3304,7 +3308,7 @@
"terminal"
],
"support": {
"source": "https://github.com/symfony/console/tree/v5.4.3"
"source": "https://github.com/symfony/console/tree/v5.4.9"
},
"funding": [
{
@ -3320,20 +3324,20 @@
"type": "tidelift"
}
],
"time": "2022-01-26T16:28:35+00:00"
"time": "2022-05-18T06:17:34+00:00"
},
{
"name": "symfony/deprecation-contracts",
"version": "v2.5.0",
"version": "v2.5.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/deprecation-contracts.git",
"reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8"
"reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/6f981ee24cf69ee7ce9736146d1c57c2780598a8",
"reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8",
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66",
"reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66",
"shasum": ""
},
"require": {
@ -3371,7 +3375,7 @@
"description": "A generic function and convention to trigger deprecation notices",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.0"
"source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.1"
},
"funding": [
{
@ -3387,20 +3391,20 @@
"type": "tidelift"
}
],
"time": "2021-07-12T14:48:14+00:00"
"time": "2022-01-02T09:53:40+00:00"
},
{
"name": "symfony/polyfill-ctype",
"version": "v1.24.0",
"version": "v1.26.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-ctype.git",
"reference": "30885182c981ab175d4d034db0f6f469898070ab"
"reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/30885182c981ab175d4d034db0f6f469898070ab",
"reference": "30885182c981ab175d4d034db0f6f469898070ab",
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4",
"reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4",
"shasum": ""
},
"require": {
@ -3415,7 +3419,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.23-dev"
"dev-main": "1.26-dev"
},
"thanks": {
"name": "symfony/polyfill",
@ -3423,12 +3427,12 @@
}
},
"autoload": {
"psr-4": {
"Symfony\\Polyfill\\Ctype\\": ""
},
"files": [
"bootstrap.php"
]
],
"psr-4": {
"Symfony\\Polyfill\\Ctype\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@ -3453,7 +3457,7 @@
"portable"
],
"support": {
"source": "https://github.com/symfony/polyfill-ctype/tree/v1.24.0"
"source": "https://github.com/symfony/polyfill-ctype/tree/v1.26.0"
},
"funding": [
{
@ -3469,20 +3473,20 @@
"type": "tidelift"
}
],
"time": "2021-10-20T20:35:02+00:00"
"time": "2022-05-24T11:49:31+00:00"
},
{
"name": "symfony/polyfill-intl-grapheme",
"version": "v1.24.0",
"version": "v1.26.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-grapheme.git",
"reference": "81b86b50cf841a64252b439e738e97f4a34e2783"
"reference": "433d05519ce6990bf3530fba6957499d327395c2"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/81b86b50cf841a64252b439e738e97f4a34e2783",
"reference": "81b86b50cf841a64252b439e738e97f4a34e2783",
"url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/433d05519ce6990bf3530fba6957499d327395c2",
"reference": "433d05519ce6990bf3530fba6957499d327395c2",
"shasum": ""
},
"require": {
@ -3494,7 +3498,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.23-dev"
"dev-main": "1.26-dev"
},
"thanks": {
"name": "symfony/polyfill",
@ -3534,7 +3538,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.24.0"
"source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.26.0"
},
"funding": [
{
@ -3550,20 +3554,20 @@
"type": "tidelift"
}
],
"time": "2021-11-23T21:10:46+00:00"
"time": "2022-05-24T11:49:31+00:00"
},
{
"name": "symfony/polyfill-intl-normalizer",
"version": "v1.24.0",
"version": "v1.26.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-normalizer.git",
"reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8"
"reference": "219aa369ceff116e673852dce47c3a41794c14bd"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8",
"reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8",
"url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/219aa369ceff116e673852dce47c3a41794c14bd",
"reference": "219aa369ceff116e673852dce47c3a41794c14bd",
"shasum": ""
},
"require": {
@ -3575,7 +3579,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.23-dev"
"dev-main": "1.26-dev"
},
"thanks": {
"name": "symfony/polyfill",
@ -3618,7 +3622,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.24.0"
"source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.26.0"
},
"funding": [
{
@ -3634,20 +3638,20 @@
"type": "tidelift"
}
],
"time": "2021-02-19T12:13:01+00:00"
"time": "2022-05-24T11:49:31+00:00"
},
{
"name": "symfony/polyfill-mbstring",
"version": "v1.24.0",
"version": "v1.26.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
"reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825"
"reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/0abb51d2f102e00a4eefcf46ba7fec406d245825",
"reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e",
"reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e",
"shasum": ""
},
"require": {
@ -3662,7 +3666,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.23-dev"
"dev-main": "1.26-dev"
},
"thanks": {
"name": "symfony/polyfill",
@ -3701,7 +3705,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.24.0"
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.26.0"
},
"funding": [
{
@ -3717,20 +3721,20 @@
"type": "tidelift"
}
],
"time": "2021-11-30T18:21:41+00:00"
"time": "2022-05-24T11:49:31+00:00"
},
{
"name": "symfony/polyfill-php73",
"version": "v1.24.0",
"version": "v1.26.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php73.git",
"reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5"
"reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/cc5db0e22b3cb4111010e48785a97f670b350ca5",
"reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5",
"url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/e440d35fa0286f77fb45b79a03fedbeda9307e85",
"reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85",
"shasum": ""
},
"require": {
@ -3739,7 +3743,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.23-dev"
"dev-main": "1.26-dev"
},
"thanks": {
"name": "symfony/polyfill",
@ -3780,7 +3784,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-php73/tree/v1.24.0"
"source": "https://github.com/symfony/polyfill-php73/tree/v1.26.0"
},
"funding": [
{
@ -3796,20 +3800,20 @@
"type": "tidelift"
}
],
"time": "2021-06-05T21:20:04+00:00"
"time": "2022-05-24T11:49:31+00:00"
},
{
"name": "symfony/polyfill-php80",
"version": "v1.24.0",
"version": "v1.26.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php80.git",
"reference": "57b712b08eddb97c762a8caa32c84e037892d2e9"
"reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/57b712b08eddb97c762a8caa32c84e037892d2e9",
"reference": "57b712b08eddb97c762a8caa32c84e037892d2e9",
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/cfa0ae98841b9e461207c13ab093d76b0fa7bace",
"reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace",
"shasum": ""
},
"require": {
@ -3818,7 +3822,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.23-dev"
"dev-main": "1.26-dev"
},
"thanks": {
"name": "symfony/polyfill",
@ -3863,7 +3867,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-php80/tree/v1.24.0"
"source": "https://github.com/symfony/polyfill-php80/tree/v1.26.0"
},
"funding": [
{
@ -3879,26 +3883,26 @@
"type": "tidelift"
}
],
"time": "2021-09-13T13:58:33+00:00"
"time": "2022-05-10T07:21:04+00:00"
},
{
"name": "symfony/service-contracts",
"version": "v2.5.0",
"version": "v2.5.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/service-contracts.git",
"reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc"
"reference": "24d9dc654b83e91aa59f9d167b131bc3b5bea24c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/service-contracts/zipball/1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc",
"reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc",
"url": "https://api.github.com/repos/symfony/service-contracts/zipball/24d9dc654b83e91aa59f9d167b131bc3b5bea24c",
"reference": "24d9dc654b83e91aa59f9d167b131bc3b5bea24c",
"shasum": ""
},
"require": {
"php": ">=7.2.5",
"psr/container": "^1.1",
"symfony/deprecation-contracts": "^2.1"
"symfony/deprecation-contracts": "^2.1|^3"
},
"conflict": {
"ext-psr": "<1.1|>=2"
@ -3946,7 +3950,7 @@
"standards"
],
"support": {
"source": "https://github.com/symfony/service-contracts/tree/v2.5.0"
"source": "https://github.com/symfony/service-contracts/tree/v2.5.1"
},
"funding": [
{
@ -3962,20 +3966,20 @@
"type": "tidelift"
}
],
"time": "2021-11-04T16:48:04+00:00"
"time": "2022-03-13T20:07:29+00:00"
},
{
"name": "symfony/string",
"version": "v5.4.3",
"version": "v5.4.9",
"source": {
"type": "git",
"url": "https://github.com/symfony/string.git",
"reference": "92043b7d8383e48104e411bc9434b260dbeb5a10"
"reference": "985e6a9703ef5ce32ba617c9c7d97873bb7b2a99"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/string/zipball/92043b7d8383e48104e411bc9434b260dbeb5a10",
"reference": "92043b7d8383e48104e411bc9434b260dbeb5a10",
"url": "https://api.github.com/repos/symfony/string/zipball/985e6a9703ef5ce32ba617c9c7d97873bb7b2a99",
"reference": "985e6a9703ef5ce32ba617c9c7d97873bb7b2a99",
"shasum": ""
},
"require": {
@ -3997,12 +4001,12 @@
},
"type": "library",
"autoload": {
"psr-4": {
"Symfony\\Component\\String\\": ""
},
"files": [
"Resources/functions.php"
],
"psr-4": {
"Symfony\\Component\\String\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
@ -4032,7 +4036,7 @@
"utf8"
],
"support": {
"source": "https://github.com/symfony/string/tree/v5.4.3"
"source": "https://github.com/symfony/string/tree/v5.4.9"
},
"funding": [
{
@ -4048,7 +4052,7 @@
"type": "tidelift"
}
],
"time": "2022-01-02T09:53:40+00:00"
"time": "2022-04-19T10:40:37+00:00"
},
{
"name": "theseer/tokenizer",
@ -4102,16 +4106,16 @@
},
{
"name": "vimeo/psalm",
"version": "4.21.0",
"version": "4.23.0",
"source": {
"type": "git",
"url": "https://github.com/vimeo/psalm.git",
"reference": "d8bec4c7aaee111a532daec32fb09de5687053d1"
"reference": "f1fe6ff483bf325c803df9f510d09a03fd796f88"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/vimeo/psalm/zipball/d8bec4c7aaee111a532daec32fb09de5687053d1",
"reference": "d8bec4c7aaee111a532daec32fb09de5687053d1",
"url": "https://api.github.com/repos/vimeo/psalm/zipball/f1fe6ff483bf325c803df9f510d09a03fd796f88",
"reference": "f1fe6ff483bf325c803df9f510d09a03fd796f88",
"shasum": ""
},
"require": {
@ -4136,6 +4140,7 @@
"php": "^7.1|^8",
"sebastian/diff": "^3.0 || ^4.0",
"symfony/console": "^3.4.17 || ^4.1.6 || ^5.0 || ^6.0",
"symfony/polyfill-php80": "^1.25",
"webmozart/path-util": "^2.3"
},
"provide": {
@ -4202,27 +4207,27 @@
],
"support": {
"issues": "https://github.com/vimeo/psalm/issues",
"source": "https://github.com/vimeo/psalm/tree/4.21.0"
"source": "https://github.com/vimeo/psalm/tree/4.23.0"
},
"time": "2022-02-18T04:34:15+00:00"
"time": "2022-04-28T17:35:49+00:00"
},
{
"name": "webmozart/assert",
"version": "1.10.0",
"version": "1.11.0",
"source": {
"type": "git",
"url": "https://github.com/webmozarts/assert.git",
"reference": "6964c76c7804814a842473e0c8fd15bab0f18e25"
"reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25",
"reference": "6964c76c7804814a842473e0c8fd15bab0f18e25",
"url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991",
"reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991",
"shasum": ""
},
"require": {
"php": "^7.2 || ^8.0",
"symfony/polyfill-ctype": "^1.8"
"ext-ctype": "*",
"php": "^7.2 || ^8.0"
},
"conflict": {
"phpstan/phpstan": "<0.12.20",
@ -4260,9 +4265,9 @@
],
"support": {
"issues": "https://github.com/webmozarts/assert/issues",
"source": "https://github.com/webmozarts/assert/tree/1.10.0"
"source": "https://github.com/webmozarts/assert/tree/1.11.0"
},
"time": "2021-03-09T10:59:23+00:00"
"time": "2022-06-03T18:03:27+00:00"
},
{
"name": "webmozart/path-util",

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<files psalm-version="4.21.0@d8bec4c7aaee111a532daec32fb09de5687053d1">
<files psalm-version="4.23.0@f1fe6ff483bf325c803df9f510d09a03fd796f88">
<file src="src/CallbackStream.php">
<ImplementedReturnTypeMismatch occurrences="1">
<code>null|callable</code>
@ -242,13 +242,45 @@
</ParamNameMismatch>
</file>
<file src="src/ServerRequestFactory.php">
<LessSpecificReturnStatement occurrences="1"/>
<MixedArgument occurrences="1">
<code>$headers['cookie']</code>
</MixedArgument>
<MixedAssignment occurrences="3">
<code>$iisUrlRewritten</code>
<code>$requestUri</code>
<code>$unencodedUrl</code>
</MixedAssignment>
<MixedInferredReturnType occurrences="1">
<code>array{string, int|null}</code>
</MixedInferredReturnType>
<MixedReturnStatement occurrences="1">
<code>$defaults</code>
</MixedReturnStatement>
<MoreSpecificReturnType occurrences="1">
<code>ServerRequest</code>
</MoreSpecificReturnType>
<RedundantConditionGivenDocblockType occurrences="1">
<code>is_callable(self::$apacheRequestHeaders)</code>
</RedundantConditionGivenDocblockType>
</file>
<file src="src/ServerRequestFilter/FilterUsingXForwardedHeaders.php">
<ImpureMethodCall occurrences="7">
<code>getHeaderLine</code>
<code>getServerParams</code>
<code>getUri</code>
<code>withHost</code>
<code>withPort</code>
<code>withScheme</code>
<code>withUri</code>
</ImpureMethodCall>
<LessSpecificReturnStatement occurrences="1">
<code>$proxyCIDRList</code>
</LessSpecificReturnStatement>
<MoreSpecificReturnType occurrences="1">
<code>list&lt;non-empty-string&gt;</code>
</MoreSpecificReturnType>
</file>
<file src="src/Stream.php">
<InvalidArgument occurrences="1"/>
<MixedInferredReturnType occurrences="1">

View File

@ -15,11 +15,26 @@
</projectFiles>
<issueHandlers>
<DeprecatedFunction>
<errorLevel type="suppress">
<referencedFunction name="laminas\diactoros\marshalurifromsapi"/>
</errorLevel>
</DeprecatedFunction>
<InternalClass>
<errorLevel type="suppress">
<referencedClass name="Laminas\Diactoros\ServerRequestFilter\IPRange"/>
</errorLevel>
</InternalClass>
<InternalMethod>
<errorLevel type="suppress">
<referencedMethod name="PHPUnit\Framework\MockObject\Builder\InvocationMocker::method"/>
<referencedMethod name="PHPUnit\Framework\MockObject\Builder\InvocationMocker::willReturn"/>
<referencedMethod name="PHPUnit\Framework\MockObject\Builder\InvocationMocker::with"/>
<referencedMethod name="Laminas\Diactoros\ServerRequestFilter\IPRange::matches"/>
<referencedMethod name="Laminas\Diactoros\ServerRequestFilter\IPRange::matchesIPv4"/>
<referencedMethod name="Laminas\Diactoros\ServerRequestFilter\IPRange::matchesIPv6"/>
</errorLevel>
</InternalMethod>

View File

@ -13,6 +13,11 @@ use Psr\Http\Message\UriFactoryInterface;
class ConfigProvider
{
public const CONFIG_KEY = 'laminas-diactoros';
public const X_FORWARDED = 'x-forwarded-request-filter';
public const X_FORWARDED_TRUSTED_PROXIES = 'trusted-proxies';
public const X_FORWARDED_TRUSTED_HEADERS = 'trusted-headers';
/**
* Retrieve configuration for laminas-diactoros.
*
@ -22,6 +27,7 @@ class ConfigProvider
{
return [
'dependencies' => $this->getDependencies(),
self::CONFIG_KEY => $this->getComponentConfig(),
];
}
@ -31,6 +37,7 @@ class ConfigProvider
*/
public function getDependencies() : array
{
// @codingStandardsIgnoreStart
return [
'invokables' => [
RequestFactoryInterface::class => RequestFactory::class,
@ -41,5 +48,16 @@ class ConfigProvider
UriFactoryInterface::class => UriFactory::class
],
];
// @codingStandardsIgnoreEnd
}
public function getComponentConfig(): array
{
return [
self::X_FORWARDED => [
self::X_FORWARDED_TRUSTED_PROXIES => '',
self::X_FORWARDED_TRUSTED_HEADERS => [],
],
];
}
}

View File

@ -0,0 +1,24 @@
<?php
declare(strict_types=1);
namespace Laminas\Diactoros\Exception;
use Laminas\Diactoros\ServerRequestFilter\FilterUsingXForwardedHeaders;
class InvalidForwardedHeaderNameException extends RuntimeException implements ExceptionInterface
{
/** @param mixed $name */
public static function forHeader($name): self
{
if (! is_string($name)) {
$name = sprintf('(value of type %s)', is_object($name) ? get_class($name) : gettype($name));
}
return new self(sprintf(
'Invalid X-Forwarded-* header name "%s" provided to %s',
$name,
FilterUsingXForwardedHeaders::class
));
}
}

View File

@ -0,0 +1,29 @@
<?php
declare(strict_types=1);
namespace Laminas\Diactoros\Exception;
class InvalidProxyAddressException extends RuntimeException implements ExceptionInterface
{
/** @param mixed $proxy */
public static function forInvalidProxyArgument($proxy): self
{
$type = is_object($proxy) ? get_class($proxy) : gettype($proxy);
return new self(sprintf(
'Invalid proxy of type "%s" provided;'
. ' must be a valid IPv4 or IPv6 address, optionally with a subnet mask provided'
. ' or an array of such values',
$type,
));
}
public static function forAddress(string $address): self
{
return new self(sprintf(
'Invalid proxy address "%s" provided;'
. ' must be a valid IPv4 or IPv6 address, optionally with a subnet mask provided',
$address,
));
}
}

View File

@ -4,6 +4,8 @@ declare(strict_types=1);
namespace Laminas\Diactoros;
use Laminas\Diactoros\ServerRequestFilter\FilterServerRequestInterface;
use Laminas\Diactoros\ServerRequestFilter\FilterUsingXForwardedHeaders;
use Psr\Http\Message\ServerRequestFactoryInterface;
use Psr\Http\Message\ServerRequestInterface;
@ -42,6 +44,11 @@ class ServerRequestFactory implements ServerRequestFactoryInterface
* @param array $body $_POST superglobal
* @param array $cookies $_COOKIE superglobal
* @param array $files $_FILES superglobal
* @param null|FilterServerRequestInterface $requestFilter If present, the
* generated request will be passed to this instance and the result
* returned by this method. When not present, a default instance of
* FilterUsingXForwardedHeaders is created, using the `trustReservedSubnets()`
* constructor.
* @return ServerRequest
*/
public static function fromGlobals(
@ -49,8 +56,11 @@ class ServerRequestFactory implements ServerRequestFactoryInterface
array $query = null,
array $body = null,
array $cookies = null,
array $files = null
array $files = null,
?FilterServerRequestInterface $requestFilter = null
) : ServerRequest {
$requestFilter = $requestFilter ?: FilterUsingXForwardedHeaders::trustReservedSubnets();
$server = normalizeServer(
$server ?: $_SERVER,
is_callable(self::$apacheRequestHeaders) ? self::$apacheRequestHeaders : null
@ -62,10 +72,10 @@ class ServerRequestFactory implements ServerRequestFactoryInterface
$cookies = parseCookieHeader($headers['cookie']);
}
return new ServerRequest(
return $requestFilter(new ServerRequest(
$server,
$files,
marshalUriFromSapi($server, $headers),
self::marshalUriFromSapi($server),
marshalMethodFromSapi($server),
'php://input',
$headers,
@ -73,7 +83,7 @@ class ServerRequestFactory implements ServerRequestFactoryInterface
$query ?: $_GET,
$body ?: $_POST,
marshalProtocolVersionFromSapi($server)
);
));
}
/**
@ -91,4 +101,159 @@ class ServerRequestFactory implements ServerRequestFactoryInterface
'php://temp'
);
}
/**
* Marshal a Uri instance based on the values present in the $_SERVER array and headers.
*
* @param array $server SAPI parameters
*/
private static function marshalUriFromSapi(array $server) : Uri
{
$uri = new Uri('');
// URI scheme
$https = false;
if (array_key_exists('HTTPS', $server)) {
$https = self::marshalHttpsValue($server['HTTPS']);
} elseif (array_key_exists('https', $server)) {
$https = self::marshalHttpsValue($server['https']);
}
$uri = $uri->withScheme($https ? 'https' : 'http');
// Set the host
[$host, $port] = self::marshalHostAndPort($server);
if (! empty($host)) {
$uri = $uri->withHost($host);
if (! empty($port)) {
$uri = $uri->withPort($port);
}
}
// URI path
$path = self::marshalRequestPath($server);
// Strip query string
$path = explode('?', $path, 2)[0];
// URI query
$query = '';
if (isset($server['QUERY_STRING'])) {
$query = ltrim((string) $server['QUERY_STRING'], '?');
}
// URI fragment
$fragment = '';
if (strpos($path, '#') !== false) {
[$path, $fragment] = explode('#', $path, 2);
}
return $uri
->withPath($path)
->withFragment($fragment)
->withQuery($query);
}
/**
* Marshal the host and port from the PHP environment.
*
* @return array{string, int|null} Array of two items, host and port,
* in that order (can be passed to a list() operation).
*/
private static function marshalHostAndPort(array $server) : array
{
static $defaults = ['', null];
if (! isset($server['SERVER_NAME'])) {
return $defaults;
}
$host = (string) $server['SERVER_NAME'];
$port = isset($server['SERVER_PORT']) ? (int) $server['SERVER_PORT'] : null;
if (! isset($server['SERVER_ADDR'])
|| ! preg_match('/^\[[0-9a-fA-F\:]+\]$/', $host)
) {
return [$host, $port];
}
// Misinterpreted IPv6-Address
// Reported for Safari on Windows
return self::marshalIpv6HostAndPort($server, $port);
}
/**
* @return array{string, int|null} Array of two items, host and port,
* in that order (can be passed to a list() operation).
*/
private static function marshalIpv6HostAndPort(array $server, ?int $port) : array
{
$host = '[' . (string) $server['SERVER_ADDR'] . ']';
$port = $port ?: 80;
$portSeparatorPos = strrpos($host, ':');
if (false === $portSeparatorPos) {
return [$host, $port];
}
if ($port . ']' === substr($host, $portSeparatorPos + 1)) {
// The last digit of the IPv6-Address has been taken as port
// Unset the port so the default port can be used
$port = null;
}
return [$host, $port];
}
/**
* Detect the path for the request
*
* Looks at a variety of criteria in order to attempt to autodetect the base
* request path, including:
*
* - IIS7 UrlRewrite environment
* - REQUEST_URI
* - ORIG_PATH_INFO
*/
private static function marshalRequestPath(array $server) : string
{
// IIS7 with URL Rewrite: make sure we get the unencoded url
// (double slash problem).
$iisUrlRewritten = $server['IIS_WasUrlRewritten'] ?? null;
$unencodedUrl = $server['UNENCODED_URL'] ?? '';
if ('1' === $iisUrlRewritten && is_string($unencodedUrl) && '' !== $unencodedUrl) {
return $unencodedUrl;
}
$requestUri = $server['REQUEST_URI'] ?? null;
if (is_string($requestUri)) {
return preg_replace('#^[^/:]+://[^/]+#', '', $requestUri);
}
$origPathInfo = $server['ORIG_PATH_INFO'] ?? '';
if (! is_string($origPathInfo) || '' === $origPathInfo) {
return '/';
}
return $origPathInfo;
}
/**
* @param mixed $https
*/
private static function marshalHttpsValue($https) : bool
{
if (is_bool($https)) {
return $https;
}
if (! is_string($https)) {
throw new Exception\InvalidArgumentException(sprintf(
'SAPI HTTPS value MUST be a string or boolean; received %s',
gettype($https)
));
}
return 'on' === strtolower($https);
}
}

View File

@ -0,0 +1,15 @@
<?php
declare(strict_types=1);
namespace Laminas\Diactoros\ServerRequestFilter;
use Psr\Http\Message\ServerRequestInterface;
final class DoNotFilter implements FilterServerRequestInterface
{
public function __invoke(ServerRequestInterface $request): ServerRequestInterface
{
return $request;
}
}

View File

@ -0,0 +1,29 @@
<?php
declare(strict_types=1);
namespace Laminas\Diactoros\ServerRequestFilter;
use Psr\Http\Message\ServerRequestInterface;
/**
* Filter/initialize a server request.
*
* Implementations of this interface will take an incoming request, and
* decide if additional modifications are necessary. As examples:
*
* - Injecting a unique request identifier header.
* - Using the X-Forwarded-* headers to rewrite the URI to reflect the original request.
* - Using the Forwarded header to rewrite the URI to reflect the original request.
*
* This functionality is consumed by the ServerRequestFactory using the request
* instance it generates, just prior to returning a request.
*/
interface FilterServerRequestInterface
{
/**
* Determine if a request needs further modification, and if so, return a
* new instance reflecting those modifications.
*/
public function __invoke(ServerRequestInterface $request): ServerRequestInterface;
}

View File

@ -0,0 +1,256 @@
<?php
declare(strict_types=1);
namespace Laminas\Diactoros\ServerRequestFilter;
use Laminas\Diactoros\Exception\InvalidForwardedHeaderNameException;
use Laminas\Diactoros\Exception\InvalidProxyAddressException;
use Psr\Http\Message\ServerRequestInterface;
/**
* Modify the URI to reflect the X-Forwarded-* headers.
*
* If the request comes from a trusted proxy, this filter will analyze the
* various X-Forwarded-* headers, if any, and if they are marked as trusted,
* in order to return a new request that composes a URI instance that reflects
* those headers.
*
* @psalm-immutable
*/
final class FilterUsingXForwardedHeaders implements FilterServerRequestInterface
{
public const HEADER_HOST = 'X-FORWARDED-HOST';
public const HEADER_PORT = 'X-FORWARDED-PORT';
public const HEADER_PROTO = 'X-FORWARDED-PROTO';
private const X_FORWARDED_HEADERS = [
self::HEADER_HOST,
self::HEADER_PORT,
self::HEADER_PROTO,
];
/**
* @var list<FilterUsingXForwardedHeaders::HEADER_*>
*/
private $trustedHeaders;
/** @var list<non-empty-string> */
private $trustedProxies;
/**
* Only allow construction via named constructors
*
* @param list<non-empty-string> $trustedProxies
* @param list<FilterUsingXForwardedHeaders::HEADER_*> $trustedHeaders
*/
private function __construct(
array $trustedProxies = [],
array $trustedHeaders = []
) {
$this->trustedProxies = $trustedProxies;
$this->trustedHeaders = $trustedHeaders;
}
public function __invoke(ServerRequestInterface $request): ServerRequestInterface
{
$remoteAddress = $request->getServerParams()['REMOTE_ADDR'] ?? '';
if ('' === $remoteAddress || ! is_string($remoteAddress)) {
// Should we trigger a warning here?
return $request;
}
if (! $this->isFromTrustedProxy($remoteAddress)) {
// Do nothing
return $request;
}
// Update the URI based on the trusted headers
$uri = $originalUri = $request->getUri();
foreach ($this->trustedHeaders as $headerName) {
$header = $request->getHeaderLine($headerName);
if ('' === $header || false !== strpos($header, ',')) {
// Reject empty headers and/or headers with multiple values
continue;
}
switch ($headerName) {
case self::HEADER_HOST:
$uri = $uri->withHost($header);
break;
case self::HEADER_PORT:
$uri = $uri->withPort((int) $header);
break;
case self::HEADER_PROTO:
$uri = $uri->withScheme($header);
break;
}
}
if ($uri !== $originalUri) {
return $request->withUri($uri);
}
return $request;
}
/**
* Indicate which proxies and which X-Forwarded headers to trust.
*
* @param list<non-empty-string> $proxyCIDRList Each element may
* be an IP address or a subnet specified using CIDR notation; both IPv4
* and IPv6 are supported. The special string "*" will be translated to
* two entries, "0.0.0.0/0" and "::/0". An empty list indicates no
* proxies are trusted.
* @param list<FilterUsingXForwardedHeaders::HEADER_*> $trustedHeaders If
* the list is empty, all X-Forwarded headers are trusted.
* @throws InvalidProxyAddressException
* @throws InvalidForwardedHeaderNameException
*/
public static function trustProxies(
array $proxyCIDRList,
array $trustedHeaders = self::X_FORWARDED_HEADERS
): self {
$proxyCIDRList = self::normalizeProxiesList($proxyCIDRList);
self::validateTrustedHeaders($trustedHeaders);
return new self($proxyCIDRList, $trustedHeaders);
}
/**
* Trust any X-FORWARDED-* headers from any address.
*
* This is functionally equivalent to calling `trustProxies(['*'])`.
*
* WARNING: Only do this if you know for certain that your application
* sits behind a trusted proxy that cannot be spoofed. This should only
* be the case if your server is not publicly addressable, and all requests
* are routed via a reverse proxy (e.g., a load balancer, a server such as
* Caddy, when using Traefik, etc.).
*/
public static function trustAny(): self
{
return self::trustProxies(['*']);
}
/**
* Trust X-Forwarded headers from reserved subnetworks.
*
* This is functionally equivalent to calling `trustProxies()` where the
* `$proxcyCIDRList` argument is a list with the following:
*
* - 10.0.0.0/8
* - 127.0.0.0/8
* - 172.16.0.0/12
* - 192.168.0.0/16
* - ::1/128 (IPv6 localhost)
* - fc00::/7 (IPv6 private networks)
* - fe80::/10 (IPv6 local-link addresses)
*
* @param list<FilterUsingXForwardedHeaders::HEADER_*> $trustedHeaders If
* the list is empty, all X-Forwarded headers are trusted.
* @throws InvalidForwardedHeaderNameException
*/
public static function trustReservedSubnets(array $trustedHeaders = self::X_FORWARDED_HEADERS): self
{
return self::trustProxies([
'10.0.0.0/8',
'127.0.0.0/8',
'172.16.0.0/12',
'192.168.0.0/16',
'::1/128', // ipv6 localhost
'fc00::/7', // ipv6 private networks
'fe80::/10', // ipv6 local-link addresses
], $trustedHeaders);
}
private function isFromTrustedProxy(string $remoteAddress): bool
{
foreach ($this->trustedProxies as $proxy) {
if (IPRange::matches($remoteAddress, $proxy)) {
return true;
}
}
return false;
}
/** @throws InvalidForwardedHeaderNameException */
private static function validateTrustedHeaders(array $headers): void
{
foreach ($headers as $header) {
if (! in_array($header, self::X_FORWARDED_HEADERS, true)) {
throw InvalidForwardedHeaderNameException::forHeader($header);
}
}
}
/**
* @param list<non-empty-string> $proxyCIDRList
* @return list<non-empty-string>
* @throws InvalidProxyAddressException
*/
private static function normalizeProxiesList(array $proxyCIDRList): array
{
$foundWildcard = false;
foreach ($proxyCIDRList as $index => $cidr) {
if ($cidr === '*') {
unset($proxyCIDRList[$index]);
$foundWildcard = true;
continue;
}
if (! self::validateProxyCIDR($cidr)) {
throw InvalidProxyAddressException::forAddress($cidr);
}
}
if ($foundWildcard) {
$proxyCIDRList[] = '0.0.0.0/0';
$proxyCIDRList[] = '::/0';
}
return $proxyCIDRList;
}
/**
* @param mixed $cidr
*/
private static function validateProxyCIDR($cidr): bool
{
if (! is_string($cidr) || '' === $cidr) {
return false;
}
$address = $cidr;
$mask = null;
if (false !== strpos($cidr, '/')) {
[$address, $mask] = explode('/', $cidr, 2);
$mask = (int) $mask;
}
if (false !== strpos($address, ':')) {
// is IPV6
return filter_var($address, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)
&& (
$mask === null
|| (
$mask <= 128
&& $mask >= 0
)
);
}
// is IPV4
return filter_var($address, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)
&& (
$mask === null
|| (
$mask <= 32
&& $mask >= 0
)
);
}
}

View File

@ -0,0 +1,106 @@
<?php
declare(strict_types=1);
namespace Laminas\Diactoros\ServerRequestFilter;
/** @internal */
final class IPRange
{
/**
* Disable instantiation
*/
private function __construct()
{
}
/** @psalm-pure */
public static function matches(string $ip, string $cidr): bool
{
if (false !== strpos($ip, ':')) {
return self::matchesIPv6($ip, $cidr);
}
return self::matchesIPv4($ip, $cidr);
}
/** @psalm-pure */
public static function matchesIPv4(string $ip, string $cidr): bool
{
$mask = 32;
$subnet = $cidr;
if (false !== strpos($cidr, '/')) {
[$subnet, $mask] = explode('/', $cidr, 2);
$mask = (int) $mask;
}
if ($mask < 0 || $mask > 32) {
return false;
}
$ip = ip2long($ip);
$subnet = ip2long($subnet);
if (false === $ip || false === $subnet) {
// Invalid data
return false;
}
return 0 === substr_compare(
sprintf("%032b", $ip),
sprintf("%032b", $subnet),
0,
$mask
);
}
/** @psalm-pure */
public static function matchesIPv6(string $ip, string $cidr): bool
{
$mask = 128;
$subnet = $cidr;
if (false !== strpos($cidr, '/')) {
[$subnet, $mask] = explode('/', $cidr, 2);
$mask = (int) $mask;
}
if ($mask < 0 || $mask > 128) {
return false;
}
$ip = inet_pton($ip);
$subnet = inet_pton($subnet);
if (false == $ip || false == $subnet) {
// Invalid data
return false;
}
// mask 0: if it's a valid IP, it's valid
if ($mask === 0) {
return (bool) unpack('n*', $ip);
}
// @see http://stackoverflow.com/questions/7951061/matching-ipv6-address-to-a-cidr-subnet, MW answer
$binMask = str_repeat("f", intval($mask / 4));
switch ($mask % 4) {
case 0:
break;
case 1:
$binMask .= "8";
break;
case 2:
$binMask .= "c";
break;
case 3:
$binMask .= "e";
break;
}
$binMask = str_pad($binMask, 32, '0');
$binMask = pack("H*", $binMask);
return ($ip & $binMask) === $subnet;
}
}

View File

@ -22,6 +22,8 @@ use function substr;
*
* @param array $server SAPI parameters
* @param array $headers HTTP request headers
* @deprecated This function is deprecated as of 2.11.1, and will be removed in
* 3.0.0. As of 2.11.1, it is no longer used internally.
*/
function marshalUriFromSapi(array $server, array $headers) : Uri
{

View File

@ -55,7 +55,7 @@ class AddConsoleCommandPass implements CompilerPassInterface
if (!$r->isSubclassOf(Command::class)) {
throw new InvalidArgumentException(sprintf('The service "%s" tagged "%s" must be a subclass of "%s".', $id, $this->commandTag, Command::class));
}
$commandName = $class::getDefaultName();
$commandName = $class::getDefaultName() !== null ? str_replace('%', '%%', $class::getDefaultName()) : null;
}
if (null === $commandName) {

View File

@ -54,6 +54,9 @@ class ApplicationTester
*/
public function run(array $input, $options = [])
{
$prevShellVerbosity = getenv('SHELL_VERBOSITY');
try {
$this->input = new ArrayInput($input);
if (isset($options['interactive'])) {
$this->input->setInteractive($options['interactive']);
@ -66,5 +69,22 @@ class ApplicationTester
$this->initOutput($options);
return $this->statusCode = $this->application->run($this->input, $this->output);
} finally {
// SHELL_VERBOSITY is set by Application::configureIO so we need to unset/reset it
// to its previous value to avoid one test's verbosity to spread to the following tests
if (false === $prevShellVerbosity) {
if (\function_exists('putenv')) {
@putenv('SHELL_VERBOSITY');
}
unset($_ENV['SHELL_VERBOSITY']);
unset($_SERVER['SHELL_VERBOSITY']);
} else {
if (\function_exists('putenv')) {
@putenv('SHELL_VERBOSITY='.$prevShellVerbosity);
}
$_ENV['SHELL_VERBOSITY'] = $prevShellVerbosity;
$_SERVER['SHELL_VERBOSITY'] = $prevShellVerbosity;
}
}
}
}

View File

@ -331,11 +331,16 @@ abstract class HttpClientTestCase extends TestCase
$this->assertSame('', $response->getContent(false));
}
public function testRedirects()
/**
* @testWith [[]]
* [["Content-Length: 7"]]
*/
public function testRedirects(array $headers = [])
{
$client = $this->getHttpClient(__FUNCTION__);
$response = $client->request('POST', 'http://localhost:8057/301', [
'auth_basic' => 'foo:bar',
'headers' => $headers,
'body' => function () {
yield 'foo=bar';
},

View File

@ -273,11 +273,8 @@ class UploadedFile extends File
switch (substr($size, -1)) {
case 't': $max *= 1024;
// no break
case 'g': $max *= 1024;
// no break
case 'm': $max *= 1024;
// no break
case 'k': $max *= 1024;
}

View File

@ -152,6 +152,12 @@ class NativeSessionStorage implements SessionStorageInterface
throw new \RuntimeException(sprintf('Failed to start the session because headers have already been sent by "%s" at line %d.', $file, $line));
}
$sessionId = $_COOKIE[session_name()] ?? null;
if ($sessionId && $this->saveHandler instanceof AbstractProxy && 'files' === $this->saveHandler->getSaveHandlerName() && !preg_match('/^[a-zA-Z0-9,-]{22,}$/', $sessionId)) {
// the session ID in the header is invalid, create a new one
session_id(session_create_id());
}
// ok to try and start the session
if (!session_start()) {
throw new \RuntimeException('Failed to start the session.');

View File

@ -114,11 +114,8 @@ class MemoryDataCollector extends DataCollector implements LateDataCollectorInte
switch (substr($memoryLimit, -1)) {
case 't': $max *= 1024;
// no break
case 'g': $max *= 1024;
// no break
case 'm': $max *= 1024;
// no break
case 'k': $max *= 1024;
}

View File

@ -12,8 +12,10 @@
namespace Symfony\Component\HttpKernel\EventListener;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RequestMatcherInterface;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;
use Symfony\Component\HttpKernel\Event\PostResponseEvent;
@ -87,9 +89,22 @@ class ProfilerListener implements EventSubscriberInterface
return;
}
$session = method_exists(Request::class, 'getPreferredFormat') && $request->hasPreviousSession() && $request->hasSession() ? $request->getSession() : null;
if ($session instanceof Session) {
$usageIndexValue = $usageIndexReference = &$session->getUsageIndex();
$usageIndexReference = \PHP_INT_MIN;
}
try {
if (!$profile = $this->profiler->collect($request, $event->getResponse(), $exception)) {
return;
}
} finally {
if ($session instanceof Session) {
$usageIndexReference = $usageIndexValue;
}
}
$this->profiles[$request] = $profile;

View File

@ -718,7 +718,7 @@ class HttpCache implements HttpKernelInterface, TerminableInterface
$timeout = $this->options['stale_while_revalidate'];
}
return abs($entry->getTtl()) < $timeout;
return abs($entry->getTtl() ?? 0) < $timeout;
}
/**

View File

@ -76,11 +76,11 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl
private static $freshCache = [];
public const VERSION = '4.4.42';
public const VERSION_ID = 40442;
public const VERSION = '4.4.43';
public const VERSION_ID = 40443;
public const MAJOR_VERSION = 4;
public const MINOR_VERSION = 4;
public const RELEASE_VERSION = 42;
public const RELEASE_VERSION = 43;
public const EXTRA_VERSION = '';
public const END_OF_MAINTENANCE = '11/2022';

View File

@ -61,13 +61,20 @@ class DataPart extends TextPart
$contentType = self::$mimeTypes->getMimeTypes($ext)[0] ?? 'application/octet-stream';
}
if (false === is_readable($path)) {
if ((is_file($path) && !is_readable($path)) || is_dir($path)) {
throw new InvalidArgumentException(sprintf('Path "%s" is not readable.', $path));
}
if (false === $handle = @fopen($path, 'r', false)) {
throw new InvalidArgumentException(sprintf('Unable to open path "%s".', $path));
}
if (!is_file($path)) {
$cache = fopen('php://temp', 'r+');
stream_copy_to_stream($handle, $cache);
$handle = $cache;
}
$p = new self($handle, $name ?: basename($path), $contentType);
$p->handle = $handle;

View File

@ -20,6 +20,7 @@ use Symfony\Component\Serializer\Encoder\JsonEncoder;
use Symfony\Component\Serializer\Encoder\XmlEncoder;
use Symfony\Component\Serializer\Exception\ExtraAttributesException;
use Symfony\Component\Serializer\Exception\LogicException;
use Symfony\Component\Serializer\Exception\MissingConstructorArgumentsException;
use Symfony\Component\Serializer\Exception\NotNormalizableValueException;
use Symfony\Component\Serializer\Exception\RuntimeException;
use Symfony\Component\Serializer\Mapping\AttributeMetadataInterface;
@ -370,7 +371,7 @@ abstract class AbstractObjectNormalizer extends AbstractNormalizer
}
}
if (!empty($extraAttributes)) {
if ($extraAttributes) {
throw new ExtraAttributesException($extraAttributes);
}
@ -395,6 +396,8 @@ abstract class AbstractObjectNormalizer extends AbstractNormalizer
* @return mixed
*
* @throws NotNormalizableValueException
* @throws ExtraAttributesException
* @throws MissingConstructorArgumentsException
* @throws LogicException
*/
private function validateAndDenormalize(string $currentClass, string $attribute, $data, ?string $format, array $context)
@ -405,6 +408,8 @@ abstract class AbstractObjectNormalizer extends AbstractNormalizer
$expectedTypes = [];
$isUnionType = \count($types) > 1;
$extraAttributesException = null;
$missingConstructorArgumentException = null;
foreach ($types as $type) {
if (null === $data && $type->isNullable()) {
return null;
@ -494,7 +499,31 @@ abstract class AbstractObjectNormalizer extends AbstractNormalizer
if (!$isUnionType) {
throw $e;
}
} catch (ExtraAttributesException $e) {
if (!$isUnionType) {
throw $e;
}
if (!$extraAttributesException) {
$extraAttributesException = $e;
}
} catch (MissingConstructorArgumentsException $e) {
if (!$isUnionType) {
throw $e;
}
if (!$missingConstructorArgumentException) {
$missingConstructorArgumentException = $e;
}
}
}
if ($extraAttributesException) {
throw $extraAttributesException;
}
if ($missingConstructorArgumentException) {
throw $missingConstructorArgumentException;
}
if ($context[self::DISABLE_TYPE_ENFORCEMENT] ?? $this->defaultContext[self::DISABLE_TYPE_ENFORCEMENT] ?? false) {

View File

@ -30,12 +30,6 @@ trait ServiceSubscriberTrait
*/
public static function getSubscribedServices(): array
{
static $services;
if (null !== $services) {
return $services;
}
$services = method_exists(get_parent_class(self::class) ?: '', __FUNCTION__) ? parent::getSubscribedServices() : [];
$attributeOptIn = false;

View File

@ -362,7 +362,7 @@ class TranslatorTest extends TestCase
foreach ($matrix as $langCode => $data) {
$indexes = array_flip($data);
if ($expectSuccess) {
$this->assertEquals($nplural, \count($indexes), "Langcode '$langCode' has '$nplural' plural forms.");
$this->assertCount($nplural, $indexes, "Langcode '$langCode' has '$nplural' plural forms.");
} else {
$this->assertNotEquals((int) $nplural, \count($indexes), "Langcode '$langCode' has '$nplural' plural forms.");
}

View File

@ -220,7 +220,7 @@
</trans-unit>
<trans-unit id="58">
<source>Unsupported card type or invalid card number.</source>
<target>Nicht unterstützer Kartentyp oder ungültige Kartennummer.</target>
<target>Nicht unterstützter Kartentyp oder ungültige Kartennummer.</target>
</trans-unit>
<trans-unit id="59">
<source>This is not a valid International Bank Account Number (IBAN).</source>
@ -312,7 +312,7 @@
</trans-unit>
<trans-unit id="81">
<source>This is not a valid Business Identifier Code (BIC).</source>
<target>Dieser Wert ist kein gültiger BIC.</target>
<target>Dieser Wert ist keine gültige internationale Bankleitzahl (BIC).</target>
</trans-unit>
<trans-unit id="82">
<source>Error</source>