vim-patch:8.0.0078

Problem:    Accessing freed memory in quickfix.
Solution:   Reset pointer when freeing 'errorformat'. (Domenique Pelle)

63bed3d319
This commit is contained in:
Jurica Bradaric
2017-07-16 17:28:14 +02:00
parent c00300ecdd
commit ffa2e43549
3 changed files with 15 additions and 2 deletions

View File

@@ -383,6 +383,8 @@ static int efm_to_regpat(char_u *efm, int len, efm_T *fmt_ptr,
return 0; return 0;
} }
static efm_T *fmt_start = NULL; // cached across qf_parse_line() calls
static void free_efm_list(efm_T **efm_first) static void free_efm_list(efm_T **efm_first)
{ {
for (efm_T *efm_ptr = *efm_first; efm_ptr != NULL; efm_ptr = *efm_first) { for (efm_T *efm_ptr = *efm_first; efm_ptr != NULL; efm_ptr = *efm_first) {
@@ -390,6 +392,8 @@ static void free_efm_list(efm_T **efm_first)
vim_regfree(efm_ptr->prog); vim_regfree(efm_ptr->prog);
xfree(efm_ptr); xfree(efm_ptr);
} }
fmt_start = NULL;
} }
// Parse 'errorformat' option // Parse 'errorformat' option
@@ -671,7 +675,6 @@ static int qf_parse_line(qf_info_T *qi, char_u *linebuf, size_t linelen,
efm_T *fmt_first, qffields_T *fields) efm_T *fmt_first, qffields_T *fields)
{ {
efm_T *fmt_ptr; efm_T *fmt_ptr;
static efm_T *fmt_start = NULL; // cached across calls
size_t len; size_t len;
int i; int i;
int idx = 0; int idx = 0;

View File

@@ -1630,3 +1630,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

View File

@@ -651,7 +651,7 @@ static const int included_patches[] = {
// 81, // 81,
// 80 NA // 80 NA
// 79, // 79,
// 78, 78,
// 77 NA // 77 NA
// 76 NA // 76 NA
// 75, // 75,