Mercurial > vim
diff src/crypt.c @ 16429:a1229400434a v8.1.1219
patch 8.1.1219: not checking for NULL return from alloc()
commit https://github.com/vim/vim/commit/6ee9658774942f7448af700fc04df0335796a3db
Author: Bram Moolenaar <Bram@vim.org>
Date: Sat Apr 27 22:06:37 2019 +0200
patch 8.1.1219: not checking for NULL return from alloc()
Problem: Not checking for NULL return from alloc().
Solution: Add checks. (Martin Kunev, closes https://github.com/vim/vim/issues/4303, closes https://github.com/vim/vim/issues/4174)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sat, 27 Apr 2019 22:15:05 +0200 |
parents | 3d6b282e2d6e |
children | fc58fee685e2 |
line wrap: on
line diff
--- a/src/crypt.c +++ b/src/crypt.c @@ -43,7 +43,7 @@ typedef struct { int (* self_test_fn)(); // Function pointer for initializing encryption/decryption. - void (* init_fn)(cryptstate_T *state, char_u *key, + int (* init_fn)(cryptstate_T *state, char_u *key, char_u *salt, int salt_len, char_u *seed, int seed_len); /* Function pointers for encoding/decoding from one buffer into another. @@ -243,6 +243,7 @@ crypt_self_test(void) /* * Allocate a crypt state and initialize it. + * Return NULL for failure. */ cryptstate_T * crypt_create( @@ -255,8 +256,16 @@ crypt_create( { cryptstate_T *state = (cryptstate_T *)alloc((int)sizeof(cryptstate_T)); + if (state == NULL) + return state; + state->method_nr = method_nr; - cryptmethods[method_nr].init_fn(state, key, salt, salt_len, seed, seed_len); + if (cryptmethods[method_nr].init_fn( + state, key, salt, salt_len, seed, seed_len) == FAIL) + { + vim_free(state); + return NULL; + } return state; }