From f076fa190e09eab5c586650d81e241e0bb85ce25 Mon Sep 17 00:00:00 2001 From: "Neal H. Walfield" Date: Wed, 2 Sep 2015 10:33:26 +0200 Subject: g10: If iobuf_seek fails when reading from the cache, do a hard read. * g10/keydb.c (keydb_get_keyblock): If the iobuf_seek fails when reading from the cache, then simply clear the cache and try reading from the database. -- Signed-off-by: Neal H. Walfield . --- g10/keydb.c | 30 +++++++++++++++++++----------- 1 file 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) -- cgit v1.2.3