| To: vim_dev@googlegroups.com |
| Subject: Patch 7.4.403 |
| 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.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 |
| |
| |
| |
| |
| |
| *** 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) |
| { |
| |
| |
| |
| *** 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 |
| |
| |
| |
| *** 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??")); |
| |
| |
| |
| *** 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 -- 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 /// |