Blob Blame History Raw
To: vim_dev@googlegroups.com
Subject: Patch 7.3.822
Fcc: outbox
From: Bram Moolenaar <Bram@moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
------------

Patch 7.3.822 (after 7.3.799)
Problem:    Crash when accessing freed buffer.
Solution:   Get 'textwidth' in caller of enter_buffer(). (Christian Brabandt)
Files:	    src/buffer.c


*** ../vim-7.3.821/src/buffer.c	2013-02-06 18:44:57.000000000 +0100
--- src/buffer.c	2013-02-17 15:10:44.000000000 +0100
***************
*** 82,87 ****
--- 82,90 ----
  #ifdef FEAT_AUTOCMD
      buf_T	*old_curbuf;
  #endif
+ #ifdef FEAT_SYN_HL
+     long	old_tw = curbuf->b_p_tw;
+ #endif
  
      /*
       * The 'readonly' flag is only set when BF_NEVERLOADED is being reset.
***************
*** 113,118 ****
--- 116,125 ----
  	}
  	EMSG(_("E83: Cannot allocate buffer, using other one..."));
  	enter_buffer(curbuf);
+ #ifdef FEAT_SYN_HL
+ 	if (old_tw != curbuf->b_p_tw)
+ 	    check_colorcolumn(curwin);
+ #endif
  	return FAIL;
      }
  
***************
*** 786,791 ****
--- 793,801 ----
  # if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
      cleanup_T	cs;
  # endif
+ #ifdef FEAT_SYN_HL
+     long	old_tw = curbuf->b_p_tw;
+ #endif
  
      if (swap_exists_action == SEA_QUIT)
      {
***************
*** 804,810 ****
--- 814,826 ----
  	if (!buf_valid(old_curbuf) || old_curbuf == curbuf)
  	    old_curbuf = buflist_new(NULL, NULL, 1L, BLN_CURBUF | BLN_LISTED);
  	if (old_curbuf != NULL)
+ 	{
  	    enter_buffer(old_curbuf);
+ #ifdef FEAT_SYN_HL
+ 	    if (old_tw != curbuf->b_p_tw)
+ 		check_colorcolumn(curwin);
+ #endif
+ 	}
  	/* If "old_curbuf" is NULL we are in big trouble here... */
  
  # if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
***************
*** 1364,1369 ****
--- 1380,1388 ----
      buf_T	*prevbuf;
      int		unload = (action == DOBUF_UNLOAD || action == DOBUF_DEL
  						     || action == DOBUF_WIPE);
+ #ifdef FEAT_SYN_HL
+     long	old_tw = curbuf->b_p_tw;
+ #endif
  
      setpcmark();
      if (!cmdmod.keepalt)
***************
*** 1430,1450 ****
  # endif
         )
  #endif
  	enter_buffer(buf);
  }
  
  /*
   * Enter a new current buffer.
!  * Old curbuf must have been abandoned already!
   */
      void
  enter_buffer(buf)
      buf_T	*buf;
  {
- #ifdef FEAT_SYN_HL
-     long old_tw = curbuf->b_p_tw;
- #endif
- 
      /* Copy buffer and window local option values.  Not for a help buffer. */
      buf_copy_options(buf, BCO_ENTER | BCO_NOHELP);
      if (!buf->b_help)
--- 1449,1472 ----
  # endif
         )
  #endif
+     {
  	enter_buffer(buf);
+ #ifdef FEAT_SYN_HL
+ 	if (old_tw != curbuf->b_p_tw)
+ 	    check_colorcolumn(curwin);
+ #endif
+     }
  }
  
  /*
   * Enter a new current buffer.
!  * Old curbuf must have been abandoned already!  This also means "curbuf" may
!  * be pointing to freed memory.
   */
      void
  enter_buffer(buf)
      buf_T	*buf;
  {
      /* Copy buffer and window local option values.  Not for a help buffer. */
      buf_copy_options(buf, BCO_ENTER | BCO_NOHELP);
      if (!buf->b_help)
***************
*** 1468,1475 ****
  
  #ifdef FEAT_SYN_HL
      curwin->w_s = &(buf->b_s);
-     if (old_tw != buf->b_p_tw)
- 	check_colorcolumn(curwin);
  #endif
  
      /* Cursor on first line by default. */
--- 1490,1495 ----
*** ../vim-7.3.821/src/version.c	2013-02-16 18:16:11.000000000 +0100
--- src/version.c	2013-02-17 15:35:41.000000000 +0100
***************
*** 727,728 ****
--- 727,730 ----
  {   /* Add new patch number below this line */
+ /**/
+     822,
  /**/

-- 
Clothes make the man.  Naked people have little or no influence on society.
                               -- Mark Twain (Samuel Clemens) (1835-1910)

 /// Bram Moolenaar -- Bram@Moolenaar.net -- 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    ///