Patch 8.0.0342
Problem:    Double free when compiled with EXITFREE and setting 'ttytype'.
Solution:   Avoid setting P_ALLOCED on 'ttytype'. (Dominique Pelle,
            closes #1461)
Files:      src/option.c, src/testdir/test_options.vim


*** ../vim-8.0.0341/src/option.c        2017-02-17 14:53:11.704743399 +0100
--- src/option.c        2017-02-19 20:25:48.489199941 +0100
***************
*** 3775,3781 ****
        if (options[i].indir == PV_NONE)
        {
            /* global option: free value and default value. */
!           if (options[i].flags & P_ALLOCED && options[i].var != NULL)
                free_string_option(*(char_u **)options[i].var);
            if (options[i].flags & P_DEF_ALLOCED)
                free_string_option(options[i].def_val[VI_DEFAULT]);
--- 3775,3781 ----
        if (options[i].indir == PV_NONE)
        {
            /* global option: free value and default value. */
!           if ((options[i].flags & P_ALLOCED) && options[i].var != NULL)
                free_string_option(*(char_u **)options[i].var);
            if (options[i].flags & P_DEF_ALLOCED)
                free_string_option(options[i].def_val[VI_DEFAULT]);
***************
*** 5929,5936 ****
--- 5929,5942 ----
        else if (set_termname(T_NAME) == FAIL)
            errmsg = (char_u *)N_("E522: Not found in termcap");
        else
+       {
            /* Screen colors may have changed. */
            redraw_later_clear();
+ 
+           /* Both 'term' and 'ttytype' point to T_NAME, only set the
+            * P_ALLOCED flag on 'term'. */
+           opt_idx = findoption((char_u *)"term");
+       }
      }
  
      /* 'backupcopy' */
*** ../vim-8.0.0341/src/testdir/test_options.vim        2017-02-17 
14:53:11.704743399 +0100
--- src/testdir/test_options.vim        2017-02-19 20:30:01.851273297 +0100
***************
*** 235,237 ****
--- 235,256 ----
    call assert_fails("set showbreak=\x01", 'E595:')
    call assert_fails('set t_foo=', 'E846:')
  endfunc
+ 
+ func Test_set_ttytype()
+   if !has('gui_running') && has('unix')
+     " Setting 'ttytype' used to cause a double-free when exiting vim and
+     " when vim is compiled with -DEXITFREE.
+     set ttytype=ansi
+     call assert_equal('ansi', &ttytype)
+     call assert_equal(&ttytype, &term)
+     set ttytype=xterm
+     call assert_equal('xterm', &ttytype)
+     call assert_equal(&ttytype, &term)
+     " FIXME: "set ttytype=" gives E522 instead of E529
+     " in travis on some builds. Why? Commented out this test for now.
+     " call assert_fails('set ttytype=', 'E529:')
+     call assert_fails('set ttytype=xxx', 'E522:')
+     set ttytype&
+     call assert_equal(&ttytype, &term)
+   endif
+ endfunc
*** ../vim-8.0.0341/src/version.c       2017-02-19 15:26:14.353270128 +0100
--- src/version.c       2017-02-19 20:14:05.002473758 +0100
***************
*** 766,767 ****
--- 766,769 ----
  {   /* Add new patch number below this line */
+ /**/
+     342,
  /**/

-- 
Engineers are always delighted to share wisdom, even in areas in which they
have no experience whatsoever.  Their logic provides them with inherent
insight into any field of expertise.  This can be a problem when dealing with
the illogical people who believe that knowledge can only be derived through
experience.
                                (Scott Adams - The Dilbert principle)

 /// 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