aboutsummaryrefslogtreecommitdiffstats
path: root/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui
diff options
context:
space:
mode:
authorDominik Schürmann <dominik@dominikschuermann.de>2015-08-22 03:13:04 +0200
committerDominik Schürmann <dominik@dominikschuermann.de>2015-09-30 12:45:15 +0200
commit08e25747da20e399096a2e0c1c4afcce67898718 (patch)
treec401bc0bf18a90838e5461a5fc08ac31a342fb17 /OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui
parent1d0e9bf60a958dce3ee4605dd08c660331e2d171 (diff)
downloadopen-keychain-08e25747da20e399096a2e0c1c4afcce67898718.tar.gz
open-keychain-08e25747da20e399096a2e0c1c4afcce67898718.tar.bz2
open-keychain-08e25747da20e399096a2e0c1c4afcce67898718.zip
Fix crashes with Fluffys PGP applet
Diffstat (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui')
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyActivity.java10
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/NfcOperationActivity.java6
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/BaseNfcActivity.java34
3 files changed, 31 insertions, 19 deletions
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyActivity.java
index e56652d5f..bd355da19 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyActivity.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyActivity.java
@@ -187,15 +187,17 @@ public class CreateKeyActivity extends BaseNfcActivity {
}
private boolean containsKeys(byte[] scannedFingerprints) {
+ if (scannedFingerprints == null) {
+ return false;
+ }
+
// If all fingerprint bytes are 0, the card contains no keys.
- boolean cardContainsKeys = false;
for (byte b : scannedFingerprints) {
if (b != 0) {
- cardContainsKeys = true;
- break;
+ return true;
}
}
- return cardContainsKeys;
+ return false;
}
@Override
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/NfcOperationActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/NfcOperationActivity.java
index b811b218e..1ff87541a 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/NfcOperationActivity.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/NfcOperationActivity.java
@@ -294,9 +294,11 @@ public class NfcOperationActivity extends BaseNfcActivity {
private boolean shouldPutKey(byte[] fingerprint, int idx) throws IOException {
byte[] cardFingerprint = nfcGetFingerprint(idx);
+
// Slot is empty, or contains this key already. PUT KEY operation is safe
- if (Arrays.equals(cardFingerprint, BLANK_FINGERPRINT) ||
- Arrays.equals(cardFingerprint, fingerprint)) {
+ if (cardFingerprint == null ||
+ Arrays.equals(cardFingerprint, BLANK_FINGERPRINT) ||
+ Arrays.equals(cardFingerprint, fingerprint)) {
return true;
}
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/BaseNfcActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/BaseNfcActivity.java
index 972421abe..813ed07fc 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/BaseNfcActivity.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/BaseNfcActivity.java
@@ -147,8 +147,6 @@ public abstract class BaseNfcActivity extends BaseActivity {
protected Exception doInBackground(Void... params) {
try {
handleTagDiscoveredIntent(intent);
- } catch (CardException e) {
- return e;
} catch (IOException e) {
return e;
}
@@ -406,6 +404,10 @@ public abstract class BaseNfcActivity extends BaseActivity {
// Connect to the detected tag, setting a couple of settings
mIsoDep = IsoDep.get(detectedTag);
+ if (mIsoDep == null) {
+ // TODO: better exception?
+ throw new IOException("Tag does not support ISO-DEP (ISO 14443-4)!");
+ }
mIsoDep.setTimeout(TIMEOUT); // timeout is set to 100 seconds to avoid cancellation during calculation
mIsoDep.connect();
@@ -496,6 +498,9 @@ public abstract class BaseNfcActivity extends BaseActivity {
*/
public byte[] nfcGetFingerprint(int idx) throws IOException {
byte[] data = nfcGetFingerprints();
+ if (data == null) {
+ return null;
+ }
// return the master key fingerprint
ByteBuffer fpbuf = ByteBuffer.wrap(data);
@@ -507,14 +512,11 @@ public abstract class BaseNfcActivity extends BaseActivity {
}
public byte[] nfcGetAid() throws IOException {
-
String info = "00CA004F00";
return mIsoDep.transceive(Hex.decode(info));
-
}
public String nfcGetUserId() throws IOException {
-
String info = "00CA006500";
return nfcGetHolderName(nfcCommunicate(info));
}
@@ -952,14 +954,20 @@ public abstract class BaseNfcActivity extends BaseActivity {
}
public String nfcGetHolderName(String name) {
- String slength;
- int ilength;
- name = name.substring(6);
- slength = name.substring(0, 2);
- ilength = Integer.parseInt(slength, 16) * 2;
- name = name.substring(2, ilength + 2);
- name = (new String(Hex.decode(name))).replace('<', ' ');
- return (name);
+ try {
+ String slength;
+ int ilength;
+ name = name.substring(6);
+ slength = name.substring(0, 2);
+ ilength = Integer.parseInt(slength, 16) * 2;
+ name = name.substring(2, ilength + 2);
+ name = (new String(Hex.decode(name))).replace('<', ' ');
+ return name;
+ } catch (IndexOutOfBoundsException e) {
+ Log.e(Constants.TAG, "couldn't get holder name", e);
+ // try-catch for https://github.com/FluffyKaon/OpenPGP-Card
+ return "";
+ }
}
private String nfcGetDataField(String output) {