Patch 7.4.690
Problem:    Memory access errors when changing indent in Ex mode. Also missing
            redraw when using CTRL-U. (Knil Ino)
Solution:   Update pointers after calling ga_grow().
Files:      src/ex_getln.c


*** ../vim-7.4.689/src/ex_getln.c       2015-03-21 17:32:14.054780051 +0100
--- src/ex_getln.c      2015-04-03 16:53:12.181002764 +0200
***************
*** 2245,2250 ****
--- 2245,2253 ----
      got_int = FALSE;
      while (!got_int)
      {
+       long    sw;
+       char_u *s;
+ 
        if (ga_grow(&line_ga, 40) == FAIL)
            break;
  
***************
*** 2296,2308 ****
                msg_col = startcol;
                msg_clr_eos();
                line_ga.ga_len = 0;
!               continue;
            }
  
            if (c1 == Ctrl_T)
            {
!               long        sw = get_sw_value(curbuf);
! 
                p = (char_u *)line_ga.ga_data;
                p[line_ga.ga_len] = NUL;
                indent = get_indent_str(p, 8, FALSE);
--- 2299,2310 ----
                msg_col = startcol;
                msg_clr_eos();
                line_ga.ga_len = 0;
!               goto redraw;
            }
  
            if (c1 == Ctrl_T)
            {
!               sw = get_sw_value(curbuf);
                p = (char_u *)line_ga.ga_data;
                p[line_ga.ga_len] = NUL;
                indent = get_indent_str(p, 8, FALSE);
***************
*** 2310,2318 ****
  add_indent:
                while (get_indent_str(p, 8, FALSE) < indent)
                {
!                   char_u *s = skipwhite(p);
! 
!                   ga_grow(&line_ga, 1);
                    mch_memmove(s + 1, s, line_ga.ga_len - (s - p) + 1);
                    *s = ' ';
                    ++line_ga.ga_len;
--- 2312,2320 ----
  add_indent:
                while (get_indent_str(p, 8, FALSE) < indent)
                {
!                   ga_grow(&line_ga, 2);  /* one more for the NUL */
!                   p = (char_u *)line_ga.ga_data;
!                   s = skipwhite(p);
                    mch_memmove(s + 1, s, line_ga.ga_len - (s - p) + 1);
                    *s = ' ';
                    ++line_ga.ga_len;
***************
*** 2361,2373 ****
                {
                    p[line_ga.ga_len] = NUL;
                    indent = get_indent_str(p, 8, FALSE);
!                   --indent;
!                   indent -= indent % get_sw_value(curbuf);
                }
                while (get_indent_str(p, 8, FALSE) > indent)
                {
!                   char_u *s = skipwhite(p);
! 
                    mch_memmove(s - 1, s, line_ga.ga_len - (s - p) + 1);
                    --line_ga.ga_len;
                }
--- 2363,2377 ----
                {
                    p[line_ga.ga_len] = NUL;
                    indent = get_indent_str(p, 8, FALSE);
!                   if (indent > 0)
!                   {
!                       --indent;
!                       indent -= indent % get_sw_value(curbuf);
!                   }
                }
                while (get_indent_str(p, 8, FALSE) > indent)
                {
!                   s = skipwhite(p);
                    mch_memmove(s - 1, s, line_ga.ga_len - (s - p) + 1);
                    --line_ga.ga_len;
                }
*** ../vim-7.4.689/src/version.c        2015-04-03 14:56:43.940840314 +0200
--- src/version.c       2015-04-03 17:02:19.739047689 +0200
***************
*** 743,744 ****
--- 743,746 ----
  {   /* Add new patch number below this line */
+ /**/
+     690,
  /**/

-- 
No man may purchase alcohol without written consent from his wife.
                [real standing law in Pennsylvania, United States of America]

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