diff options
| author | Luke Parker <[email protected]> | 2026-03-09 20:26:53 +1000 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-03-09 20:26:53 +1000 |
| commit | f27ef595f65aa719be3f8d08665d683e95083ed3 (patch) | |
| tree | 052aa60b17e4ca671cda1f752ceff9865a280bee /packages/app/src/utils | |
| parent | 34328828ae9d28afe28202d8122a6983a6b2dc0f (diff) | |
| download | opencode-f27ef595f65aa719be3f8d08665d683e95083ed3.tar.gz opencode-f27ef595f65aa719be3f8d08665d683e95083ed3.zip | |
fix(app): sanitize workspace store filenames on Windows (#16703)
Diffstat (limited to 'packages/app/src/utils')
| -rw-r--r-- | packages/app/src/utils/persist.test.ts | 8 | ||||
| -rw-r--r-- | packages/app/src/utils/persist.ts | 3 |
2 files changed, 10 insertions, 1 deletions
diff --git a/packages/app/src/utils/persist.test.ts b/packages/app/src/utils/persist.test.ts index 2a2c349b7..673acd224 100644 --- a/packages/app/src/utils/persist.test.ts +++ b/packages/app/src/utils/persist.test.ts @@ -104,4 +104,12 @@ describe("persist localStorage resilience", () => { const result = persistTesting.normalize({ value: "ok" }, '{"value":"\\x"}') expect(result).toBeUndefined() }) + + test("workspace storage sanitizes Windows filename characters", () => { + const result = persistTesting.workspaceStorage("C:\\Users\\foo") + + expect(result).toStartWith("opencode.workspace.") + expect(result.endsWith(".dat")).toBeTrue() + expect(/[:\\/]/.test(result)).toBeFalse() + }) }) diff --git a/packages/app/src/utils/persist.ts b/packages/app/src/utils/persist.ts index 91c504742..bee2f3e7d 100644 --- a/packages/app/src/utils/persist.ts +++ b/packages/app/src/utils/persist.ts @@ -204,7 +204,7 @@ function normalize(defaults: unknown, raw: string, migrate?: (value: unknown) => } function workspaceStorage(dir: string) { - const head = dir.slice(0, 12) || "workspace" + const head = (dir.slice(0, 12) || "workspace").replace(/[^a-zA-Z0-9._-]/g, "-") const sum = checksum(dir) ?? "0" return `opencode.workspace.${head}.${sum}.dat` } @@ -300,6 +300,7 @@ export const PersistTesting = { localStorageDirect, localStorageWithPrefix, normalize, + workspaceStorage, } export const Persist = { |
