From 778f51dbaa1052ec24ec2addd7a990551c7ce406 Mon Sep 17 00:00:00 2001 From: Thialfihar Date: Tue, 4 May 2010 13:11:56 +0000 Subject: [PATCH] check whether the hashed packet is non-null before using it, also checking the unhashed ones in the same manner... not sure whether that's needed, but can't hurt? Fixes issue 17. --- src/org/thialfihar/android/apg/Apg.java | 37 +++++++++++++++++-------- 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/src/org/thialfihar/android/apg/Apg.java b/src/org/thialfihar/android/apg/Apg.java index 6119041ec..612f663ce 100644 --- a/src/org/thialfihar/android/apg/Apg.java +++ b/src/org/thialfihar/android/apg/Apg.java @@ -1019,13 +1019,21 @@ public class Apg { } for (PGPSignature sig : new IterableIterator(key.getSignatures())) { - if (!key.isMasterKey() || sig.getKeyID() == key.getKeyID()) { - PGPSignatureSubpacketVector hashed = sig.getHashedSubPackets(); + if (key.isMasterKey() && sig.getKeyID() != key.getKeyID()) { + continue; + } + PGPSignatureSubpacketVector hashed = sig.getHashedSubPackets(); - if ((hashed.getKeyFlags() & - (KeyFlags.ENCRYPT_COMMS | KeyFlags.ENCRYPT_STORAGE)) != 0) { - return true; - } + if (hashed != null &&(hashed.getKeyFlags() & + (KeyFlags.ENCRYPT_COMMS | KeyFlags.ENCRYPT_STORAGE)) != 0) { + return true; + } + + PGPSignatureSubpacketVector unhashed = sig.getUnhashedSubPackets(); + + if (unhashed != null &&(unhashed.getKeyFlags() & + (KeyFlags.ENCRYPT_COMMS | KeyFlags.ENCRYPT_STORAGE)) != 0) { + return true; } } return false; @@ -1046,12 +1054,19 @@ public class Apg { } for (PGPSignature sig : new IterableIterator(key.getSignatures())) { - if (!key.isMasterKey() || sig.getKeyID() == key.getKeyID()) { - PGPSignatureSubpacketVector hashed = sig.getHashedSubPackets(); + if (key.isMasterKey() && sig.getKeyID() != key.getKeyID()) { + continue; + } + PGPSignatureSubpacketVector hashed = sig.getHashedSubPackets(); - if ((hashed.getKeyFlags() & KeyFlags.SIGN_DATA) != 0) { - return true; - } + if (hashed != null && (hashed.getKeyFlags() & KeyFlags.SIGN_DATA) != 0) { + return true; + } + + PGPSignatureSubpacketVector unhashed = sig.getUnhashedSubPackets(); + + if (unhashed != null && (unhashed.getKeyFlags() & KeyFlags.SIGN_DATA) != 0) { + return true; } }