forked from aniani/vim
updated for version 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.
This commit is contained in:
@@ -2944,6 +2944,7 @@ check_for_cryptkey(cryptkey, ptr, sizep, filesizep, newfile, fname, did_ask)
|
|||||||
* Avoids accidentally overwriting the file with garbage. */
|
* Avoids accidentally overwriting the file with garbage. */
|
||||||
curbuf->b_p_ro = TRUE;
|
curbuf->b_p_ro = TRUE;
|
||||||
|
|
||||||
|
/* Set the cryptmethod local to the buffer. */
|
||||||
crypt_set_cm_option(curbuf, method);
|
crypt_set_cm_option(curbuf, method);
|
||||||
if (cryptkey == NULL && !*did_ask)
|
if (cryptkey == NULL && !*did_ask)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -235,6 +235,7 @@ typedef enum {
|
|||||||
} upd_block0_T;
|
} upd_block0_T;
|
||||||
|
|
||||||
#ifdef FEAT_CRYPT
|
#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));
|
static void ml_set_b0_crypt __ARGS((buf_T *buf, ZERO_BL *b0p));
|
||||||
#endif
|
#endif
|
||||||
static int ml_check_b0_id __ARGS((ZERO_BL *b0p));
|
static int ml_check_b0_id __ARGS((ZERO_BL *b0p));
|
||||||
@@ -432,6 +433,25 @@ error:
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if defined(FEAT_CRYPT) || defined(PROTO)
|
#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".
|
* Prepare encryption for "buf" with block 0 "b0p".
|
||||||
*/
|
*/
|
||||||
@@ -915,8 +935,19 @@ ml_upd_block0(buf, what)
|
|||||||
ZERO_BL *b0p;
|
ZERO_BL *b0p;
|
||||||
|
|
||||||
mfp = buf->b_ml.ml_mfp;
|
mfp = buf->b_ml.ml_mfp;
|
||||||
if (mfp == NULL || (hp = mf_get(mfp, (blocknr_T)0, 1)) == NULL)
|
if (mfp == NULL)
|
||||||
return;
|
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);
|
b0p = (ZERO_BL *)(hp->bh_data);
|
||||||
if (ml_check_b0_id(b0p) == FAIL)
|
if (ml_check_b0_id(b0p) == FAIL)
|
||||||
EMSG(_("E304: ml_upd_block0(): Didn't get block 0??"));
|
EMSG(_("E304: ml_upd_block0(): Didn't get block 0??"));
|
||||||
|
|||||||
@@ -6163,6 +6163,14 @@ did_set_string_option(opt_idx, varp, new_value_alloced, oldval, errbuf,
|
|||||||
p_cm = vim_strsave((char_u *)"zip");
|
p_cm = vim_strsave((char_u *)"zip");
|
||||||
new_value_alloced = TRUE;
|
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.
|
/* Need to update the swapfile when the effective method changed.
|
||||||
* Set "s" to the effective old value, "p" to the effective new
|
* Set "s" to the effective old value, "p" to the effective new
|
||||||
|
|||||||
@@ -741,6 +741,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
403,
|
||||||
/**/
|
/**/
|
||||||
402,
|
402,
|
||||||
/**/
|
/**/
|
||||||
|
|||||||
Reference in New Issue
Block a user