From e9108b85cdd00ffa53c5efd79a30934bd69aca07 Mon Sep 17 00:00:00 2001 From: Craig Raw Date: Fri, 6 Mar 2026 11:30:41 +0200 Subject: [PATCH] fix possible db corruption on password removal by reordering database file and row updates --- .../sparrowwallet/sparrow/io/db/DbPersistence.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/sparrowwallet/sparrow/io/db/DbPersistence.java b/src/main/java/com/sparrowwallet/sparrow/io/db/DbPersistence.java index ca42ee04..b18bb170 100644 --- a/src/main/java/com/sparrowwallet/sparrow/io/db/DbPersistence.java +++ b/src/main/java/com/sparrowwallet/sparrow/io/db/DbPersistence.java @@ -162,11 +162,20 @@ public class DbPersistence implements Persistence { @Override public void updateWallet(Storage storage, Wallet wallet, ECKey encryptionPubKey) throws StorageException { - updatePassword(storage, encryptionPubKey); + String newPassword = getFilePassword(encryptionPubKey); + String currentPassword = getDatasourcePassword(); updateExecutor.execute(() -> { try { - update(storage, wallet, getFilePassword(encryptionPubKey)); + if(dataSource != null && currentPassword != null && newPassword == null) { + //Removing encryption: write data first + update(storage, wallet, currentPassword); + updatePassword(storage, encryptionPubKey); + } else { + //Adding encryption or no change: change file first + updatePassword(storage, encryptionPubKey); + update(storage, wallet, newPassword); + } } catch(Exception e) { log.error("Error updating wallet db", e); }