diff options
| author | Bitflash <btf01@proton.me> | 2026-08-03 10:33:07 -0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-08-03 10:33:07 -0300 |
| commit | 5e37647023463cec4331dc48dc360ba60b22c888 (patch) | |
| tree | 5969cf8ad06ffbd9bd9d0a35cf60149774cf8a57 /src/proxy.cpp | |
| parent | 4b2416b7315d76a2abd1a0ac0b72b3d1ef0ff6c6 (diff) | |
gui: read the Finish condition once, before the button that clears it (#118)
Creating a recovery phrase from the window aborted with an ImGui
assertion on the success path:
Expression: (g.DisabledStackSize > 0) && "Calling EndDisabled() too many times!"
File: imgui/imgui.cpp Line: 8435
The Finish button is wrapped in BeginDisabled/EndDisabled guarded by
!g_phraseWrittenDown, and its own click handler sets g_phraseWrittenDown
to false. So the pair was opened while the checkbox was ticked and
closed after the handler had unticked it: BeginDisabled was never
called, EndDisabled was, and ImGui asserted on the unmatched close.
It fires on the only path that installs a seed -- tick the box, press
Finish -- so every phrase created from the window has hit it since the
feature shipped in 1.2.12. Three releases carried it because nothing
tests the window.
Reproduced on the published 1.2.14 binary and confirmed fixed on this
build, driving the real window: Wallet Safety -> Create recovery phrase
-> tick -> Finish. The old build raises the assertion; the fixed build
closes the dialog, reports "This wallet has a recovery phrase", and the
address changes to a derived one.
The seed itself was already written before the assertion, so the wallet
was never left half-installed -- and ImGui's IM_ASSERT_USER_ERROR_RET
returns before touching its state, so answering Ignore was safe. Abort
was not: it kills the process with no DBFlush.
The restore dialog next door already does this correctly, copying the
condition into a local first. This makes the create dialog match.
Diffstat (limited to 'src/proxy.cpp')
0 files changed, 0 insertions, 0 deletions