From beff0928187e8bec8e08109258cb2a342342ce7c Mon Sep 17 00:00:00 2001 From: adlee-was-taken Date: Mon, 27 Apr 2026 19:12:22 -0400 Subject: [PATCH] fix(ext/setup): lock verified handle on Step 5 error + early-return paths Mirrors Step 3b's discipline. Previously, if save_setup failed or addDevice threw, state.verifiedHandle (the WASM session from Step 3b) would remain in linear memory until tab close. Now lock+null on every exit path. Co-Authored-By: Claude Opus 4.7 --- extension/src/setup/setup.ts | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/extension/src/setup/setup.ts b/extension/src/setup/setup.ts index e250189..db73702 100644 --- a/extension/src/setup/setup.ts +++ b/extension/src/setup/setup.ts @@ -1142,7 +1142,14 @@ function attachStep5(): void { }, ); }); - if (!saveOk) { render(); return; } + if (!saveOk) { + if (state.verifiedHandle !== null) { + try { w.lock(state.verifiedHandle); } catch { /* best effort */ } + state.verifiedHandle = null; + } + render(); + return; + } // 3) Register device on the remote (read-modify-write devices.json). const hostUrl = state.hostType === 'github' ? 'https://api.github.com' : state.hostUrl; @@ -1164,6 +1171,10 @@ function attachStep5(): void { } catch (err: unknown) { console.error('[relicario setup] register device failed:', err); state.error = `Failed to register device: ${err instanceof Error ? err.message : String(err)}`; + if (state.verifiedHandle !== null) { + try { (await loadWasm()).lock(state.verifiedHandle); } catch { /* best effort */ } + state.verifiedHandle = null; + } render(); } });