From 2fc2bdcf505875889f13fb8acf4930be1fe7fdeb Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Tue, 17 Dec 2024 19:08:25 +0000 Subject: [PATCH 1/3] Harden `sanitizeLog` against incorrect matches on TypeScript versions. --- src/harness/tsserverLogger.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/harness/tsserverLogger.ts b/src/harness/tsserverLogger.ts index 1ac20125b8df0..b0ff1d63a43c5 100644 --- a/src/harness/tsserverLogger.ts +++ b/src/harness/tsserverLogger.ts @@ -111,7 +111,7 @@ export function sanitizeLog(s: string): string { s = s.replace(/Elapsed::?\s*\d+(?:\.\d+)?ms/g, "Elapsed:: *ms"); s = s.replace(/"updateGraphDurationMs":\s*\d+(?:\.\d+)?/g, `"updateGraphDurationMs": *`); s = s.replace(/"createAutoImportProviderProgramDurationMs":\s*\d+(?:\.\d+)?/g, `"createAutoImportProviderProgramDurationMs": *`); - s = replaceAll(s, ts.version, "FakeVersion"); + s = s.replace(new RegExp(`\\b${ts.version}\\b`, "g"), "FakeVersion"); s = s.replace(/getCompletionData: Get current token: \d+(?:\.\d+)?/g, `getCompletionData: Get current token: *`); s = s.replace(/getCompletionData: Is inside comment: \d+(?:\.\d+)?/g, `getCompletionData: Is inside comment: *`); s = s.replace(/getCompletionData: Get previous token: \d+(?:\.\d+)?/g, `getCompletionData: Get previous token: *`); @@ -130,7 +130,7 @@ export function sanitizeLog(s: string): string { s = s.replace(/"semanticDiag":\s*\d+(?:.\d+)?/g, `"semanticDiag": *`); s = s.replace(/"suggestionDiag":\s*\d+(?:.\d+)?/g, `"suggestionDiag": *`); s = s.replace(/"regionSemanticDiag":\s*\d+(?:.\d+)?/g, `"regionSemanticDiag": *`); - s = replaceAll(s, `@ts${ts.versionMajorMinor}`, `@tsFakeMajor.Minor`); + s = s.replace(new RegExp(`\\b@ts${ts.versionMajorMinor}\\b`, "g"), `@tsFakeMajor.Minor`); s = sanitizeHarnessLSException(s); return s; } From 30b13f8d6a46db5193dfa69c98a391f3b86dd229 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Tue, 17 Dec 2024 11:57:09 -0800 Subject: [PATCH 2/3] Escape versions. Co-authored-by: Andrew Branch --- src/harness/tsserverLogger.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/harness/tsserverLogger.ts b/src/harness/tsserverLogger.ts index b0ff1d63a43c5..bcf43f482b8d1 100644 --- a/src/harness/tsserverLogger.ts +++ b/src/harness/tsserverLogger.ts @@ -111,7 +111,7 @@ export function sanitizeLog(s: string): string { s = s.replace(/Elapsed::?\s*\d+(?:\.\d+)?ms/g, "Elapsed:: *ms"); s = s.replace(/"updateGraphDurationMs":\s*\d+(?:\.\d+)?/g, `"updateGraphDurationMs": *`); s = s.replace(/"createAutoImportProviderProgramDurationMs":\s*\d+(?:\.\d+)?/g, `"createAutoImportProviderProgramDurationMs": *`); - s = s.replace(new RegExp(`\\b${ts.version}\\b`, "g"), "FakeVersion"); + s = s.replace(new RegExp(`\\b${regExpEscape(ts.version)}\\b`, "g"), "FakeVersion"); s = s.replace(/getCompletionData: Get current token: \d+(?:\.\d+)?/g, `getCompletionData: Get current token: *`); s = s.replace(/getCompletionData: Is inside comment: \d+(?:\.\d+)?/g, `getCompletionData: Is inside comment: *`); s = s.replace(/getCompletionData: Get previous token: \d+(?:\.\d+)?/g, `getCompletionData: Get previous token: *`); @@ -130,7 +130,8 @@ export function sanitizeLog(s: string): string { s = s.replace(/"semanticDiag":\s*\d+(?:.\d+)?/g, `"semanticDiag": *`); s = s.replace(/"suggestionDiag":\s*\d+(?:.\d+)?/g, `"suggestionDiag": *`); s = s.replace(/"regionSemanticDiag":\s*\d+(?:.\d+)?/g, `"regionSemanticDiag": *`); - s = s.replace(new RegExp(`\\b@ts${ts.versionMajorMinor}\\b`, "g"), `@tsFakeMajor.Minor`); + s = s.replace(new RegExp(`\\b@ts${regExpEscape(ts.versionMajorMinor)}\\b`, "g"), `@tsFakeMajor.Minor`); + s = sanitizeHarnessLSException(s); return s; } From b7dcebada6f71aa4bcf82160a3e6afc87ede68bb Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Tue, 17 Dec 2024 20:13:07 +0000 Subject: [PATCH 3/3] Qualify. --- src/harness/tsserverLogger.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/harness/tsserverLogger.ts b/src/harness/tsserverLogger.ts index bcf43f482b8d1..5eceaff711711 100644 --- a/src/harness/tsserverLogger.ts +++ b/src/harness/tsserverLogger.ts @@ -111,7 +111,7 @@ export function sanitizeLog(s: string): string { s = s.replace(/Elapsed::?\s*\d+(?:\.\d+)?ms/g, "Elapsed:: *ms"); s = s.replace(/"updateGraphDurationMs":\s*\d+(?:\.\d+)?/g, `"updateGraphDurationMs": *`); s = s.replace(/"createAutoImportProviderProgramDurationMs":\s*\d+(?:\.\d+)?/g, `"createAutoImportProviderProgramDurationMs": *`); - s = s.replace(new RegExp(`\\b${regExpEscape(ts.version)}\\b`, "g"), "FakeVersion"); + s = s.replace(new RegExp(`\\b${ts.regExpEscape(ts.version)}\\b`, "g"), "FakeVersion"); s = s.replace(/getCompletionData: Get current token: \d+(?:\.\d+)?/g, `getCompletionData: Get current token: *`); s = s.replace(/getCompletionData: Is inside comment: \d+(?:\.\d+)?/g, `getCompletionData: Is inside comment: *`); s = s.replace(/getCompletionData: Get previous token: \d+(?:\.\d+)?/g, `getCompletionData: Get previous token: *`); @@ -130,7 +130,7 @@ export function sanitizeLog(s: string): string { s = s.replace(/"semanticDiag":\s*\d+(?:.\d+)?/g, `"semanticDiag": *`); s = s.replace(/"suggestionDiag":\s*\d+(?:.\d+)?/g, `"suggestionDiag": *`); s = s.replace(/"regionSemanticDiag":\s*\d+(?:.\d+)?/g, `"regionSemanticDiag": *`); - s = s.replace(new RegExp(`\\b@ts${regExpEscape(ts.versionMajorMinor)}\\b`, "g"), `@tsFakeMajor.Minor`); + s = s.replace(new RegExp(`\\b@ts${ts.regExpEscape(ts.versionMajorMinor)}\\b`, "g"), `@tsFakeMajor.Minor`); s = sanitizeHarnessLSException(s); return s;