diff options
author | Werner Koch <[email protected]> | 2014-06-02 17:51:23 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2014-06-02 17:54:22 +0000 |
commit | 958e5f292fa3f8e127f54bc088c56780c564dcae (patch) | |
tree | a1e96703a5b4536694943121aaa968838b8e4f2e /g10/keyid.c | |
parent | gpg: Simplify default key listing. (diff) | |
download | gnupg-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.c | 10 |
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; |