]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.1.0270: a few minor issues to fix v9.1.0270
authorChristian Brabandt <cb@256bit.org>
Fri, 5 Apr 2024 18:12:19 +0000 (20:12 +0200)
committerChristian Brabandt <cb@256bit.org>
Fri, 5 Apr 2024 18:12:19 +0000 (20:12 +0200)
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>
src/memline.c
src/userfunc.c
src/version.c
src/vim9execute.c
src/vim9expr.c

index 5ca50fc1c970b4cc008cd082157329c1b1caf5df..6c63fad121a5031372c372939e835d40d4c3b7a0 100644 (file)
@@ -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;
index b023c3a966af6dde708db5297825fb5c38d494a2..1bd1a284599e6b5c97faa8718ec8a16dff4ea7cf 100644 (file)
@@ -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;
index 9f9386f1f56b34e285dba7b8afa8fe9824d082fd..5a005bd5d1451866972fcfc0e47a95981b0361a9 100644 (file)
@@ -704,6 +704,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    270,
 /**/
     269,
 /**/
index 053f6178a8177762fb76a8464a63c5243371b8c8..2d128e05b4f12493d1a78246f4630a61a1ece0a1 100644 (file)
@@ -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,
index 43b13d82c7c361a8ef24148d204c54c0a09c4b62..97a7f4e08aae9d18ae7b7ce5c70e9f8929ec4032 100644 (file)
@@ -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;