X-Git-Url: https://the.earth.li/gitweb/?a=blobdiff_plain;f=keydb_db3.c;h=6177ac70f404adb0ef0764434501e64b4c194a1a;hb=3b8600a153359953627781ce83f8c57242316096;hp=fc203a08d6404515b90caf05439e578b8049c1e2;hpb=42bcfe2cae29f375af4cf2cd3ccfa196b77a3946;p=onak.git diff --git a/keydb_db3.c b/keydb_db3.c index fc203a0..6177ac7 100644 --- a/keydb_db3.c +++ b/keydb_db3.c @@ -21,7 +21,7 @@ #include "charfuncs.h" #include "keydb.h" #include "keyid.h" -#include "keyindex.h" +#include "decodekey.h" #include "keystructs.h" #include "mem.h" #include "onak-conf.h" @@ -217,6 +217,8 @@ int fetch_key(uint64_t keyid, struct openpgp_publickey **publickey, read_openpgp_stream(buffer_fetchchar, &fetchbuf, &packets); parse_keys(packets, publickey); + free_packet_list(packets); + packets = NULL; numkeys++; } else if (ret != DB_NOTFOUND) { dbconn->err(dbconn, ret, "Problem retrieving key"); @@ -286,6 +288,7 @@ int fetch_key_text(const char *search, struct openpgp_publickey **publickey) llfind(keylist, data.data, worddb_cmp) != NULL) { newkeylist = lladd(newkeylist, data.data); + data.data = NULL; } else { free(data.data); data.data = NULL; @@ -298,9 +301,16 @@ int fetch_key_text(const char *search, struct openpgp_publickey **publickey) llfree(keylist, free); keylist = newkeylist; newkeylist = NULL; + if (data.data != NULL) { + free(data.data); + data.data = NULL; + } } + llfree(wordlist, NULL); + wordlist = NULL; - for (newkeylist = keylist; newkeylist != NULL; + for (newkeylist = keylist; + newkeylist != NULL && numkeys < config.maxkeys; newkeylist = newkeylist->next) { keyid = 0; @@ -402,6 +412,14 @@ int store_key(struct openpgp_publickey *publickey, bool intrans, bool update) dbconn->err(dbconn, ret, "Problem storing key"); } + free(storebuf.buffer); + storebuf.buffer = NULL; + storebuf.size = 0; + storebuf.offset = 0; + + free_packet_list(packets); + packets = NULL; + /* * Walk through our uids storing the words into the db with the keyid. */