From 043f73ea877e1ee75be4ded9073593bce916aa8c Mon Sep 17 00:00:00 2001 From: Nicolas Meienberger Date: Fri, 21 Nov 2025 18:25:27 +0100 Subject: [PATCH] fix: properly decode path to support all special unicode characters --- app/server/modules/repositories/repositories.controller.ts | 3 ++- app/server/utils/restic.ts | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/app/server/modules/repositories/repositories.controller.ts b/app/server/modules/repositories/repositories.controller.ts index 2cda998..e4ed4fc 100644 --- a/app/server/modules/repositories/repositories.controller.ts +++ b/app/server/modules/repositories/repositories.controller.ts @@ -123,7 +123,8 @@ export const repositoriesController = new Hono() const { name, snapshotId } = c.req.param(); const { path } = c.req.valid("query"); - const result = await repositoriesService.listSnapshotFiles(name, snapshotId, path); + const decodedPath = path ? decodeURIComponent(path) : undefined; + const result = await repositoriesService.listSnapshotFiles(name, snapshotId, decodedPath); c.header("Cache-Control", "max-age=300, stale-while-revalidate=600"); diff --git a/app/server/utils/restic.ts b/app/server/utils/restic.ts index ac91316..97146d8 100644 --- a/app/server/utils/restic.ts +++ b/app/server/utils/restic.ts @@ -565,7 +565,7 @@ const ls = async (config: RepositoryConfig, snapshotId: string, path?: string) = addRepoSpecificArgs(args, config, env); - const res = await $`restic ${args}`.env(env).nothrow().quiet(); + const res = await safeSpawn({ command: "restic", args, env }); await cleanupTemporaryKeys(config, env); if (res.exitCode !== 0) { @@ -574,7 +574,7 @@ const ls = async (config: RepositoryConfig, snapshotId: string, path?: string) = } // The output is a stream of JSON objects, first is snapshot info, rest are file/dir nodes - const stdout = res.text(); + const stdout = res.stdout; const lines = stdout .trim() .split("\n")