From ce9c4e9a6f253b1540a5367f834f6dd31e6db0c8 Mon Sep 17 00:00:00 2001 From: Eliseo Martínez Date: Thu, 13 Nov 2014 23:27:49 +0100 Subject: Fix warnings: syntax.c: syn_regexec(): Uninitialized arg: MI. Problem : Uninitialized argument value @ 2863. Diagnostic : Multithreading issue. Rationale : Error can only occur if global `syn_time_on` is changed while the function is executing. Resolution : Use local copy of gloval var. --- src/nvim/syntax.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'src/nvim/syntax.c') diff --git a/src/nvim/syntax.c b/src/nvim/syntax.c index e0c9628985..4a3ab46e75 100644 --- a/src/nvim/syntax.c +++ b/src/nvim/syntax.c @@ -2851,15 +2851,16 @@ static int syn_regexec(regmmatch_T *rmp, linenr_T lnum, colnr_T col, syn_time_T { int r; proftime_T pt; + const int l_syn_time_on = syn_time_on; - if (syn_time_on) { + if (l_syn_time_on) { pt = profile_start(); } rmp->rmm_maxcol = syn_buf->b_p_smc; r = vim_regexec_multi(rmp, syn_win, syn_buf, lnum, col, NULL); - if (syn_time_on) { + if (l_syn_time_on) { pt = profile_end(pt); st->total = profile_add(st->total, pt); if (profile_cmp(pt, st->slowest) < 0) { -- cgit From fcd5a8643c2022f20f5225614fd5dc39775af486 Mon Sep 17 00:00:00 2001 From: Eliseo Martínez Date: Thu, 13 Nov 2014 23:30:43 +0100 Subject: Fix warnings: syntax.c: get_id_list(): Double free: FP. Problem : Double free @ 5213. Diagnostic : False positive. Rationale : Suggested error path contains two consecutive invocations of `ends_excmd(*p)` having different results, which is not possible. First invocation is before the while loop. Second invocation is the while loop condition itsef. Resolution : Refactor while loop into do-while loop. That removes the impossible path from analysis, and, in addition, is a bit more efficient. --- src/nvim/syntax.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/nvim/syntax.c') diff --git a/src/nvim/syntax.c b/src/nvim/syntax.c index 4a3ab46e75..6c5c0f37b1 100644 --- a/src/nvim/syntax.c +++ b/src/nvim/syntax.c @@ -5106,7 +5106,7 @@ get_id_list ( * parse the arguments after "contains" */ count = 0; - while (!ends_excmd(*p)) { + do { for (end = p; *end && !vim_iswhite(*end) && *end != ','; ++end) ; name = xmalloc((int)(end - p + 3)); /* leave room for "^$" */ @@ -5199,7 +5199,7 @@ get_id_list ( if (*p != ',') break; p = skipwhite(p + 1); /* skip comma in between arguments */ - } + } while (!ends_excmd(*p)); if (failed) break; if (round == 1) { -- cgit