Fix handling of variables, inputs, platforms, and options with spaces (#143)

* Properly handle variables, inputs, platforms, and options with spaces

Signed-off-by: Sanjula Ganepola <sanjulagane@gmail.com>

* Fix double quotes

Signed-off-by: Sanjula Ganepola <sanjulagane@gmail.com>

* Escape double quotes in act args

Signed-off-by: Sanjula Ganepola <sanjulagane@gmail.com>

* Potential fix for code scanning alert no. 1: Incomplete string escaping or encoding

Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>

* Rename func and update comment

Signed-off-by: Sanjula Ganepola <sanjulagane@gmail.com>

---------

Signed-off-by: Sanjula Ganepola <sanjulagane@gmail.com>
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
This commit is contained in:
Sanjula Ganepola
2025-01-19 13:26:54 -05:00
committed by GitHub
parent 69ea69182c
commit 0c8e056ed3
2 changed files with 12 additions and 4 deletions

View File

@@ -11,6 +11,7 @@ import { HistoryManager, HistoryStatus } from './historyManager';
import { SecretManager } from "./secretManager"; import { SecretManager } from "./secretManager";
import { SettingsManager } from './settingsManager'; import { SettingsManager } from './settingsManager';
import { StorageKey, StorageManager } from './storageManager'; import { StorageKey, StorageManager } from './storageManager';
import { Utils } from "./utils";
import { Job, Workflow, WorkflowsManager } from "./workflowsManager"; import { Job, Workflow, WorkflowsManager } from "./workflowsManager";
export enum Event { export enum Event {
@@ -629,13 +630,13 @@ export class Act {
const userOptions: string[] = [ const userOptions: string[] = [
...settings.secrets.map(secret => `${Option.Secret} ${secret.key}`), ...settings.secrets.map(secret => `${Option.Secret} ${secret.key}`),
(settings.secretFiles.length > 0 ? `${Option.SecretFile} "${settings.secretFiles[0].path}"` : `${Option.SecretFile} ""`), (settings.secretFiles.length > 0 ? `${Option.SecretFile} "${settings.secretFiles[0].path}"` : `${Option.SecretFile} ""`),
...settings.variables.map(variable => `${Option.Var} ${variable.key}=${variable.value}`), ...settings.variables.map(variable => `${Option.Var} ${variable.key}="${Utils.escapeSpecialCharacters(variable.value)}"`),
(settings.variableFiles.length > 0 ? `${Option.VarFile} "${settings.variableFiles[0].path}"` : `${Option.VarFile} ""`), (settings.variableFiles.length > 0 ? `${Option.VarFile} "${settings.variableFiles[0].path}"` : `${Option.VarFile} ""`),
...settings.inputs.map(input => `${Option.Input} ${input.key}=${input.value}`), ...settings.inputs.map(input => `${Option.Input} ${input.key}="${Utils.escapeSpecialCharacters(input.value)}"`),
(settings.inputFiles.length > 0 ? `${Option.InputFile} "${settings.inputFiles[0].path}"` : `${Option.InputFile} ""`), (settings.inputFiles.length > 0 ? `${Option.InputFile} "${settings.inputFiles[0].path}"` : `${Option.InputFile} ""`),
...settings.runners.map(runner => `${Option.Platform} ${runner.key}=${runner.value}`), ...settings.runners.map(runner => `${Option.Platform} ${runner.key}="${Utils.escapeSpecialCharacters(runner.value)}"`),
(settings.payloadFiles.length > 0 ? `${Option.EventPath} "${settings.payloadFiles[0].path}"` : `${Option.EventPath} ""`), (settings.payloadFiles.length > 0 ? `${Option.EventPath} "${settings.payloadFiles[0].path}"` : `${Option.EventPath} ""`),
...settings.options.map(option => option.path ? `--${option.name}${option.default && ['true', 'false'].includes(option.default) ? "=" : " "}${option.path}` : `--${option.name}`) ...settings.options.map(option => option.path ? `--${option.name}${option.default && ['true', 'false'].includes(option.default) ? "=" : " "}"${Utils.escapeSpecialCharacters(option.path)}"` : `--${option.name}`)
]; ];
const command = `${actCommand} ${Option.Json} ${Option.Verbose} ${commandArgs.options.join(' ')} ${userOptions.join(' ')}`; const command = `${actCommand} ${Option.Json} ${Option.Verbose} ${commandArgs.options.join(' ')} ${userOptions.join(' ')}`;

View File

@@ -56,4 +56,11 @@ export namespace Utils {
} }
} }
} }
/**
* Escape all backslashes and double quotes.
*/
export function escapeSpecialCharacters(input: string): string {
return input.replace(/\\/g, '\\\\').replace(/"/g, '\\"');
}
} }