aboutsummaryrefslogtreecommitdiffstats
path: root/g10/keydb.c
diff options
context:
space:
mode:
Diffstat (limited to 'g10/keydb.c')
-rw-r--r--g10/keydb.c30
1 files changed, 19 insertions, 11 deletions
diff --git a/g10/keydb.c b/g10/keydb.c
index b4877d405..124e94006 100644
--- a/g10/keydb.c
+++ b/g10/keydb.c
@@ -1126,18 +1126,26 @@ keydb_get_keyblock (KEYDB_HANDLE hd, KBNODE *ret_kb)
if (keyblock_cache.state == KEYBLOCK_CACHE_FILLED)
{
- iobuf_seek (keyblock_cache.iobuf, 0);
- err = parse_keyblock_image (keyblock_cache.iobuf,
- keyblock_cache.pk_no,
- keyblock_cache.uid_no,
- keyblock_cache.sigstatus,
- ret_kb);
+ err = iobuf_seek (keyblock_cache.iobuf, 0);
if (err)
- keyblock_cache_clear ();
- if (DBG_CLOCK)
- log_clock (err? "keydb_get_keyblock leave (cached, failed)"
- : "keydb_get_keyblock leave (cached)");
- return err;
+ {
+ log_error ("keydb_get_keyblock: failed to rewind iobuf for cache\n");
+ keyblock_cache_clear ();
+ }
+ else
+ {
+ err = parse_keyblock_image (keyblock_cache.iobuf,
+ keyblock_cache.pk_no,
+ keyblock_cache.uid_no,
+ keyblock_cache.sigstatus,
+ ret_kb);
+ if (err)
+ keyblock_cache_clear ();
+ if (DBG_CLOCK)
+ log_clock (err? "keydb_get_keyblock leave (cached, failed)"
+ : "keydb_get_keyblock leave (cached)");
+ return err;
+ }
}
if (hd->found < 0 || hd->found >= hd->used)