From 843352a40f3b09da2498dfb3dcc2cf95da03f334 Mon Sep 17 00:00:00 2001 From: Jinwoo-H Date: Sat, 30 May 2026 08:02:15 -0700 Subject: [PATCH] test: cover overlay cleanup refusal cases Co-authored-by: Orca --- src/main/pty/overlay-mirror.test.ts | 30 +++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/main/pty/overlay-mirror.test.ts b/src/main/pty/overlay-mirror.test.ts index 7ac92379702..49af0c51a4d 100644 --- a/src/main/pty/overlay-mirror.test.ts +++ b/src/main/pty/overlay-mirror.test.ts @@ -28,4 +28,34 @@ describe('safeRemoveOverlay', () => { expect(existsSync(overlayDir)).toBe(false) expect(warnSpy).not.toHaveBeenCalled() }) + + it('refuses to remove the overlay root itself', async () => { + const root = await mkdtemp(join(tmpdir(), 'orca-overlay-root-')) + tempRoots.push(root) + const marker = join(root, 'marker.txt') + writeFileSync(marker, 'root') + const warnSpy = vi.spyOn(console, 'warn').mockImplementation(() => {}) + + safeRemoveOverlay(root, root) + + expect(existsSync(marker)).toBe(true) + expect(warnSpy).toHaveBeenCalledOnce() + }) + + it('refuses parent traversal outside the overlay root', async () => { + const parent = await mkdtemp(join(tmpdir(), 'orca-overlay-parent-')) + tempRoots.push(parent) + const root = join(parent, 'root') + const outside = join(parent, 'outside') + mkdirSync(root) + mkdirSync(outside) + const marker = join(outside, 'marker.txt') + writeFileSync(marker, 'outside') + const warnSpy = vi.spyOn(console, 'warn').mockImplementation(() => {}) + + safeRemoveOverlay(join(root, '..', 'outside'), root) + + expect(existsSync(marker)).toBe(true) + expect(warnSpy).toHaveBeenCalledOnce() + }) })