Blob Blame History Raw
To: vim-dev@vim.org
Subject: patch 7.0.231
Fcc: outbox
From: Bram Moolenaar <Bram@moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.0.231
Problem:    When recovering from a swap file the page size is likely to be
	    different from the minimum.  The block used for the first page
	    then has a buffer of the wrong size, causing a crash when it's
	    reused later.  (Zephaniah Hull)
Solution:   Reallocate the buffer when the page size changes.  Also check that
	    the page size is at least the minimum value.
Files:	    src/memline.c


*** ../vim-7.0.230/src/memline.c	Tue Mar  6 20:27:03 2007
--- src/memline.c	Thu Apr 19 16:10:39 2007
***************
*** 1015,1032 ****
--- 1015,1053 ----
  	msg_end();
  	goto theend;
      }
+ 
      /*
       * If we guessed the wrong page size, we have to recalculate the
       * highest block number in the file.
       */
      if (mfp->mf_page_size != (unsigned)char_to_long(b0p->b0_page_size))
      {
+ 	unsigned previous_page_size = mfp->mf_page_size;
+ 
  	mf_new_page_size(mfp, (unsigned)char_to_long(b0p->b0_page_size));
+ 	if (mfp->mf_page_size < previous_page_size)
+ 	{
+ 	    msg_start();
+ 	    msg_outtrans_attr(mfp->mf_fname, attr | MSG_HIST);
+ 	    MSG_PUTS_ATTR(_(" has been damaged (page size is smaller than minimum value).\n"),
+ 			attr | MSG_HIST);
+ 	    msg_end();
+ 	    goto theend;
+ 	}
  	if ((size = lseek(mfp->mf_fd, (off_t)0L, SEEK_END)) <= 0)
  	    mfp->mf_blocknr_max = 0;	    /* no file or empty file */
  	else
  	    mfp->mf_blocknr_max = (blocknr_T)(size / mfp->mf_page_size);
  	mfp->mf_infile_count = mfp->mf_blocknr_max;
+ 
+ 	/* need to reallocate the memory used to store the data */
+ 	p = alloc(mfp->mf_page_size);
+ 	if (p == NULL)
+ 	    goto theend;
+ 	mch_memmove(p, hp->bh_data, previous_page_size);
+ 	vim_free(hp->bh_data);
+ 	hp->bh_data = p;
+ 	b0p = (ZERO_BL *)(hp->bh_data);
      }
  
  /*
*** ../vim-7.0.230/src/version.c	Thu Apr 26 17:08:16 2007
--- src/version.c	Thu Apr 26 17:11:38 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     231,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
23. You can't call your mother...she doesn't have a modem.

 /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///