diff --git a/src/languageservice/parser/jsonParser07.ts b/src/languageservice/parser/jsonParser07.ts index 06f5b60db..f548657f0 100644 --- a/src/languageservice/parser/jsonParser07.ts +++ b/src/languageservice/parser/jsonParser07.ts @@ -610,6 +610,11 @@ function validate( return; } + // schema should be an Object + if (typeof schema !== 'object') { + return; + } + if (!schema.url) { schema.url = originalSchema.url; } diff --git a/src/languageservice/services/yamlSchemaService.ts b/src/languageservice/services/yamlSchemaService.ts index 04a7aec8d..a28a92376 100644 --- a/src/languageservice/services/yamlSchemaService.ts +++ b/src/languageservice/services/yamlSchemaService.ts @@ -379,7 +379,7 @@ export class YAMLSchemaService extends JSONSchemaService { const highestPrioSchemas = this.highestPrioritySchemas(schemas); const schemaHandle = super.createCombinedSchema(resource, highestPrioSchemas); return schemaHandle.getResolvedSchema().then((schema) => { - if (schema.schema && typeof schema.schema !== 'string') { + if (schema.schema && typeof schema.schema === 'object') { schema.schema.url = schemaHandle.url; } diff --git a/test/schemaValidation.test.ts b/test/schemaValidation.test.ts index 5e92a6371..8b92d331b 100644 --- a/test/schemaValidation.test.ts +++ b/test/schemaValidation.test.ts @@ -1560,6 +1560,15 @@ obj: }); describe('Bug fixes', () => { + it('should handle not valid schema object', async () => { + const schema = 'Foo'; + languageService.addSchema(SCHEMA_ID, schema as JSONSchema); + const content = `foo: bar`; + const result = await parseSetup(content); + expect(result).to.be.empty; + expect(telemetry.messages).to.be.empty; + }); + it('should handle bad schema refs', async () => { const schema = { type: 'object',