From 54e413572af24ede921017f1a875fbc749b3c28d Mon Sep 17 00:00:00 2001 From: davidramnero Date: Fri, 5 Jun 2026 14:48:32 +0200 Subject: [PATCH 1/3] fix/ #59 resolve paths for all paths in arguments --- src/extension.ts | 6 +++--- src/util/path.ts | 7 +++++++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index 06269a2..319ba7d 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -5,7 +5,7 @@ import * as xml2js from 'xml2js'; import { documentationLinkMap } from './util/documentation'; import { runCommand } from './util/scripts'; -import { resolvePath, findWorkspaceRoot } from './util/path'; +import { isPath, resolvePath, findWorkspaceRoot } from './util/path'; enum SeverityNumber { Info = 0, @@ -187,8 +187,8 @@ async function runCppcheckOnFileXML( // Resolve paths for arguments where applicable const argsParsed = processedArgs.split(" ").map((arg) => { - if (arg.startsWith('--project')) { - const splitArg = arg.split('='); + const splitArg = arg.split('='); + if (isPath(splitArg[1])) { return `${splitArg[0]}=${resolvePath(splitArg[1])}`; } return arg; diff --git a/src/util/path.ts b/src/util/path.ts index fca6082..3323a7c 100644 --- a/src/util/path.ts +++ b/src/util/path.ts @@ -2,6 +2,13 @@ import * as path from "path"; import * as os from "os"; import * as vscode from 'vscode'; +export function isPath(arg: string): boolean { + if (arg.includes('/') || arg.includes('\\')) { + return true; + } + return false; +} + export function findWorkspaceRoot(): string { const folders = vscode.workspace.workspaceFolders; const workspaceRoot = folders && folders.length > 0 From 017e0f76e7e54dcfd4be0dc99679ab02bf8760f0 Mon Sep 17 00:00:00 2001 From: davidramnero Date: Fri, 5 Jun 2026 15:12:22 +0200 Subject: [PATCH 2/3] made determination of path arguments more secure --- src/extension.ts | 16 +++++++++++++--- src/util/path.ts | 9 +++++++-- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index 319ba7d..4502e62 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -5,7 +5,7 @@ import * as xml2js from 'xml2js'; import { documentationLinkMap } from './util/documentation'; import { runCommand } from './util/scripts'; -import { isPath, resolvePath, findWorkspaceRoot } from './util/path'; +import { looksLikePath, resolvePath, findWorkspaceRoot } from './util/path'; enum SeverityNumber { Info = 0, @@ -30,6 +30,14 @@ const criticalWarningTypes = [ 'unknownMacro' ]; +const pathVariableArgs = [ + '--project', + '--addon', + '--suppressions-list', + '--include', + '--rule-file', +]; + function parseSeverity(str: string): vscode.DiagnosticSeverity { const lower = str.toLowerCase(); if (lower.includes("error")) { @@ -187,8 +195,10 @@ async function runCppcheckOnFileXML( // Resolve paths for arguments where applicable const argsParsed = processedArgs.split(" ").map((arg) => { - const splitArg = arg.split('='); - if (isPath(splitArg[1])) { + if (pathVariableArgs.some((a) => { arg.startsWith(a);}) + && looksLikePath(arg) + ) { + const splitArg = arg.split('='); return `${splitArg[0]}=${resolvePath(splitArg[1])}`; } return arg; diff --git a/src/util/path.ts b/src/util/path.ts index 3323a7c..08602e9 100644 --- a/src/util/path.ts +++ b/src/util/path.ts @@ -2,8 +2,13 @@ import * as path from "path"; import * as os from "os"; import * as vscode from 'vscode'; -export function isPath(arg: string): boolean { - if (arg.includes('/') || arg.includes('\\')) { +export function looksLikePath(arg: string): boolean { + if ( + arg.includes('/') + || arg.includes('\\') + || arg.startsWith('.') + || /\.[^/\\]+$/.test(arg) // filename with extension + ) { return true; } return false; From bdb17ec7543f197da9b91bea03ec9105fe34c4e1 Mon Sep 17 00:00:00 2001 From: davidramnero Date: Fri, 5 Jun 2026 15:29:48 +0200 Subject: [PATCH 3/3] some formating --- src/extension.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index 4502e62..047b2d0 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -195,9 +195,9 @@ async function runCppcheckOnFileXML( // Resolve paths for arguments where applicable const argsParsed = processedArgs.split(" ").map((arg) => { - if (pathVariableArgs.some((a) => { arg.startsWith(a);}) - && looksLikePath(arg) - ) { + const isPathArgument = pathVariableArgs.some(a => arg.startsWith(a)); + // Some arguments such as addon may be either a path or the name of a built in addon + if (isPathArgument && looksLikePath(arg)) { const splitArg = arg.split('='); return `${splitArg[0]}=${resolvePath(splitArg[1])}`; }