diff --git a/res/composer-schema.json b/res/composer-schema.json index a45574f77..bd04c5d5f 100644 --- a/res/composer-schema.json +++ b/res/composer-schema.json @@ -11,7 +11,8 @@ }, "type": { "description": "Package type, either 'library' for common packages, 'composer-plugin' for plugins, 'metapackage' for empty packages, or a custom type ([a-z0-9-]+) defined by whatever project this package applies to.", - "type": "string" + "type": "string", + "pattern": "^[a-z0-9-]+$" }, "target-dir": { "description": "DEPRECATED: Forces the package to be installed into the given subdirectory path. This is used for autoloading PSR-0 packages that do not contain their full path. Use forward slashes for cross-platform compatibility.", @@ -39,7 +40,8 @@ }, "version": { "type": "string", - "description": "Package version, see https://getcomposer.org/doc/04-schema.md#version for more info on valid schemes." + "description": "Package version, see https://getcomposer.org/doc/04-schema.md#version for more info on valid schemes.", + "pattern": "^v?\\d+(((\\.\\d+)?\\.\\d+)?\\.\\d+)?" }, "time": { "type": "string", diff --git a/src/Composer/Command/RequireCommand.php b/src/Composer/Command/RequireCommand.php index c922875f8..f2bd78b4b 100644 --- a/src/Composer/Command/RequireCommand.php +++ b/src/Composer/Command/RequireCommand.php @@ -100,7 +100,9 @@ EOT return 1; } - if (!is_readable($this->file)) { + // check for readability by reading the file as is_readable can not be trusted on network-mounts + // see https://github.com/composer/composer/issues/8231 and https://bugs.php.net/bug.php?id=68926 + if (!is_readable($this->file) && false === Silencer::call('file_get_contents', $this->file)) { $io->writeError(''.$this->file.' is not readable.'); return 1;