diff options
author | Neal H. Walfield <[email protected]> | 2015-09-02 08:33:26 +0000 |
---|---|---|
committer | Neal H. Walfield <[email protected]> | 2015-09-02 08:38:42 +0000 |
commit | f076fa190e09eab5c586650d81e241e0bb85ce25 (patch) | |
tree | f07c7d8792ead6bb7f2b8490118918042ec1acd0 | |
parent | iobuf: Reduce verbosity of test. (diff) | |
download | gnupg-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]>.
-rw-r--r-- | g10/keydb.c | 30 |
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) |