Patch 8.1.0936
Problem:    May leak memory when using 'vartabstop'. (Kuang-che Wu)
Solution:   Fix handling allocated memory for 'vartabstop'. (closes #3976)
Files:      src/option.c, src/buffer.c


*** ../vim-8.1.0935/src/option.c        2019-02-16 15:09:21.213946217 +0100
--- src/option.c        2019-02-16 18:41:47.573680439 +0100
***************
*** 5594,5600 ****
--- 5594,5602 ----
      (void)check_clipboard_option();
  #endif
  #ifdef FEAT_VARTABS
+     vim_free(curbuf->b_p_vsts_array);
      tabstop_set(curbuf->b_p_vsts, &curbuf->b_p_vsts_array);
+     vim_free(curbuf->b_p_vts_array);
      tabstop_set(curbuf->b_p_vts,  &curbuf->b_p_vts_array);
  #endif
  }
***************
*** 7572,7585 ****
            if (errmsg == NULL)
            {
                int *oldarray = curbuf->b_p_vts_array;
                if (tabstop_set(*varp, &(curbuf->b_p_vts_array)))
                {
!                   if (oldarray)
!                       vim_free(oldarray);
  #ifdef FEAT_FOLDING
                    if (foldmethodIsIndent(curwin))
                        foldUpdateAll(curwin);
! #endif /* FEAT_FOLDING */
                }
                else
                    errmsg = e_invarg;
--- 7574,7587 ----
            if (errmsg == NULL)
            {
                int *oldarray = curbuf->b_p_vts_array;
+ 
                if (tabstop_set(*varp, &(curbuf->b_p_vts_array)))
                {
!                   vim_free(oldarray);
  #ifdef FEAT_FOLDING
                    if (foldmethodIsIndent(curwin))
                        foldUpdateAll(curwin);
! #endif
                }
                else
                    errmsg = e_invarg;
***************
*** 12706,12715 ****
      return check_opt_strings(p, p_ff_values, FALSE);
  }
  
! #ifdef FEAT_VARTABS
  
  /*
   * Set the integer values corresponding to the string setting of 'vartabstop'.
   */
      int
  tabstop_set(char_u *var, int **array)
--- 12708,12718 ----
      return check_opt_strings(p, p_ff_values, FALSE);
  }
  
! #if defined(FEAT_VARTABS) || defined(PROTO)
  
  /*
   * Set the integer values corresponding to the string setting of 'vartabstop'.
+  * "array" will be set, caller must free it if needed.
   */
      int
  tabstop_set(char_u *var, int **array)
***************
*** 12752,12757 ****
--- 12755,12762 ----
      }
  
      *array = (int *)alloc((unsigned) ((valcount + 1) * sizeof(int)));
+     if (*array == NULL)
+       return FALSE;
      (*array)[0] = valcount;
  
      t = 1;
*** ../vim-8.1.0935/src/buffer.c        2019-02-12 22:37:24.177961507 +0100
--- src/buffer.c        2019-02-16 18:36:24.507317493 +0100
***************
*** 2170,2178 ****
        vim_free(buf->b_p_vsts_array);
      buf->b_p_vsts_array = NULL;
      clear_string_option(&buf->b_p_vts);
!     if (buf->b_p_vts_array)
!       vim_free(buf->b_p_vts_array);
!     buf->b_p_vts_array = NULL;
  #endif
  #ifdef FEAT_KEYMAP
      clear_string_option(&buf->b_p_keymap);
--- 2170,2176 ----
        vim_free(buf->b_p_vsts_array);
      buf->b_p_vsts_array = NULL;
      clear_string_option(&buf->b_p_vts);
!     VIM_CLEAR(buf->b_p_vts_array);
  #endif
  #ifdef FEAT_KEYMAP
      clear_string_option(&buf->b_p_keymap);
*** ../vim-8.1.0935/src/version.c       2019-02-16 18:07:53.723796781 +0100
--- src/version.c       2019-02-16 19:04:41.060527328 +0100
***************
*** 781,782 ****
--- 781,784 ----
  {   /* Add new patch number below this line */
+ /**/
+     936,
  /**/

-- 
BEDEVERE:        Why do you think she is a witch?
SECOND VILLAGER: She turned me into a newt.
BEDEVERE:        A newt?
SECOND VILLAGER: (After looking at himself for some time) I got better.
                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui