1
0
mirror of git://git.gnupg.org/gnupg.git synced 2024-11-01 20:18:44 +01:00
gnupg/g10
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
..
armor.c gpg: Replace remaining old error code macros by GPG_ERR_. 2015-01-22 12:06:11 +01:00
build-packet.c gpg: Create all MPIs with RFC-4880 correct length headers. 2015-03-16 20:14:58 +01:00
call-agent.c scd: Add reder information to --card-status. 2015-11-09 16:15:44 +09:00
call-agent.h scd: Add reder information to --card-status. 2015-11-09 16:15:44 +09:00
call-dirmngr.c Change capitalization of TOR to Tor. 2015-10-21 18:14:24 +02:00
call-dirmngr.h gpg: Deprecate the --keyserver option. 2015-10-05 17:52:28 +02:00
card-util.c scd: Add reder information to --card-status. 2015-11-09 16:15:44 +09:00
ChangeLog-2011 Generate the ChangeLog from commit logs. 2011-12-01 11:09:02 +01:00
cipher.c gpg: Remove options --pgp2 and --rfc1991. 2014-08-14 11:03:55 +02:00
compress-bz2.c Nuked almost all trailing white space. 2011-02-04 12:57:53 +01:00
compress.c gpg: Replace remaining old error code macros by GPG_ERR_. 2015-01-22 12:06:11 +01:00
cpr.c gpg: Print a new FAILURE status after most commands. 2015-08-25 15:26:33 +02:00
dearmor.c gpg: Create exported secret files and revocs with mode 700. 2014-06-30 09:12:48 +02:00
decrypt-data.c gpg: Avoid new strings. 2015-11-06 13:29:01 +01:00
decrypt.c common/iobuf.h: Remove iobuf_open_fd_or_name. 2015-08-20 14:16:22 +02:00
dek.h gpg: Remove cipher.h and put algo ids into a common file. 2014-01-29 20:35:05 +01:00
delkey.c gpg: --delete-secret-key - check that a secret key exists. 2014-09-20 16:27:16 +02:00
dirmngr-conf.skel dirmngr: Add example Tor hidden service. 2015-10-26 16:34:19 +01:00
distsigkey.gpg Add more signing keys. 2014-10-31 14:21:34 +01:00
ecdh.c Curve25519 support. 2015-08-06 17:00:41 +09:00
encrypt.c gpg: Try hard to use MDC also for sign+symenc. 2015-10-12 09:31:44 +02:00
exec.c gpg: Replace remaining old error code macros by GPG_ERR_. 2015-01-22 12:06:11 +01:00
exec.h Changed to GPLv3. 2007-07-04 19:49:40 +00:00
export.c gpg: Add option --print-dane-records. 2015-10-08 15:40:53 +02:00
filter.h gpg: Remove PGP-2 related cruft. 2014-11-13 12:01:42 +01:00
free-packet.c g10: fix cmp_public_key. 2015-05-01 13:58:18 +09:00
getkey.c gpg: Check for ambiguous or non-matching key specs. 2015-11-06 12:04:35 +01:00
gpg-w32info.rc w32: Add manifest to gpg. 2015-02-04 09:15:34 +01:00
gpg.c gpg: Add new option --only-sign-text-ids. 2015-11-06 13:16:37 +01:00
gpg.h gpg: Replace remaining old error code macros by GPG_ERR_. 2015-01-22 12:06:11 +01:00
gpg.w32-manifest.in w32: Add manifest to gpg. 2015-02-04 09:15:34 +01:00
gpgv.c gpg: Allow multiple --default-key options. Take the last available key. 2015-11-04 13:19:52 +01:00
helptext.c Change all quotes in strings and comments to the new GNU standard. 2012-06-05 19:29:22 +02:00
import.c gpg: Make translation easier. 2015-11-03 20:44:14 +01:00
kbnode.c gpg: Fix a missing LF in debug output. 2014-11-13 17:01:17 +01:00
keydb.c gpg: Fix keyring support. 2015-10-29 10:10:39 +01:00
keydb.h gpg: Add --encrypt-to-default-key. 2015-11-04 13:19:54 +01:00
keyedit.c gpg: Add new option --only-sign-text-ids. 2015-11-06 13:16:37 +01:00
keygen.c gpg: Indicate which characters are invalid. 2015-11-05 14:31:58 +01:00
keyid.c Curve25519 support. 2015-08-06 17:00:41 +09:00
keylist.c common: Add separate header for zb32.c. 2015-10-30 12:33:40 +01:00
keyring.c gpg: Fix cache consistency problem. 2015-11-11 18:32:16 +01:00
keyring.h gpg: Remove unused prototype. 2015-10-29 10:10:41 +01:00
keyserver-internal.h gpg: Add new --auto-key-locate mechanism "dane". 2015-10-06 20:31:43 +02:00
keyserver.c Move SRV RR code from common/ to dirmngr/. 2015-10-22 09:22:41 +02:00
main.h gpg: Allow multiple --default-key options. Take the last available key. 2015-11-04 13:19:52 +01:00
mainproc.c gpg: Allow multiple --default-key options. Take the last available key. 2015-11-04 13:19:52 +01:00
Makefile.am gpg: Move sqlite helper functions into their own file. 2015-10-29 10:10:38 +01:00
mdfilter.c Nuked almost all trailing white space. 2011-02-04 12:57:53 +01:00
migrate.c gpg: Change wording of a migration error message. 2014-10-09 10:56:25 +02:00
misc.c common: Add separate header for zb32.c. 2015-10-30 12:33:40 +01:00
openfile.c gpg: Install a dirmngr.conf file. 2015-10-05 19:48:47 +02:00
OPTIONS See ChangeLog: Mon Jul 31 10:04:47 CEST 2000 Werner Koch 2000-07-31 08:04:16 +00:00
options.h gpg: Add new option --only-sign-text-ids. 2015-11-06 13:16:37 +01:00
options.skel gpg: Install a dirmngr.conf file. 2015-10-05 19:48:47 +02:00
packet.h gpg: Add support for unwrapping the outer level of encryption. 2015-11-05 14:16:33 +01:00
parse-packet.c gpg: Fix regression in packet parser from Aug 19. 2015-08-23 12:17:43 +02:00
passphrase.c Fix sending INQUIRE_MAXLEN for symmetric data. 2015-08-16 12:54:04 -04:00
photoid.c gpg: New %U expando for the photo viewer. 2014-04-17 21:44:09 +02:00
photoid.h Decryption and signi via agent is now implemented. 2010-04-23 11:36:59 +00:00
pkclist.c gpg: Allow multiple --default-key options. Take the last available key. 2015-11-04 13:19:52 +01:00
pkglue.c Curve25519 support. 2015-08-06 17:00:41 +09:00
pkglue.h gpg: Use only OpenPGP public key algo ids and add the EdDSA algo id. 2014-01-30 18:48:37 +01:00
plaintext.c gpg: Add support for unwrapping the outer level of encryption. 2015-11-05 14:16:33 +01:00
progress.c Nuked almost all trailing white space. 2011-02-04 12:57:53 +01:00
pubkey-enc.c gpg: Allow multiple --default-key options. Take the last available key. 2015-11-04 13:19:52 +01:00
pubring.asc See ChangeLog: Mon Jul 31 10:04:47 CEST 2000 Werner Koch 2000-07-31 08:04:16 +00:00
revoke.c gpg: Allow multiple --default-key options. Take the last available key. 2015-11-04 13:19:52 +01:00
rmd160.c Nuked almost all trailing white space. 2011-02-04 12:57:53 +01:00
rmd160.h Add missing header file. 2008-12-12 08:54:50 +00:00
seckey-cert.c Use inline functions to convert buffer data to scalars. 2015-02-11 10:28:25 +01:00
server.c Remove support for the GPG_AGENT_INFO envvar. 2014-10-03 11:58:58 +02:00
seskey.c gpg: Rename a debug macro. 2015-04-06 13:07:09 +02:00
sig-check.c gpg: Ensure all weak digest rejection notices are shown 2015-10-26 16:56:56 +01:00
sign.c gpg: Allow multiple --default-key options. Take the last available key. 2015-11-04 13:19:52 +01:00
skclist.c gpg: Allow multiple --default-key options. Take the last available key. 2015-11-04 13:19:52 +01:00
sqlite.c gpg: Consider newlines to be whitespace in an SQL statement. 2015-10-31 01:50:51 +01:00
sqlite.h gpg: Change sqlite3_stepx to pass the sqlite3_stmt * to the callback. 2015-10-29 10:10:39 +01:00
t-keydb-keyring.kbx g10: Add test for keydb as well as new testing infrastructure. 2015-09-02 15:08:57 +02:00
t-keydb.c g10: Fix make distcheck problem. 2015-09-10 18:12:20 +02:00
t-rmd160.c Nuked almost all trailing white space. 2011-02-04 12:57:53 +01:00
tdbdump.c gpg: Replace -1 by GPG_ERR_NOT_FOUND in tdbio.c 2015-06-04 18:08:26 +02:00
tdbio.c gpg: Mark local function as static. 2015-10-19 20:11:00 +02:00
tdbio.h gpg: Replace -1 by GPG_ERR_NOT_FOUND in tdbio.c 2015-06-04 18:08:26 +02:00
test-stubs.c gpg: Allow multiple --default-key options. Take the last available key. 2015-11-04 13:19:52 +01:00
test.c g10: Fix make distcheck problem. 2015-09-10 18:12:20 +02:00
textfilter.c gpg: Remove all support for v3 keys and always create v4-signatures. 2014-10-17 13:32:16 +02:00
tofu.c gpg: Default to the flat TOFU DB format. 2015-11-10 08:03:57 +01:00
tofu.h gpg: Provide an interface to patch TOFU updates. 2015-10-23 17:38:17 +02:00
trust.c g10: Add TOFU support. 2015-10-18 18:45:40 +02:00
trustdb.c gpg: Default to the the PGP trust model. 2015-11-10 08:05:17 +01:00
trustdb.h gpg: Factor out code into a standalone function. 2015-10-21 13:45:47 +02:00
verify.c gpg: Replace remaining old error code macros by GPG_ERR_. 2015-01-22 12:06:11 +01:00
zlib-riscos.h include: Remove this directory. 2014-01-29 17:45:05 +01:00