What changed, and why it matters
This commit fixes a user-interface bug in Electrum's QML (mobile-style) GUI that prevented users from opening wallets that have no password. Previously, the GUI would always ask for a password and reject an empty answer, making passwordless wallets impossible to open in many cases. The fix correctly distinguishes between 'no password provided' and 'an explicitly empty password was provided,' allowing passwordless wallets to open. This is a usability/functional bug, not a direct security vulnerability, though it could indirectly affect users who rely on passwordless wallets.
Treat as a normal bugfix. No urgent security action required. Users of the QML GUI who use passwordless wallets should update to benefit from the fix. Reviewers may want to verify that the fallback to self._password does not inadvertently use the wrong password in multi-wallet scenarios.
Security signals we found
Functional bug in authentication flow
Password handling logic changed
No cryptographic changes
No privilege escalation or code execution path evident
Evidence from the diff
In electrum/gui/qml/qedaemon.py, the wallet-loading logic was changed so that an explicit empty-string password (‘’) is preserved and passed to the backend (which maps it to None), while a missing password (None) falls back to the currently loaded wallet’s password. Previously, the code mapped ‘’ to None first, then fell back to self._password, so an empty password was overwritten by the current wallet’s password, blocking passwordless wallets. The patch reorders and clarifies the logic: if password is None, use self._password; then if password == ‘’, map to None.
Changed components
electrum/gui/qml/qedaemon.pyQML GUI wallet loading flowInspect captured patch +7 / −4
diff --git a/electrum/gui/qml/qedaemon.py b/electrum/gui/qml/qedaemon.py
index 311eebc..587b19d 100644
--- a/electrum/gui/qml/qedaemon.py
+++ b/electrum/gui/qml/qedaemon.py
@@ -192,13 +192,16 @@ class QEDaemon(AuthMixin, QObject):
self._logger.debug('load wallet ' + str(self._path))
- # map empty string password to None
+ # password unification helper:
+ # - if pw not given (None), try pw of current wallet.
+ # - but "" empty str passwords are kept as-is, to open passwordless wallets
+ if password is None:
+ password = self._password
+
+ # map explicit empty str password to None. the backend disallows empty str passwords.
if password == '':
password = None
- if not password:
- password = self._password
-
wallet_already_open = self.daemon.get_wallet(self._path)
if wallet_already_open is not None:
password = QEWallet.getInstanceFor(wallet_already_open).password
Why this scored 26/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.