aboutsummaryrefslogtreecommitdiffstats
path: root/g10/keyid.c
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2014-06-02 17:51:23 +0000
committerWerner Koch <[email protected]>2014-06-02 17:54:22 +0000
commit958e5f292fa3f8e127f54bc088c56780c564dcae (patch)
treea1e96703a5b4536694943121aaa968838b8e4f2e /g10/keyid.c
parentgpg: Simplify default key listing. (diff)
downloadgnupg-958e5f292fa3f8e127f54bc088c56780c564dcae.tar.gz
gnupg-958e5f292fa3f8e127f54bc088c56780c564dcae.zip
gpg: Avoid NULL-deref in default key listing.
* g10/keyid.c (hash_public_key): Take care of NULL keys. * g10/misc.c (pubkey_nbits): Ditto. -- This problem was mainly due to our ECC code while checking for opaque MPIs with the curve name.
Diffstat (limited to '')
-rw-r--r--g10/keyid.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/g10/keyid.c b/g10/keyid.c
index 2883af171..9c94bd6b2 100644
--- a/g10/keyid.c
+++ b/g10/keyid.c
@@ -167,7 +167,15 @@ hash_public_key (gcry_md_hd_t md, PKT_public_key *pk)
{
for (i=0; i < npkey; i++ )
{
- if (gcry_mpi_get_flag (pk->pkey[i], GCRYMPI_FLAG_OPAQUE))
+ if (!pk->pkey[i])
+ {
+ /* This case may only happen if the parsing of the MPI
+ failed but the key was anyway created. May happen
+ during "gpg KEYFILE". */
+ pp[i] = NULL;
+ nn[i] = 0;
+ }
+ else if (gcry_mpi_get_flag (pk->pkey[i], GCRYMPI_FLAG_OPAQUE))
{
const void *p;