diff options
Diffstat (limited to 'src/libutil/keypairs_cache.c')
-rw-r--r-- | src/libutil/keypairs_cache.c | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/src/libutil/keypairs_cache.c b/src/libutil/keypairs_cache.c index eb9b5215c..8b8014e5d 100644 --- a/src/libutil/keypairs_cache.c +++ b/src/libutil/keypairs_cache.c @@ -31,8 +31,8 @@ #include "xxhash.h" struct rspamd_keypair_elt { - guchar nm[rspamd_cryptobox_NMBYTES]; - guchar pair[rspamd_cryptobox_PKBYTES + rspamd_cryptobox_SKBYTES]; + guchar nm[rspamd_cryptobox_MAX_NMBYTES]; + guchar pair[rspamd_cryptobox_MAX_PKBYTES + rspamd_cryptobox_MAX_SKBYTES]; }; struct rspamd_keypair_cache { @@ -90,23 +90,24 @@ rspamd_keypair_cache_process (struct rspamd_keypair_cache *c, g_assert (kp_local != NULL); g_assert (kp_remote != NULL); - memcpy (search.pair, kp_remote->pk, rspamd_cryptobox_PKBYTES); - memcpy (&search.pair[rspamd_cryptobox_PKBYTES], kp_local->sk, - rspamd_cryptobox_SKBYTES); + memset (&search, 0, sizeof (search)); + memcpy (search.pair, kp_remote->pk, rspamd_cryptobox_pk_bytes ()); + memcpy (&search.pair[rspamd_cryptobox_MAX_PKBYTES], kp_local->sk, + rspamd_cryptobox_sk_bytes ()); new = rspamd_lru_hash_lookup (c->hash, &search, time (NULL)); if (new == NULL) { - new = g_slice_alloc (sizeof (*new)); - memcpy (new->pair, kp_remote->pk, rspamd_cryptobox_PKBYTES); - memcpy (&new->pair[rspamd_cryptobox_PKBYTES], kp_local->sk, - rspamd_cryptobox_SKBYTES); + new = g_slice_alloc0 (sizeof (*new)); + memcpy (new->pair, kp_remote->pk, rspamd_cryptobox_pk_bytes ()); + memcpy (&new->pair[rspamd_cryptobox_MAX_PKBYTES], kp_local->sk, + rspamd_cryptobox_sk_bytes ()); rspamd_cryptobox_nm (new->nm, kp_remote->pk, kp_local->sk); rspamd_lru_hash_insert (c->hash, new, new, time (NULL), -1); } g_assert (new != NULL); - memcpy (kp_remote->nm, new->nm, rspamd_cryptobox_NMBYTES); + memcpy (kp_remote->nm, new->nm, rspamd_cryptobox_nm_bytes ()); kp_remote->has_nm = TRUE; #if 0 memcpy (kp_local->nm, new->nm, rspamd_cryptobox_NMBYTES); |