]> granicus.if.org Git - vim/commitdiff
patch 8.2.4783: Coverity warns for leaking memory v8.2.4783
authorBram Moolenaar <Bram@vim.org>
Mon, 18 Apr 2022 14:45:23 +0000 (15:45 +0100)
committerBram Moolenaar <Bram@vim.org>
Mon, 18 Apr 2022 14:45:23 +0000 (15:45 +0100)
Problem:    Coverity warns for leaking memory.
Solution:   Use another strategy freeing "theline".

src/evalvars.c
src/version.c

index 5f04406265d4a54c7c2e1913eeb4ed7726b22865..c83aa61c9f8b489b540abbfb12b7be196c84aeca 100644 (file)
@@ -684,7 +684,7 @@ eval_all_expr_in_str(char_u *str)
     list_T *
 heredoc_get(exarg_T *eap, char_u *cmd, int script_get)
 {
-    char_u     *theline;
+    char_u     *theline = NULL;
     char_u     *marker;
     list_T     *l;
     char_u     *p;
@@ -776,6 +776,7 @@ heredoc_get(exarg_T *eap, char_u *cmd, int script_get)
        int     mi = 0;
        int     ti = 0;
 
+       vim_free(theline);
        theline = eap->getline(NUL, eap->cookie, 0, FALSE);
        if (theline == NULL)
        {
@@ -789,18 +790,12 @@ heredoc_get(exarg_T *eap, char_u *cmd, int script_get)
                && STRNCMP(theline, *eap->cmdlinep, marker_indent_len) == 0)
            mi = marker_indent_len;
        if (STRCMP(marker, theline + mi) == 0)
-       {
-           vim_free(theline);
            break;
-       }
 
        // If expression evaluation failed in the heredoc, then skip till the
        // end marker.
        if (eval_failed)
-       {
-           vim_free(theline);
            continue;
-       }
 
        if (text_indent_len == -1 && *theline != NUL)
        {
@@ -827,7 +822,6 @@ heredoc_get(exarg_T *eap, char_u *cmd, int script_get)
            if (str == NULL)
            {
                // expression evaluation failed
-               vim_free(theline);
                eval_failed = TRUE;
                continue;
            }
@@ -837,8 +831,8 @@ heredoc_get(exarg_T *eap, char_u *cmd, int script_get)
 
        if (list_append_string(l, str, -1) == FAIL)
            break;
-       vim_free(theline);
     }
+    vim_free(theline);
     vim_free(text_indent);
 
     if (eval_failed)
index 7f792d250deae4fe3919946787c23de776270eb9..a66d7d5e8d110dd224ce173aa3cefd1acf533a24 100644 (file)
@@ -746,6 +746,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    4783,
 /**/
     4782,
 /**/