diff --git a/src/Composer/Package/Loader/ValidatingArrayLoader.php b/src/Composer/Package/Loader/ValidatingArrayLoader.php index 2a817d2d56bd..5d0611244094 100644 --- a/src/Composer/Package/Loader/ValidatingArrayLoader.php +++ b/src/Composer/Package/Loader/ValidatingArrayLoader.php @@ -352,10 +352,10 @@ public function load(array $config, string $class = 'Composer\Package\CompletePa if ($srcType === 'source' && !isset($this->config[$srcType]['reference'])) { $this->errors[] = $srcType . '.reference : must be present'; } - if (!is_string($this->config[$srcType]['type'])) { + if (isset($this->config[$srcType]['type']) && !is_string($this->config[$srcType]['type'])) { $this->errors[] = $srcType . '.type : should be a string, '.gettype($this->config[$srcType]['type']).' given'; } - if (!is_string($this->config[$srcType]['url'])) { + if (isset($this->config[$srcType]['url']) && !is_string($this->config[$srcType]['url'])) { $this->errors[] = $srcType . '.url : should be a string, '.gettype($this->config[$srcType]['url']).' given'; } if (isset($this->config[$srcType]['reference']) && !is_string($this->config[$srcType]['reference']) && !is_int($this->config[$srcType]['reference'])) { @@ -364,7 +364,7 @@ public function load(array $config, string $class = 'Composer\Package\CompletePa if (isset($this->config[$srcType]['reference']) && Preg::isMatch('{^\s*-}', (string) $this->config[$srcType]['reference'])) { $this->errors[] = $srcType . '.reference : must not start with a "-", "'.$this->config[$srcType]['reference'].'" given'; } - if (Preg::isMatch('{^\s*-}', $this->config[$srcType]['url'])) { + if (isset($this->config[$srcType]['url']) && Preg::isMatch('{^\s*-}', (string) $this->config[$srcType]['url'])) { $this->errors[] = $srcType . '.url : must not start with a "-", "'.$this->config[$srcType]['url'].'" given'; } } diff --git a/tests/Composer/Test/Package/Loader/ValidatingArrayLoaderTest.php b/tests/Composer/Test/Package/Loader/ValidatingArrayLoaderTest.php index fd105f7e1329..ad368bf24b82 100644 --- a/tests/Composer/Test/Package/Loader/ValidatingArrayLoaderTest.php +++ b/tests/Composer/Test/Package/Loader/ValidatingArrayLoaderTest.php @@ -417,6 +417,20 @@ public function errorProvider(): array 'require.foo/Bar : a package cannot set a require on itself', ), ), + array( + array( + 'name' => 'foo/bar', + 'source' => array('url' => 1), + 'dist' => array('url' => null), + ), + array( + 'source.type : must be present', + 'source.url : should be a string, integer given', + 'source.reference : must be present', + 'dist.type : must be present', + 'dist.url : must be present', + ), + ), )); }