From 04330a0a4d5a2c4f89cd5c3cbd0b7e22d84a7f6c Mon Sep 17 00:00:00 2001 From: Sven Grossmann Date: Tue, 6 Jun 2023 11:25:56 +0200 Subject: [PATCH] [v10.0.x] Loki: Fix parsing of escaped quotes in LogQL (#69584) (#69615) Loki: Fix parsing of escaped quotes in LogQL (#69584) * fix parsing issue * replace escaped quotes (cherry picked from commit a81cee1d05ade7d09856ff4b7da1b6712382ee3e) --- .../loki/querybuilder/parsing.test.ts | 30 +++++++++++++++++++ .../datasource/loki/querybuilder/parsing.ts | 5 +++- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/public/app/plugins/datasource/loki/querybuilder/parsing.test.ts b/public/app/plugins/datasource/loki/querybuilder/parsing.test.ts index cb34da275cb..63fc180497a 100644 --- a/public/app/plugins/datasource/loki/querybuilder/parsing.test.ts +++ b/public/app/plugins/datasource/loki/querybuilder/parsing.test.ts @@ -76,6 +76,36 @@ describe('buildVisualQueryFromString', () => { ); }); + it('parses query with line filter and escaped quote', () => { + expect(buildVisualQueryFromString('{app="frontend"} |= "\\"line"')).toEqual( + noErrors({ + labels: [ + { + op: '=', + value: 'frontend', + label: 'app', + }, + ], + operations: [{ id: LokiOperationId.LineContains, params: ['"line'] }], + }) + ); + }); + + it('parses query with label filter and escaped quote', () => { + expect(buildVisualQueryFromString('{app="frontend"} | bar="\\"baz"')).toEqual( + noErrors({ + labels: [ + { + op: '=', + value: 'frontend', + label: 'app', + }, + ], + operations: [{ id: LokiOperationId.LabelFilter, params: ['bar', '=', '"baz'] }], + }) + ); + }); + it('returns error for query with ip matching line filter', () => { const context = buildVisualQueryFromString('{app="frontend"} |= ip("192.168.4.5/16") | logfmt'); expect(context).toEqual( diff --git a/public/app/plugins/datasource/loki/querybuilder/parsing.ts b/public/app/plugins/datasource/loki/querybuilder/parsing.ts index 9fbaa784c00..66947c05924 100644 --- a/public/app/plugins/datasource/loki/querybuilder/parsing.ts +++ b/public/app/plugins/datasource/loki/querybuilder/parsing.ts @@ -576,7 +576,10 @@ function isIntervalVariableError(node: SyntaxNode) { function handleQuotes(string: string) { if (string[0] === `"` && string[string.length - 1] === `"`) { - return string.replace(/"/g, '').replace(/\\\\/g, '\\'); + return string + .substring(1, string.length - 1) + .replace(/\\"/g, '"') + .replace(/\\\\/g, '\\'); } return string.replace(/`/g, ''); }