1
0
mirror of git://git.gnupg.org/gnupg.git synced 2025-01-08 12:44:23 +01:00
Neal H. Walfield 7546e81879 gpg: Fix cache consistency problem.
g10/keyring.c (keyring_search): Only mark the cache as completely
filled if we start the scan from the beginning of the keyring.

--
Signed-off-by: Neal H. Walfield <neal@g10code.com>
Reported-by: NIIBE Yutaka <gniibe@fsij.org>

A new feature (e8c53fc) turned up a bug whereby checking if a search
term matches multiple keys in the keyring causes the cache to be
inconsistent.

When we look for a key on the keyring, we iterate over each of the
keyblocks starting with the keyblock following the last result.  For
each keyblock, we iterate over the public key and any subkeys.  As we
iterate over each key, we first insert it into the cache and then
check if the key matches.  If so, we are done.

In pseudo code:

  for (i = last_result + 1; i < num_records; i ++)
    keyblock = get_keyblock (i)
    for (j = 1; j < len(keyblock); j ++)
      key = keyblock[j]
      update_cache (key)
      if (compare (key, search_terms))
        return ok
  cache_filled = true
  return ENOFOUND

When we look for the next match, we start with the following keyblock.
The result is that any subkeys following the key that matched are not
added to the cache (in other words, when a keyblock matches, the inner
loop did not necessarily complete and the subsequent search doesn't
resume it).

This patch includes a straightforward fix: only indicate the cache as
complete if we started the scan from the beginning of the keyring and
really didn't find anything.
2015-11-11 18:32:16 +01:00
..
2015-11-06 13:29:01 +01:00
2014-10-31 14:21:34 +01:00
2015-08-06 17:00:41 +09:00
2007-07-04 19:49:40 +00:00
2015-10-08 15:40:53 +02:00
2014-11-13 12:01:42 +01:00
2015-05-01 13:58:18 +09:00
2015-02-04 09:15:34 +01:00
2015-02-04 09:15:34 +01:00
2015-11-03 20:44:14 +01:00
2015-10-29 10:10:39 +01:00
2015-11-04 13:19:54 +01:00
2015-08-06 17:00:41 +09:00
2015-11-11 18:32:16 +01:00
2015-10-29 10:10:41 +01:00
2015-10-30 12:33:40 +01:00
2015-10-05 19:48:47 +02:00
2015-10-05 19:48:47 +02:00
2015-08-06 17:00:41 +09:00
2008-12-12 08:54:50 +00:00
2015-04-06 13:07:09 +02:00
2015-09-10 18:12:20 +02:00
2015-10-19 20:11:00 +02:00
2015-09-10 18:12:20 +02:00
2015-10-18 18:45:40 +02:00
2014-01-29 17:45:05 +01:00