diff --git a/src/Composer/Json/JsonFile.php b/src/Composer/Json/JsonFile.php index 95ae95ea2..1b662fa91 100644 --- a/src/Composer/Json/JsonFile.php +++ b/src/Composer/Json/JsonFile.php @@ -180,15 +180,15 @@ class JsonFile { $content = file_get_contents($this->path); $data = json_decode($content); - $requiredSchemaData = array(); if (null === $data && 'null' !== $content) { self::validateSyntax($content, $this->path); } + $isComposerSchemaFile = false; if (null === $schemaFile) { + $isComposerSchemaFile = true; $schemaFile = __DIR__ . self::COMPOSER_SCHEMA_PATH; - $requiredSchemaData = array('name', 'description'); } // Prepend with file:// only when not using a special schema already (e.g. in the phar) @@ -198,16 +198,17 @@ class JsonFile $schemaData = (object) array('$ref' => $schemaFile); - if ($schema !== self::LAX_SCHEMA) { + if ($schema === self::LAX_SCHEMA) { + $schemaData->additionalProperties = true; + $schemaData->required = array(); + } elseif ($schema === self::STRICT_SCHEMA && $isComposerSchemaFile) { $schemaData->additionalProperties = false; - $schemaData->required = $requiredSchemaData; + $schemaData->required = array('name', 'description'); } $validator = new Validator(); $validator->check($data, $schemaData); - // TODO add more validation like check version constraints and such, perhaps build that into the arrayloader? - if (!$validator->isValid()) { $errors = array(); foreach ((array) $validator->getErrors() as $error) {