mirror of
https://github.com/vim/vim.git
synced 2025-09-23 03:43:49 -04:00
updated for version 7.3.822
Problem: Crash when accessing freed buffer. Solution: Get 'textwidth' in caller of enter_buffer(). (Christian Brabandt)
This commit is contained in:
34
src/buffer.c
34
src/buffer.c
@@ -82,6 +82,9 @@ open_buffer(read_stdin, eap, flags)
|
|||||||
#ifdef FEAT_AUTOCMD
|
#ifdef FEAT_AUTOCMD
|
||||||
buf_T *old_curbuf;
|
buf_T *old_curbuf;
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef FEAT_SYN_HL
|
||||||
|
long old_tw = curbuf->b_p_tw;
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The 'readonly' flag is only set when BF_NEVERLOADED is being reset.
|
* The 'readonly' flag is only set when BF_NEVERLOADED is being reset.
|
||||||
@@ -113,6 +116,10 @@ open_buffer(read_stdin, eap, flags)
|
|||||||
}
|
}
|
||||||
EMSG(_("E83: Cannot allocate buffer, using other one..."));
|
EMSG(_("E83: Cannot allocate buffer, using other one..."));
|
||||||
enter_buffer(curbuf);
|
enter_buffer(curbuf);
|
||||||
|
#ifdef FEAT_SYN_HL
|
||||||
|
if (old_tw != curbuf->b_p_tw)
|
||||||
|
check_colorcolumn(curwin);
|
||||||
|
#endif
|
||||||
return FAIL;
|
return FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -786,6 +793,9 @@ handle_swap_exists(old_curbuf)
|
|||||||
# if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
|
# if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
|
||||||
cleanup_T cs;
|
cleanup_T cs;
|
||||||
# endif
|
# endif
|
||||||
|
#ifdef FEAT_SYN_HL
|
||||||
|
long old_tw = curbuf->b_p_tw;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (swap_exists_action == SEA_QUIT)
|
if (swap_exists_action == SEA_QUIT)
|
||||||
{
|
{
|
||||||
@@ -804,7 +814,13 @@ handle_swap_exists(old_curbuf)
|
|||||||
if (!buf_valid(old_curbuf) || old_curbuf == curbuf)
|
if (!buf_valid(old_curbuf) || old_curbuf == curbuf)
|
||||||
old_curbuf = buflist_new(NULL, NULL, 1L, BLN_CURBUF | BLN_LISTED);
|
old_curbuf = buflist_new(NULL, NULL, 1L, BLN_CURBUF | BLN_LISTED);
|
||||||
if (old_curbuf != NULL)
|
if (old_curbuf != NULL)
|
||||||
|
{
|
||||||
enter_buffer(old_curbuf);
|
enter_buffer(old_curbuf);
|
||||||
|
#ifdef FEAT_SYN_HL
|
||||||
|
if (old_tw != curbuf->b_p_tw)
|
||||||
|
check_colorcolumn(curwin);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
/* If "old_curbuf" is NULL we are in big trouble here... */
|
/* If "old_curbuf" is NULL we are in big trouble here... */
|
||||||
|
|
||||||
# if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
|
# if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
|
||||||
@@ -1364,6 +1380,9 @@ set_curbuf(buf, action)
|
|||||||
buf_T *prevbuf;
|
buf_T *prevbuf;
|
||||||
int unload = (action == DOBUF_UNLOAD || action == DOBUF_DEL
|
int unload = (action == DOBUF_UNLOAD || action == DOBUF_DEL
|
||||||
|| action == DOBUF_WIPE);
|
|| action == DOBUF_WIPE);
|
||||||
|
#ifdef FEAT_SYN_HL
|
||||||
|
long old_tw = curbuf->b_p_tw;
|
||||||
|
#endif
|
||||||
|
|
||||||
setpcmark();
|
setpcmark();
|
||||||
if (!cmdmod.keepalt)
|
if (!cmdmod.keepalt)
|
||||||
@@ -1430,21 +1449,24 @@ set_curbuf(buf, action)
|
|||||||
# endif
|
# endif
|
||||||
)
|
)
|
||||||
#endif
|
#endif
|
||||||
|
{
|
||||||
enter_buffer(buf);
|
enter_buffer(buf);
|
||||||
|
#ifdef FEAT_SYN_HL
|
||||||
|
if (old_tw != curbuf->b_p_tw)
|
||||||
|
check_colorcolumn(curwin);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Enter a new current buffer.
|
* Enter a new current buffer.
|
||||||
* Old curbuf must have been abandoned already!
|
* Old curbuf must have been abandoned already! This also means "curbuf" may
|
||||||
|
* be pointing to freed memory.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
enter_buffer(buf)
|
enter_buffer(buf)
|
||||||
buf_T *buf;
|
buf_T *buf;
|
||||||
{
|
{
|
||||||
#ifdef FEAT_SYN_HL
|
|
||||||
long old_tw = curbuf->b_p_tw;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Copy buffer and window local option values. Not for a help buffer. */
|
/* Copy buffer and window local option values. Not for a help buffer. */
|
||||||
buf_copy_options(buf, BCO_ENTER | BCO_NOHELP);
|
buf_copy_options(buf, BCO_ENTER | BCO_NOHELP);
|
||||||
if (!buf->b_help)
|
if (!buf->b_help)
|
||||||
@@ -1468,8 +1490,6 @@ enter_buffer(buf)
|
|||||||
|
|
||||||
#ifdef FEAT_SYN_HL
|
#ifdef FEAT_SYN_HL
|
||||||
curwin->w_s = &(buf->b_s);
|
curwin->w_s = &(buf->b_s);
|
||||||
if (old_tw != buf->b_p_tw)
|
|
||||||
check_colorcolumn(curwin);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Cursor on first line by default. */
|
/* Cursor on first line by default. */
|
||||||
|
@@ -725,6 +725,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 */
|
||||||
|
/**/
|
||||||
|
822,
|
||||||
/**/
|
/**/
|
||||||
821,
|
821,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user