Avoid a memory leak of a public_key_entry if the passed public_keys pointer is NULL because in this case the entry is lost. For this particular case to work we would need public keys to be passed in as 'struct public_key_entry **public_keys' so that '*public_keys = entry' could be assign. However, this change would propagate all the way to the API of the library and we don't want to change existing functions' signature.
This change should not have any noticeable side-effect since the resolved case did not work before but the newly allocated entry was lost. Signed-off-by: Stefan Berger <[email protected]> --- src/libimaevm.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/libimaevm.c b/src/libimaevm.c index 6512ee5..d8d5dbc 100644 --- a/src/libimaevm.c +++ b/src/libimaevm.c @@ -378,17 +378,16 @@ static EVP_PKEY *find_keyid(struct public_key_entry *public_keys, tail = entry; } - /* add unknown keys to list */ - entry = calloc(1, sizeof(struct public_key_entry)); - if (!entry) { - perror("calloc"); - return 0; - } - entry->keyid = keyid; - if (tail) + /* add unknown keys to tail of list */ + if (tail) { + entry = calloc(1, sizeof(struct public_key_entry)); + if (!entry) { + perror("calloc"); + return 0; + } + entry->keyid = keyid; tail->next = entry; - else - public_keys = entry; + } log_err("key %d: %x (unknown keyid)\n", i, __be32_to_cpup(&keyid)); return 0; } -- 2.53.0
