mirror of
https://github.com/vim/vim.git
synced 2025-09-25 03:54:15 -04:00
updated for version 7.4.009
Problem: When a file was not decrypted (yet), writing it may destroy the contents. Solution: Mark the file as readonly until decryption was done. (Christian Brabandt)
This commit is contained in:
@@ -2926,9 +2926,14 @@ check_for_cryptkey(cryptkey, ptr, sizep, filesizep, newfile, fname, did_ask)
|
|||||||
int *did_ask; /* flag: whether already asked for key */
|
int *did_ask; /* flag: whether already asked for key */
|
||||||
{
|
{
|
||||||
int method = crypt_method_from_magic((char *)ptr, *sizep);
|
int method = crypt_method_from_magic((char *)ptr, *sizep);
|
||||||
|
int b_p_ro = curbuf->b_p_ro;
|
||||||
|
|
||||||
if (method >= 0)
|
if (method >= 0)
|
||||||
{
|
{
|
||||||
|
/* Mark the buffer as read-only until the decryption has taken place.
|
||||||
|
* Avoids accidentally overwriting the file with garbage. */
|
||||||
|
curbuf->b_p_ro = TRUE;
|
||||||
|
|
||||||
set_crypt_method(curbuf, method);
|
set_crypt_method(curbuf, method);
|
||||||
if (method > 0)
|
if (method > 0)
|
||||||
(void)blowfish_self_test();
|
(void)blowfish_self_test();
|
||||||
@@ -2977,6 +2982,8 @@ check_for_cryptkey(cryptkey, ptr, sizep, filesizep, newfile, fname, did_ask)
|
|||||||
*sizep -= CRYPT_MAGIC_LEN + salt_len + seed_len;
|
*sizep -= CRYPT_MAGIC_LEN + salt_len + seed_len;
|
||||||
mch_memmove(ptr, ptr + CRYPT_MAGIC_LEN + salt_len + seed_len,
|
mch_memmove(ptr, ptr + CRYPT_MAGIC_LEN + salt_len + seed_len,
|
||||||
(size_t)*sizep);
|
(size_t)*sizep);
|
||||||
|
/* Restore the read-only flag. */
|
||||||
|
curbuf->b_p_ro = b_p_ro;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* When starting to edit a new file which does not have encryption, clear
|
/* When starting to edit a new file which does not have encryption, clear
|
||||||
|
@@ -727,6 +727,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 */
|
||||||
|
/**/
|
||||||
|
9,
|
||||||
/**/
|
/**/
|
||||||
8,
|
8,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user