From a3021bbd83ae0057b650e657433cc5a0eb719340 Mon Sep 17 00:00:00 2001 From: Vincent Breitmoser Date: Sun, 15 Jul 2018 12:29:06 +0200 Subject: [PATCH] Clean up security token transport if connection procedure failed --- .../SecurityTokenConnection.java | 39 +++++++++++-------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/securitytoken/SecurityTokenConnection.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/securitytoken/SecurityTokenConnection.java index 380169a0f..a34029bac 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/securitytoken/SecurityTokenConnection.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/securitytoken/SecurityTokenConnection.java @@ -103,28 +103,33 @@ public class SecurityTokenConnection { */ @VisibleForTesting void connectToDevice(Context context) throws IOException { - // Connect on transport layer - transport.connect(); + try { + // Connect on transport layer + transport.connect(); - // dummy instance for initial communicate() calls - cardCapabilities = new CardCapabilities(); + // dummy instance for initial communicate() calls + cardCapabilities = new CardCapabilities(); - determineTokenType(); + determineTokenType(); - CommandApdu select = commandFactory.createSelectFileOpenPgpCommand(); - ResponseApdu response = communicate(select); // activate connection + CommandApdu select = commandFactory.createSelectFileOpenPgpCommand(); + ResponseApdu response = communicate(select); // activate connection - if (!response.isSuccess()) { - throw new CardException("Initialization failed!", response.getSw()); + if (!response.isSuccess()) { + throw new CardException("Initialization failed!", response.getSw()); + } + + refreshConnectionCapabilities(); + + isPw1ValidatedForSignature = false; + isPw1ValidatedForOther = false; + isPw3Validated = false; + + smEstablishIfAvailable(context); + } catch (IOException e) { + transport.release(); + throw e; } - - refreshConnectionCapabilities(); - - isPw1ValidatedForSignature = false; - isPw1ValidatedForOther = false; - isPw3Validated = false; - - smEstablishIfAvailable(context); } @VisibleForTesting