Skip to content

Commit 2d209b0

Browse files
author
Eric Wheeler
committed
fix: restrict VSCode settings access and improve type safety
- Add allowlist for VSCode settings that can be modified - Add validation and error handling for setting updates - Revert value field to number-only type - Add dedicated vscodeSettingValue field with unknown type Signed-off-by: Eric Wheeler <[email protected]>
1 parent c14f027 commit 2d209b0

File tree

3 files changed

+15
-2
lines changed

3 files changed

+15
-2
lines changed

src/core/webview/webviewMessageHandler.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -592,11 +592,21 @@ export const webviewMessageHandler = async (provider: ClineProvider, message: We
592592
await updateGlobalState("fuzzyMatchThreshold", message.value)
593593
await provider.postStateToWebview()
594594
break
595-
case "updateVSCodeSetting":
595+
case "updateVSCodeSetting": {
596+
// Allowlist of VSCode settings that can be updated
597+
// Add new settings here when needed for future expansion
598+
const ALLOWED_VSCODE_SETTINGS = ["terminal.integrated.inheritEnv"] as const
599+
596600
if (message.setting && message.value !== undefined) {
601+
if (!ALLOWED_VSCODE_SETTINGS.includes(message.setting as (typeof ALLOWED_VSCODE_SETTINGS)[number])) {
602+
provider.log(`Attempted to update restricted VSCode setting: ${message.setting}`)
603+
vscode.window.showErrorMessage(`Cannot update restricted VSCode setting: ${message.setting}`)
604+
break
605+
}
597606
await vscode.workspace.getConfiguration().update(message.setting, message.value, true)
598607
}
599608
break
609+
}
600610
case "getVSCodeSetting":
601611
if (message.setting) {
602612
try {
@@ -608,6 +618,7 @@ export const webviewMessageHandler = async (provider: ClineProvider, message: We
608618
type: "vsCodeSetting",
609619
setting: message.setting,
610620
error: `Failed to get setting: ${error.message}`,
621+
value: undefined,
611622
})
612623
}
613624
}

src/shared/ExtensionMessage.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ export interface ExtensionMessage {
107107
error?: string
108108
setting?: string
109109
value?: any
110+
vscodeSettingValue?: unknown
110111
}
111112

112113
export type ExtensionState = Pick<

src/shared/WebviewMessage.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,8 @@ export interface WebviewMessage {
136136
apiConfiguration?: ApiConfiguration
137137
images?: string[]
138138
bool?: boolean
139-
value?: number | boolean | any // Allow number for most messages, boolean for VSCode settings
139+
value?: number
140+
vscodeSettingValue?: unknown
140141
commands?: string[]
141142
audioType?: AudioType
142143
serverName?: string

0 commit comments

Comments
 (0)