From e887ce1db2a1e3223606d35382306dbef20311be Mon Sep 17 00:00:00 2001 From: Philipp Crocoll Date: Sat, 13 Jul 2013 07:57:34 +0200 Subject: [PATCH] PwDatabase: Save method now preserves the file format (kdbp vs. kdbx) SaveDb: fixed bug with catching exceptions Added kdbp Tests Changed versionCode for new preview release --- src/KeePassLib2Android/PwDatabase.cs | 2 +- src/Kp2aBusinessLogic/database/edit/SaveDB.cs | 16 ++++++- src/Kp2aUnitTests/TestLoadDb.cs | 6 +++ src/Kp2aUnitTests/TestSaveDb.cs | 42 +++++++++++++++++++ .../Properties/AndroidManifest_net.xml | 4 +- 5 files changed, 65 insertions(+), 5 deletions(-) diff --git a/src/KeePassLib2Android/PwDatabase.cs b/src/KeePassLib2Android/PwDatabase.cs index abd5224d..58781462 100644 --- a/src/KeePassLib2Android/PwDatabase.cs +++ b/src/KeePassLib2Android/PwDatabase.cs @@ -663,7 +663,7 @@ namespace KeePassLib Debug.Assert(ValidateUuidUniqueness()); Stream s = streamOfOriginalLocation; KdbxFile kdb = new KdbxFile(this); - kdb.Save(s, null, KdbxFormat.Default, slLogger); + kdb.Save(s, null, KdbpFile.GetFormatToUse(m_ioSource), slLogger); m_pbHashOfLastIO = kdb.HashOfFileOnDisk; m_pbHashOfFileOnDisk = kdb.HashOfFileOnDisk; diff --git a/src/Kp2aBusinessLogic/database/edit/SaveDB.cs b/src/Kp2aBusinessLogic/database/edit/SaveDB.cs index 71c8177d..febdb280 100644 --- a/src/Kp2aBusinessLogic/database/edit/SaveDB.cs +++ b/src/Kp2aBusinessLogic/database/edit/SaveDB.cs @@ -136,12 +136,24 @@ namespace keepass2android { try { - _workerThread = new Thread(runHandler); + _workerThread = new Thread(() => + { + try + { + runHandler(); + } + catch (Exception e) + { + Kp2aLog.Log("Error in worker thread of SaveDb: " + e); + Finish(false, e.Message); + } + + }); _workerThread.Start(); } catch (Exception e) { - Kp2aLog.Log("Error in worker thread of SaveDb: "+e); + Kp2aLog.Log("Error starting worker thread of SaveDb: "+e); Finish(false, e.Message); } diff --git a/src/Kp2aUnitTests/TestLoadDb.cs b/src/Kp2aUnitTests/TestLoadDb.cs index 119f3116..29de807e 100644 --- a/src/Kp2aUnitTests/TestLoadDb.cs +++ b/src/Kp2aUnitTests/TestLoadDb.cs @@ -91,5 +91,11 @@ namespace Kp2aUnitTests } + [TestMethod] + public void TestLoadKdbpWithPasswordOnly() + { + RunLoadTest("passwordonly.kdbp", DefaultPassword, ""); + } + } } \ No newline at end of file diff --git a/src/Kp2aUnitTests/TestSaveDb.cs b/src/Kp2aUnitTests/TestSaveDb.cs index ae63566b..c1fef6b7 100644 --- a/src/Kp2aUnitTests/TestSaveDb.cs +++ b/src/Kp2aUnitTests/TestSaveDb.cs @@ -263,6 +263,48 @@ namespace Kp2aUnitTests + } + + [TestMethod] + public void TestLoadKdbxAndSaveKdbp_TestIdenticalFiles() + { + IKp2aApp app = LoadDatabase(DefaultDirectory + "complexDb.kdbx", "test", null); + //string kdbxXml = DatabaseToXml(app); + + newFilename = TestDbDirectory + "tmp_complexDb.kdbp"; + if (File.Exists(newFilename)) + File.Delete(newFilename); + app.GetDb().KpDatabase.IOConnectionInfo.Path = newFilename; + app.GetDb().SaveData(Application.Context); + + + IKp2aApp appReloaded = LoadDatabase(newFilename, "test", null); + /* + * Unfortunately we cannot compare the xml because there are slight differences: + * - the order of ProtectedStrings in the xml is different (which is ok) + * - the CustomIconUuids are serialized as Zeros instead of not being serialized (which is ok as well) + string kdbxReloadedXml = DatabaseToXml(appReloaded); + + bool areEqual = kdbxXml.Equals(kdbxReloadedXml); + + if (!areEqual) + { + using (StreamWriter w1 = File.CreateText(TestDbDirectory + "FromOriginalKdbx.xml")) + { + w1.Write(kdbxXml); + } + using (StreamWriter w2 = File.CreateText(TestDbDirectory + "FromKdbp.xml")) + { + w2.Write(kdbxReloadedXml); + } + + } + Assert.IsTrue(areEqual, "reloaded->xml differs from loaded->xml"); + */ + AssertDatabasesAreEqual(app.GetDb().KpDatabase, appReloaded.GetDb().KpDatabase); + + + } private class OnCloseToStringMemoryStream : MemoryStream diff --git a/src/keepass2android/Properties/AndroidManifest_net.xml b/src/keepass2android/Properties/AndroidManifest_net.xml index fb0bf05e..f07997f8 100644 --- a/src/keepass2android/Properties/AndroidManifest_net.xml +++ b/src/keepass2android/Properties/AndroidManifest_net.xml @@ -1,7 +1,7 @@