gpgme crasher on key enumeration

Stéphane Corthésy stephane@sente.ch
Mon Sep 17 11:04:02 2001


Hi,

I guess I discovered a bug in gpgme 0.2.2, when enumerating keys. 
Compile the following code (cc file.c -lgpgme), and execute it. Program 
will quit with the following message, when calling 
gpgme_op_keylist_next() after having obtained the last key from the 
second enumeration (normally function should return GPGME_EOF):

keylist.c:465: failed assertion `c->key_queue'

Note that if we don't start the first enumeration (with ctx2), 
everything works well (I know that this code does nothing, it's just 
here to show you the bug).


Stéphane


#include <gpgme.h>

int main(int argc, char *argv[])
{
	GpgmeCtx	ctx1, ctx2;
	GpgmeKey	key;
	int			i = 1;
	
	gpgme_check_engine();
	gpgme_new(&ctx1);
	gpgme_op_keylist_start(ctx1, "", 1);
	gpgme_new(&ctx2);
	gpgme_op_keylist_start(ctx2, "", 1);
	while(gpgme_op_keylist_next(ctx2, &key) != GPGME_EOF)
		/* If we don't enumerate, everything goes well... */;
	while(gpgme_op_keylist_next(ctx1, &key) != GPGME_EOF){
		const char	*str = gpgme_key_get_string_attr(key, 
GPGME_ATTR_KEYID, NULL, 0);
		
		printf("Key #%d: %s", i++, str);
	}
	
	return 0;
}