From dc00bb67a9ef7861427f2d5eb86745f5775d1863 Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Mon, 25 Oct 2021 20:34:20 +0200 Subject: fix(web): only try to read properties of objects --- language-web/src/main/js/editor/xtextMessages.ts | 9 ++++++--- language-web/src/main/js/editor/xtextServiceResults.ts | 12 ++++++++---- 2 files changed, 14 insertions(+), 7 deletions(-) (limited to 'language-web/src/main/js') diff --git a/language-web/src/main/js/editor/xtextMessages.ts b/language-web/src/main/js/editor/xtextMessages.ts index d3cb9425..be3125e6 100644 --- a/language-web/src/main/js/editor/xtextMessages.ts +++ b/language-web/src/main/js/editor/xtextMessages.ts @@ -12,7 +12,8 @@ export interface IXtextWebOkResponse { export function isOkResponse(response: unknown): response is IXtextWebOkResponse { const okResponse = response as IXtextWebOkResponse; - return typeof okResponse.id === 'string' + return typeof okResponse === 'object' + && typeof okResponse.id === 'string' && typeof okResponse.response !== 'undefined'; } @@ -30,7 +31,8 @@ export interface IXtextWebErrorResponse { export function isErrorResponse(response: unknown): response is IXtextWebErrorResponse { const errorResponse = response as IXtextWebErrorResponse; - return typeof errorResponse.id === 'string' + return typeof errorResponse === 'object' + && typeof errorResponse.id === 'string' && typeof errorResponse.error === 'string' && VALID_XTEXT_WEB_ERROR_KINDS.includes(errorResponse.error) && typeof errorResponse.message === 'string'; @@ -48,7 +50,8 @@ export interface IXtextWebPushMessage { export function isPushMessage(response: unknown): response is IXtextWebPushMessage { const pushMessage = response as IXtextWebPushMessage; - return typeof pushMessage.resource === 'string' + return typeof pushMessage === 'object' + && typeof pushMessage.resource === 'string' && typeof pushMessage.stateId === 'string' && typeof pushMessage.service === 'string' && typeof pushMessage.push !== 'undefined'; diff --git a/language-web/src/main/js/editor/xtextServiceResults.ts b/language-web/src/main/js/editor/xtextServiceResults.ts index 8fa7a321..8a4afa40 100644 --- a/language-web/src/main/js/editor/xtextServiceResults.ts +++ b/language-web/src/main/js/editor/xtextServiceResults.ts @@ -4,7 +4,8 @@ export interface IPongResult { export function isPongResult(result: unknown): result is IPongResult { const pongResult = result as IPongResult; - return typeof pongResult.pong === 'string'; + return typeof pongResult === 'object' + && typeof pongResult.pong === 'string'; } export interface IDocumentStateResult { @@ -13,7 +14,8 @@ export interface IDocumentStateResult { export function isDocumentStateResult(result: unknown): result is IDocumentStateResult { const documentStateResult = result as IDocumentStateResult; - return typeof documentStateResult.stateId === 'string'; + return typeof documentStateResult === 'object' + && typeof documentStateResult.stateId === 'string'; } export const VALID_CONFLICTS = ['invalidStateId', 'canceled'] as const; @@ -50,7 +52,8 @@ export interface IIssue { export function isIssue(value: unknown): value is IIssue { const issue = value as IIssue; - return typeof issue.description === 'string' + return typeof issue === 'object' + && typeof issue.description === 'string' && typeof issue.severity === 'string' && VALID_SEVERITIES.includes(issue.severity) && typeof issue.line === 'number' @@ -65,6 +68,7 @@ export interface IValidationResult { export function isValidationResult(result: unknown): result is IValidationResult { const validationResult = result as IValidationResult; - return Array.isArray(validationResult.issues) + return typeof validationResult === 'object' + && Array.isArray(validationResult.issues) && validationResult.issues.every(isIssue); } -- cgit v1.2.3-54-g00ecf