]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
mail-crypt: Ensure array is created before accessing it
authorAki Tuomi <aki.tuomi@dovecot.fi>
Wed, 14 Dec 2016 08:23:17 +0000 (10:23 +0200)
committerGitLab <gitlab@git.dovecot.net>
Wed, 14 Dec 2016 15:19:50 +0000 (17:19 +0200)
Fixes segmentation fault on fs-crypt when keys are not
configured.

src/plugins/mail-crypt/mail-crypt-global-key.c
src/plugins/mail-crypt/test-mail-global-key.c

index f31c90117427118b1258db65a60e11bd39c227f4..7ba47063e1cb5437a54413012227f445f9546be7 100644 (file)
@@ -161,6 +161,9 @@ mail_crypt_global_key_find(struct mail_crypt_global_keys *global_keys,
 {
        const struct mail_crypt_global_private_key *priv_key;
 
+       if (!array_is_created(&global_keys->private_keys))
+               return NULL;
+
        array_foreach(&global_keys->private_keys, priv_key) {
                if (strcmp(priv_key->key_id, pubkey_digest) == 0)
                        return priv_key->key;
index 2fc8eac9929dfbffcf9f73b021d425a8a160e7a8..c1f04bb51589b5882c09f4f4d7aa7ebced369d1e 100644 (file)
@@ -94,6 +94,18 @@ static void test_try_load_keys(void)
        test_end();
 }
 
+static void test_empty_keyset(void)
+{
+       test_begin("test_empty_keyset");
+
+       /* this should not crash */
+       struct mail_crypt_global_keys keys;
+       memset(&keys, 0, sizeof(keys));
+       test_assert(mail_crypt_global_key_find(&keys, "423423423423") == NULL);
+
+       test_end();
+}
+
 static void test_teardown(void)
 {
        array_free(&fs_set.plugin_envs);
@@ -105,6 +117,7 @@ int main(void)
        void (*tests[])(void)  = {
                test_setup,
                test_try_load_keys,
+               test_empty_keyset,
                test_teardown,
                NULL
        };