diff --git a/opendkim/opendkim-db.c b/opendkim/opendkim-db.c index f4f66aa..4593162 100644 --- a/opendkim/opendkim-db.c +++ b/opendkim/opendkim-db.c @@ -6003,9 +6003,16 @@ dkimf_db_walk(DKIMF_DB db, _Bool first, void *key, size_t *keylen, val = (char *) odbx_field_value(result, c + 1); - req[c].dbdata_buflen = strlcpy(req[c].dbdata_buffer, - val, - req[c].dbdata_buflen); + if (val == NULL) + { + req[c].dbdata_buflen = 0; + } + else + { + req[c].dbdata_buflen = strlcpy(req[c].dbdata_buffer, + val, + req[c].dbdata_buflen); + } } } } diff --git a/opendkim/opendkim.c b/opendkim/opendkim.c index d4178ad..bb2eaa6 100644 --- a/opendkim/opendkim.c +++ b/opendkim/opendkim.c @@ -8207,13 +8207,17 @@ dkimf_config_load(struct config *data, struct dkimf_config *conf, dbd[2].dbdata_buffer = keydata; dbd[2].dbdata_buflen = sizeof keydata - 1; dbd[2].dbdata_flags = DKIMF_DB_DATA_BINARY; + if (dkimf_db_get(conf->conf_keytabledb, keyname, strlen(keyname), dbd, 3, &found) != 0 || - !found) + !found || + dbd[0].dbdata_buflen == 0 || + dbd[1].dbdata_buflen == 0 || + dbd[2].dbdata_buflen == 0) { snprintf(err, errlen, - "could not find valid key \"%s\" in KeyTable", + "could not find valid key record \"%s\" in KeyTable", keyname); return -1; }