From cc9554e545f58905fa020e23134a1ff29569ee16 Mon Sep 17 00:00:00 2001 From: Jonathan McDowell Date: Fri, 16 May 2008 18:59:04 +0100 Subject: [PATCH] Fix fetching key by text bug in db4 backend We don't want to add keys when there are no keys in the previous list, we want to only add new keys on the first pass. Otherwise if we end up with an empty list we'll start again as if none of the previous words where specified. --- keydb_db4.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/keydb_db4.c b/keydb_db4.c index 7f6404c..85aeab5 100644 --- a/keydb_db4.c +++ b/keydb_db4.c @@ -475,6 +475,7 @@ static int db4_fetch_key_text(const char *search, struct ll *curword = NULL; struct keyarray keylist = { NULL, 0, 0 }; struct keyarray newkeylist = { NULL, 0, 0 }; + int firstpass = 1; numkeys = 0; searchtext = strdup(search); @@ -507,8 +508,12 @@ static int db4_fetch_key_text(const char *search, data.data)[i]; } - if (keylist.count == 0 || - array_find(&keylist, keyid)) { + /* + * Only add the keys containing this word if this is + * our first pass (ie we have no existing key list), + * or the key contained a previous word. + */ + if (firstpass || array_find(&keylist, keyid)) { array_add(&newkeylist, keyid); } @@ -530,6 +535,7 @@ static int db4_fetch_key_text(const char *search, } ret = cursor->c_close(cursor); cursor = NULL; + firstpass = 0; db4_endtrans(); } llfree(wordlist, NULL); -- 2.39.2