forked from aniani/vim
patch 8.0.0078
Problem: Accessing freed memory in quickfix. Solution: Reset pointer when freeing 'errorformat'. (Domenique Pelle)
This commit is contained in:
@@ -114,6 +114,8 @@ struct efm_S
|
|||||||
int conthere; /* %> used */
|
int conthere; /* %> used */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static efm_T *fmt_start = NULL; /* cached across qf_parse_line() calls */
|
||||||
|
|
||||||
static int qf_init_ext(qf_info_T *qi, char_u *efile, buf_T *buf, typval_T *tv, char_u *errorformat, int newlist, linenr_T lnumfirst, linenr_T lnumlast, char_u *qf_title);
|
static int qf_init_ext(qf_info_T *qi, char_u *efile, buf_T *buf, typval_T *tv, char_u *errorformat, int newlist, linenr_T lnumfirst, linenr_T lnumlast, char_u *qf_title);
|
||||||
static void qf_store_title(qf_info_T *qi, char_u *title);
|
static void qf_store_title(qf_info_T *qi, char_u *title);
|
||||||
static void qf_new_list(qf_info_T *qi, char_u *qf_title);
|
static void qf_new_list(qf_info_T *qi, char_u *qf_title);
|
||||||
@@ -389,6 +391,7 @@ free_efm_list(efm_T **efm_first)
|
|||||||
vim_regfree(efm_ptr->prog);
|
vim_regfree(efm_ptr->prog);
|
||||||
vim_free(efm_ptr);
|
vim_free(efm_ptr);
|
||||||
}
|
}
|
||||||
|
fmt_start = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Parse 'errorformat' option */
|
/* Parse 'errorformat' option */
|
||||||
@@ -786,7 +789,6 @@ qf_parse_line(
|
|||||||
qffields_T *fields)
|
qffields_T *fields)
|
||||||
{
|
{
|
||||||
efm_T *fmt_ptr;
|
efm_T *fmt_ptr;
|
||||||
static efm_T *fmt_start = NULL; /* cached across calls */
|
|
||||||
char_u *ptr;
|
char_u *ptr;
|
||||||
int len;
|
int len;
|
||||||
int i;
|
int i;
|
||||||
|
@@ -1648,3 +1648,13 @@ function! Test_Autocmd_Exception()
|
|||||||
|
|
||||||
set efm&vim
|
set efm&vim
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function Test_caddbuffer()
|
||||||
|
" This used to cause a memory access in freed memory
|
||||||
|
let save_efm = &efm
|
||||||
|
set efm=%EEEE%m,%WWWW,%+CCCC%>%#,%GGGG%.#
|
||||||
|
cgetexpr ['WWWW', 'EEEE', 'CCCC']
|
||||||
|
let &efm = save_efm
|
||||||
|
cad
|
||||||
|
bwipe!
|
||||||
|
endfunc
|
||||||
|
@@ -764,6 +764,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 */
|
||||||
|
/**/
|
||||||
|
78,
|
||||||
/**/
|
/**/
|
||||||
77,
|
77,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user