diff options
author | Christian Brabandt <cb@256bit.org> | 2024-04-05 20:12:19 +0200 |
---|---|---|
committer | Christian Brabandt <cb@256bit.org> | 2024-04-05 20:12:19 +0200 |
commit | 915f3bf4c157e8f1667f52a07eb98dcecfb76875 (patch) | |
tree | 772663073d208e47b6803a18a86686621e0d9704 | |
parent | e9ff79a7c9affea970f50de2aa65f62080b55323 (diff) |
patch 9.1.0270: a few minor issues to fixv9.1.0270
The following is a collection of some small fixes:
- Problem: Vim9: funcref pointer pt leaks, when function is not found
Solution: Free funcref pointer in case of error (fixes: #14254)
- Problem: memory leak of crypt state pointer allocation fails
Solution: free crypt state pointer properly (fixes: #14253)
- Problem: Vim9: Leaking memory when compiling dict fails
Solution: Free the memory in case of error (fixes: #14252)
- Problem: Coverity complains about derefencing obj_members pointer
(after v9.1.0261)
Solution: Verify that obj_members ptr is non-null before accessing it
References: https://scan5.scan.coverity.com/#/project-view/41242/10101?selectedIssue=1596133
closes: #14412
Signed-off-by: Christian Brabandt <cb@256bit.org>
-rw-r--r-- | src/memline.c | 3 | ||||
-rw-r--r-- | src/userfunc.c | 4 | ||||
-rw-r--r-- | src/version.c | 2 | ||||
-rw-r--r-- | src/vim9execute.c | 1 | ||||
-rw-r--r-- | src/vim9expr.c | 3 |
5 files changed, 12 insertions, 1 deletions
diff --git a/src/memline.c b/src/memline.c index 5ca50fc1c9..6c63fad121 100644 --- a/src/memline.c +++ b/src/memline.c @@ -5556,7 +5556,10 @@ ml_encrypt_data( new_data = alloc(size); if (new_data == NULL) + { + crypt_free_state(state); return NULL; + } head_end = (char_u *)(&dp->db_index[dp->db_line_count]); text_start = (char_u *)dp + dp->db_txt_start; text_len = size - dp->db_txt_start; diff --git a/src/userfunc.c b/src/userfunc.c index b023c3a966..1bd1a28459 100644 --- a/src/userfunc.c +++ b/src/userfunc.c @@ -555,7 +555,9 @@ parse_argument_types( type = &t_any; for (int om = 0; om < obj_member_count; ++om) { - if (STRCMP(aname, obj_members[om].ocm_name) == 0) + if (obj_members != NULL + && STRCMP(aname, + obj_members[om].ocm_name) == 0) { type = obj_members[om].ocm_type; break; diff --git a/src/version.c b/src/version.c index 9f9386f1f5..5a005bd5d1 100644 --- a/src/version.c +++ b/src/version.c @@ -705,6 +705,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 270, +/**/ 269, /**/ 268, diff --git a/src/vim9execute.c b/src/vim9execute.c index 053f6178a8..2d128e05b4 100644 --- a/src/vim9execute.c +++ b/src/vim9execute.c @@ -4573,6 +4573,7 @@ exec_instructions(ectx_T *ectx) { SOURCING_LNUM = iptr->isn_lnum; iemsg("ufunc unexpectedly NULL for FUNCREF"); + vim_free(pt); goto theend; } if (fill_partial_and_closure(pt, ufunc, diff --git a/src/vim9expr.c b/src/vim9expr.c index 43b13d82c7..97a7f4e08a 100644 --- a/src/vim9expr.c +++ b/src/vim9expr.c @@ -1561,7 +1561,10 @@ compile_dict(char_u **arg, cctx_T *cctx, ppconst_T *ppconst) if (d == NULL) return FAIL; if (generate_ppconst(cctx, ppconst) == FAIL) + { + dict_unref(d); return FAIL; + } for (;;) { char_u *key = NULL; |