Patch 7.4.403
Problem:    Valgrind reports errors when running test 72. (Dominique Pelle)
Solution:   Reset the local 'cryptmethod' option before storing the seed.
            Set the seed in the memfile even when there is no block0 yet.
Files:      src/fileio.c, src/option.c, src/memline.c


*** ../vim-7.4.402/src/fileio.c 2014-08-10 13:34:59.056785459 +0200
--- src/fileio.c        2014-08-13 21:27:51.452857400 +0200
***************
*** 2944,2949 ****
--- 2944,2950 ----
         * Avoids accidentally overwriting the file with garbage. */
        curbuf->b_p_ro = TRUE;
  
+       /* Set the cryptmethod local to the buffer. */
        crypt_set_cm_option(curbuf, method);
        if (cryptkey == NULL && !*did_ask)
        {
*** ../vim-7.4.402/src/option.c 2014-08-10 13:34:59.060785459 +0200
--- src/option.c        2014-08-13 21:48:49.924876683 +0200
***************
*** 6163,6168 ****
--- 6163,6176 ----
                p_cm = vim_strsave((char_u *)"zip");
                new_value_alloced = TRUE;
            }
+           /* When using ":set cm=name" the local value is going to be empty.
+            * Do that here, otherwise the crypt functions will still use the
+            * local value. */
+           if ((opt_flags & (OPT_LOCAL | OPT_GLOBAL)) == 0)
+           {
+               free_string_option(curbuf->b_p_cm);
+               curbuf->b_p_cm = empty_option;
+           }
  
            /* Need to update the swapfile when the effective method changed.
             * Set "s" to the effective old value, "p" to the effective new
*** ../vim-7.4.402/src/memline.c        2014-08-10 13:34:59.060785459 +0200
--- src/memline.c       2014-08-13 21:52:40.076880210 +0200
***************
*** 235,240 ****
--- 235,241 ----
  } upd_block0_T;
  
  #ifdef FEAT_CRYPT
+ static void ml_set_mfp_crypt __ARGS((buf_T *buf));
  static void ml_set_b0_crypt __ARGS((buf_T *buf, ZERO_BL *b0p));
  #endif
  static int ml_check_b0_id __ARGS((ZERO_BL *b0p));
***************
*** 433,438 ****
--- 434,458 ----
  
  #if defined(FEAT_CRYPT) || defined(PROTO)
  /*
+  * Prepare encryption for "buf" for the current key and method.
+  */
+     static void
+ ml_set_mfp_crypt(buf)
+     buf_T     *buf;
+ {
+     if (*buf->b_p_key != NUL)
+     {
+       int method_nr = crypt_get_method_nr(buf);
+ 
+       if (method_nr > CRYPT_M_ZIP)
+       {
+           /* Generate a seed and store it in the memfile. */
+           sha2_seed(buf->b_ml.ml_mfp->mf_seed, MF_SEED_LEN, NULL, 0);
+       }
+     }
+ }
+ 
+ /*
   * Prepare encryption for "buf" with block 0 "b0p".
   */
      static void
***************
*** 915,922 ****
      ZERO_BL   *b0p;
  
      mfp = buf->b_ml.ml_mfp;
!     if (mfp == NULL || (hp = mf_get(mfp, (blocknr_T)0, 1)) == NULL)
        return;
      b0p = (ZERO_BL *)(hp->bh_data);
      if (ml_check_b0_id(b0p) == FAIL)
        EMSG(_("E304: ml_upd_block0(): Didn't get block 0??"));
--- 935,953 ----
      ZERO_BL   *b0p;
  
      mfp = buf->b_ml.ml_mfp;
!     if (mfp == NULL)
!       return;
!     hp = mf_get(mfp, (blocknr_T)0, 1);
!     if (hp == NULL)
!     {
! #ifdef FEAT_CRYPT
!       /* Possibly update the seed in the memfile before there is a block0. */
!       if (what == UB_CRYPT)
!           ml_set_mfp_crypt(buf);
! #endif
        return;
+     }
+ 
      b0p = (ZERO_BL *)(hp->bh_data);
      if (ml_check_b0_id(b0p) == FAIL)
        EMSG(_("E304: ml_upd_block0(): Didn't get block 0??"));
*** ../vim-7.4.402/src/version.c        2014-08-12 20:14:28.795371197 +0200
--- src/version.c       2014-08-13 17:23:02.964632329 +0200
***************
*** 743,744 ****
--- 743,746 ----
  {   /* Add new patch number below this line */
+ /**/
+     403,
  /**/

-- 
How To Keep A Healthy Level Of Insanity:
9. As often as possible, skip rather than walk.

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