From df9e447aa3cb45dd61a728401bc89c269a3598f4 Mon Sep 17 00:00:00 2001 From: Raman Savitski Date: Fri, 27 Nov 2020 19:20:32 +0300 Subject: [PATCH] Backquote/backtick symbol (`) is not escaped correctly --- src/openApi/v2/parser/escapeDescription.spec.ts | 9 +++++++++ src/openApi/v2/parser/escapeDescription.ts | 3 +++ src/openApi/v2/parser/getOperationErrors.ts | 3 ++- src/openApi/v3/parser/escapeDescription.spec.ts | 9 +++++++++ src/openApi/v3/parser/escapeDescription.ts | 3 +++ src/openApi/v3/parser/getOperationErrors.ts | 3 ++- 6 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 src/openApi/v2/parser/escapeDescription.spec.ts create mode 100644 src/openApi/v2/parser/escapeDescription.ts create mode 100644 src/openApi/v3/parser/escapeDescription.spec.ts create mode 100644 src/openApi/v3/parser/escapeDescription.ts diff --git a/src/openApi/v2/parser/escapeDescription.spec.ts b/src/openApi/v2/parser/escapeDescription.spec.ts new file mode 100644 index 00000000..1196a813 --- /dev/null +++ b/src/openApi/v2/parser/escapeDescription.spec.ts @@ -0,0 +1,9 @@ +import { escapeDescription } from './escapeDescription'; + +describe('escapeDescription', () => { + it('should escape', () => { + expect(escapeDescription('')).toEqual(''); + expect(escapeDescription('fooBar')).toEqual('fooBar'); + expect(escapeDescription('foo `test` bar')).toEqual('foo \\`test\\` bar'); + }); +}); diff --git a/src/openApi/v2/parser/escapeDescription.ts b/src/openApi/v2/parser/escapeDescription.ts new file mode 100644 index 00000000..fc87533a --- /dev/null +++ b/src/openApi/v2/parser/escapeDescription.ts @@ -0,0 +1,3 @@ +export function escapeDescription(value: string): string { + return value.replace(/`/g, '\\`'); +} diff --git a/src/openApi/v2/parser/getOperationErrors.ts b/src/openApi/v2/parser/getOperationErrors.ts index 9703f91b..31a742c8 100644 --- a/src/openApi/v2/parser/getOperationErrors.ts +++ b/src/openApi/v2/parser/getOperationErrors.ts @@ -1,5 +1,6 @@ import type { OperationError } from '../../../client/interfaces/OperationError'; import type { OperationResponse } from '../../../client/interfaces/OperationResponse'; +import { escapeDescription } from './escapeDescription'; export function getOperationErrors(operationResponses: OperationResponse[]): OperationError[] { return operationResponses @@ -8,6 +9,6 @@ export function getOperationErrors(operationResponses: OperationResponse[]): Ope }) .map(response => ({ code: response.code, - description: response.description!, + description: escapeDescription(response.description!), })); } diff --git a/src/openApi/v3/parser/escapeDescription.spec.ts b/src/openApi/v3/parser/escapeDescription.spec.ts new file mode 100644 index 00000000..1196a813 --- /dev/null +++ b/src/openApi/v3/parser/escapeDescription.spec.ts @@ -0,0 +1,9 @@ +import { escapeDescription } from './escapeDescription'; + +describe('escapeDescription', () => { + it('should escape', () => { + expect(escapeDescription('')).toEqual(''); + expect(escapeDescription('fooBar')).toEqual('fooBar'); + expect(escapeDescription('foo `test` bar')).toEqual('foo \\`test\\` bar'); + }); +}); diff --git a/src/openApi/v3/parser/escapeDescription.ts b/src/openApi/v3/parser/escapeDescription.ts new file mode 100644 index 00000000..fc87533a --- /dev/null +++ b/src/openApi/v3/parser/escapeDescription.ts @@ -0,0 +1,3 @@ +export function escapeDescription(value: string): string { + return value.replace(/`/g, '\\`'); +} diff --git a/src/openApi/v3/parser/getOperationErrors.ts b/src/openApi/v3/parser/getOperationErrors.ts index 9703f91b..31a742c8 100644 --- a/src/openApi/v3/parser/getOperationErrors.ts +++ b/src/openApi/v3/parser/getOperationErrors.ts @@ -1,5 +1,6 @@ import type { OperationError } from '../../../client/interfaces/OperationError'; import type { OperationResponse } from '../../../client/interfaces/OperationResponse'; +import { escapeDescription } from './escapeDescription'; export function getOperationErrors(operationResponses: OperationResponse[]): OperationError[] { return operationResponses @@ -8,6 +9,6 @@ export function getOperationErrors(operationResponses: OperationResponse[]): Ope }) .map(response => ({ code: response.code, - description: response.description!, + description: escapeDescription(response.description!), })); }