aboutsummaryrefslogtreecommitdiffstats
path: root/g10/keydb.c
diff options
context:
space:
mode:
authorNeal H. Walfield <[email protected]>2015-09-02 08:33:26 +0000
committerNeal H. Walfield <[email protected]>2015-09-02 08:38:42 +0000
commitf076fa190e09eab5c586650d81e241e0bb85ce25 (patch)
treef07c7d8792ead6bb7f2b8490118918042ec1acd0 /g10/keydb.c
parentiobuf: Reduce verbosity of test. (diff)
downloadgnupg-f076fa190e09eab5c586650d81e241e0bb85ce25.tar.gz
gnupg-f076fa190e09eab5c586650d81e241e0bb85ce25.zip
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 <[email protected]>.
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)