From 962e570e9191c06cff4d0a5e3877f31723642afe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Thu, 26 Jan 2017 22:55:37 +0100 Subject: [PATCH 1/2] Better handling of User ID corner cases --- .../keychain/pgp/SplitUserIdTest.java | 63 ++++++++++++++++--- extern/openpgp-api-lib | 2 +- 2 files changed, 57 insertions(+), 8 deletions(-) diff --git a/OpenKeychain/src/test/java/org/sufficientlysecure/keychain/pgp/SplitUserIdTest.java b/OpenKeychain/src/test/java/org/sufficientlysecure/keychain/pgp/SplitUserIdTest.java index 4975d3c6f..3eb474c1d 100644 --- a/OpenKeychain/src/test/java/org/sufficientlysecure/keychain/pgp/SplitUserIdTest.java +++ b/OpenKeychain/src/test/java/org/sufficientlysecure/keychain/pgp/SplitUserIdTest.java @@ -31,59 +31,108 @@ import org.sufficientlysecure.keychain.WorkaroundBuildConfig; @Config(constants = WorkaroundBuildConfig.class, sdk = 23, manifest = "src/main/AndroidManifest.xml") public class SplitUserIdTest { + @Test + public void splitCompleteUserIdShouldReturnEmpty() throws Exception { + OpenPgpUtils.UserId info = KeyRing.splitUserId(""); + Assert.assertNull(info.name); + Assert.assertNull(info.email); + Assert.assertNull(info.comment); + } + @Test public void splitCompleteUserIdShouldReturnAll3Components() throws Exception { OpenPgpUtils.UserId info = KeyRing.splitUserId("Max Mustermann (this is a comment) "); Assert.assertEquals("Max Mustermann", info.name); - Assert.assertEquals("this is a comment", info.comment); Assert.assertEquals("max@example.com", info.email); + Assert.assertEquals("this is a comment", info.comment); } @Test public void splitUserIdWithAllButCommentShouldReturnNameAndEmail() throws Exception { OpenPgpUtils.UserId info = KeyRing.splitUserId("Max Mustermann "); Assert.assertEquals("Max Mustermann", info.name); - Assert.assertNull(info.comment); Assert.assertEquals("max@example.com", info.email); + Assert.assertNull(info.comment); } @Test public void splitUserIdWithAllButEmailShouldReturnNameAndComment() throws Exception { OpenPgpUtils.UserId info = KeyRing.splitUserId("Max Mustermann (this is a comment)"); Assert.assertEquals("Max Mustermann", info.name); - Assert.assertEquals("this is a comment", info.comment); Assert.assertNull(info.email); + Assert.assertEquals("this is a comment", info.comment); } @Test public void splitUserIdWithCommentAndEmailShouldReturnCommentAndEmail() throws Exception { OpenPgpUtils.UserId info = KeyRing.splitUserId(" (this is a comment) "); Assert.assertNull(info.name); - Assert.assertEquals("this is a comment", info.comment); Assert.assertEquals("max@example.com", info.email); + Assert.assertEquals("this is a comment", info.comment); } @Test public void splitUserIdWithEmailShouldReturnEmail() throws Exception { OpenPgpUtils.UserId info = KeyRing.splitUserId("max@example.com"); Assert.assertNull(info.name); - Assert.assertNull(info.comment); Assert.assertEquals("max@example.com", info.email); + Assert.assertNull(info.comment); + } + + @Test + public void splitUserIdWithQuotedEmailShouldReturnEmail() throws Exception { + OpenPgpUtils.UserId info = KeyRing.splitUserId("\"max@example.com\""); + Assert.assertNull(info.name); + Assert.assertEquals("max@example.com", info.email); + Assert.assertNull(info.comment); + } + + @Test + public void splitUserIdWithEmailBracketsShouldReturnEmail() throws Exception { + OpenPgpUtils.UserId info = KeyRing.splitUserId(""); + Assert.assertNull(info.name); + Assert.assertEquals("max@example.com", info.email); + Assert.assertNull(info.comment); + } + + @Test + public void splitUserIdWithEmailAsNameShouldReturnEmail() throws Exception { + OpenPgpUtils.UserId info = KeyRing.splitUserId("max@example.com "); + Assert.assertNull(info.name); + Assert.assertEquals("max@example.com", info.email); + Assert.assertNull(info.comment); + } + + @Test + public void splitUserIdWithQuotedEmailAsNameShouldReturnEmail() throws Exception { + OpenPgpUtils.UserId info = KeyRing.splitUserId("\"max@example.com\" "); + Assert.assertNull(info.name); + Assert.assertEquals("max@example.com", info.email); + Assert.assertNull(info.comment); + } + + @Test + public void splitUserIdWithEmailAndEmailLookingNameShouldReturnEmailAndName() throws Exception { + OpenPgpUtils.UserId info = KeyRing.splitUserId("Name@LooksLike.Email "); + Assert.assertEquals("Name@LooksLike.Email", info.name); + Assert.assertEquals("max@example.com", info.email); + Assert.assertNull(info.comment); } @Test public void splitUserIdWithNameShouldReturnName() throws Exception { OpenPgpUtils.UserId info = KeyRing.splitUserId("Max Mustermann"); Assert.assertEquals("Max Mustermann", info.name); - Assert.assertNull(info.comment); Assert.assertNull(info.email); + Assert.assertNull(info.comment); } @Test public void splitUserIdWithCommentShouldReturnComment() throws Exception { OpenPgpUtils.UserId info = KeyRing.splitUserId(" (this is a comment)"); Assert.assertNull(info.name); - Assert.assertEquals("this is a comment", info.comment); Assert.assertNull(info.email); + Assert.assertEquals("this is a comment", info.comment); } + } \ No newline at end of file diff --git a/extern/openpgp-api-lib b/extern/openpgp-api-lib index 4ae9313a4..f953ca8cd 160000 --- a/extern/openpgp-api-lib +++ b/extern/openpgp-api-lib @@ -1 +1 @@ -Subproject commit 4ae9313a4f449c004d5a6e03e3753d1cd956fe25 +Subproject commit f953ca8cdb7fbab0f8877589d9578d74005f8d1f From 86098688ab5d630a7fc6c2f646936a505e10f036 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Thu, 26 Jan 2017 23:04:09 +0100 Subject: [PATCH 2/2] Increase DB version to re-execute splitUserId for each key --- .../keychain/provider/KeychainDatabase.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainDatabase.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainDatabase.java index 0eb7a0cdb..944617988 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainDatabase.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainDatabase.java @@ -54,7 +54,7 @@ import java.io.IOException; */ public class KeychainDatabase extends SQLiteOpenHelper { private static final String DATABASE_NAME = "openkeychain.db"; - private static final int DATABASE_VERSION = 17; + private static final int DATABASE_VERSION = 18; static Boolean apgHack = false; private Context mContext; @@ -318,6 +318,10 @@ public class KeychainDatabase extends SQLiteOpenHelper { // no consolidate necessary return; } + case 16: + // splitUserId changed: Execute consolidate for new parsing of name, email + case 17: + // splitUserId changed: Execute consolidate for new parsing of name, email } // always do consolidate after upgrade