diff --git a/THANKS b/THANKS index 86d1c1997..8eb405b66 100644 --- a/THANKS +++ b/THANKS @@ -50,6 +50,7 @@ Fabio Coatti cova@ferrara.linux.it Felix von Leitner leitner@amdiv.de fish stiqz fish@analog.org Florian Weimer Florian.Weimer@rus.uni-stuttgart.de +Francesco Potorti pot@gnu.org Frank Donahoe fdonahoe@wilkes1.wilkes.edu Frank Heckenbach heckenb@mi.uni-erlangen.de Frank Stajano frank.stajano@cl.cam.ac.uk diff --git a/g10/ChangeLog b/g10/ChangeLog index 03a52b153..af3e65bf7 100644 --- a/g10/ChangeLog +++ b/g10/ChangeLog @@ -1,3 +1,9 @@ +2001-06-15 Werner Koch + + * getkey.c (merge_selfsigs): Exit gracefully when a secret key is + encountered. May happen if a secret key is in public keyring. + Reported by Francesco Potorti. + 2001-06-12 Werner Koch * getkey.c (compare_name): Use ascii_memistr(), ascii_memcasecmp() diff --git a/g10/getkey.c b/g10/getkey.c index bd21f956f..96ab714b5 100644 --- a/g10/getkey.c +++ b/g10/getkey.c @@ -1807,8 +1807,17 @@ merge_selfsigs( KBNODE keyblock ) int revoked; PKT_public_key *main_pk; - if ( keyblock->pkt->pkttype != PKT_PUBLIC_KEY ) + if ( keyblock->pkt->pkttype != PKT_PUBLIC_KEY ) { + if (keyblock->pkt->pkttype == PKT_SECRET_KEY ) { + log_error ("expected public key but found secret key " + "- must stop\n"); + /* we better exit here becuase a public key is expected at + other places too. FIXME: Figure this out earlier and + don't get to here at all */ + g10_exit (1); + } BUG (); + } merge_selfsigs_main ( keyblock, &revoked ); main_pk = keyblock->pkt->pkt.public_key;