From ba8badd6df39b9f73249bb34d80d1a1984bf555c Mon Sep 17 00:00:00 2001 From: Giovanni Bajo Date: Wed, 25 Apr 2012 17:39:12 +0200 Subject: [PATCH] Fix bug in keydata_alloc() --- src/cache.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/cache.c b/src/cache.c index 6fdeba2..8bd7bfd 100644 --- a/src/cache.c +++ b/src/cache.c @@ -1333,6 +1333,8 @@ struct keydata *keydata_alloc(char *data, size_t len) { struct keydata *block, *ret = NULL; struct keydata **prev = &ret; + size_t blen; + while (len > 0) { if (keyblock_free) @@ -1350,9 +1352,10 @@ struct keydata *keydata_alloc(char *data, size_t len) return NULL; } - memcpy(block->key, data, len > KEYBLOCK_LEN ? KEYBLOCK_LEN : len); - data += KEYBLOCK_LEN; - len -= KEYBLOCK_LEN; + blen = len > KEYBLOCK_LEN ? KEYBLOCK_LEN : len; + memcpy(block->key, data, blen); + data += blen; + len -= blen; *prev = block; prev = &block->next; block->next = NULL;