Hi Bram, On Fri, Aug 10, 2018 at 7:45 AM, Bram Moolenaar <b...@moolenaar.net> wrote: > > Yegappan wrote: > >> On Thu, Aug 9, 2018 at 12:52 PM, Bram Moolenaar <b...@moolenaar.net> wrote: >> > >> > Patch 8.1.0261 >> > Problem: Coverity complains about a negative array index. >> > Solution: When qf_id2nr() cannot find the list then don't set qf_curlist. >> > Files: src/quickfix.c >> > >> > >> > *** ../vim-8.1.0260/src/quickfix.c 2018-08-09 21:19:15.774436077 +0200 >> > --- src/quickfix.c 2018-08-09 21:49:36.929501416 +0200 >> > *************** >> > *** 4339,4352 **** >> > } >> > >> > /* >> > * Jump to the first entry if there is one. >> > */ >> > static void >> > qf_jump_first(qf_info_T *qi, int_u save_qfid, int forceit) >> > { >> > ! // If autocommands changed the current list, then restore it >> > ! if (qi->qf_lists[qi->qf_curlist].qf_id != save_qfid) >> > ! qi->qf_curlist = qf_id2nr(qi, save_qfid); >> > >> > // Autocommands might have cleared the list, check for it >> > if (!qf_list_empty(qi, qi->qf_curlist)) >> > --- 4335,4365 ---- >> > } >> > >> > /* >> > + * If the current list is not "save_qfid" and we can find the list with >> > that ID >> > + * then make it the current list. >> > + * This is used when autocommands may have changed the current list. >> > + */ >> > + static void >> > + qf_restore_list(qf_info_T *qi, int_u save_qfid) >> > + { >> > + int curlist; >> > + >> > + if (qi->qf_lists[qi->qf_curlist].qf_id != save_qfid) >> > + { >> > + curlist = qf_id2nr(qi, save_qfid); >> > + if (curlist >= 0) >> > + qi->qf_curlist = curlist; >> > + // else: what if the list can't be found? >> > >> >> In all the places where qf_restore_list() is currently invoked, there >> is a call to >> qflist_valid() to check whether the list with the specified id is >> present or not. >> If the list is not present, then qf_restore_list() is not called. But >> in the future, >> someone might call qf_restore_list() without first checking whether the list >> is still present in the stack or not. > > Yes, so the current construction is brittle, if someone makes changes > and forgets to call qflist_valid() then things break. That's basically > what Coverity complains about: unless you are careful qf_curlist becomes > negative. > > We should move qflist_valid() into qf_restore_list(), and let it return > FAIL when the list isn't valid. >
There is no need to call qflist_valid() in qf_restore_list() as the qf_id2nr() function (called by qf_restore_list()) already iterates through all the lists in the stack. > > Then the caller must deal with the > failure. This also applies to qf_jump_first() indirectly. > > Can you make it work like that? > I am attaching a patch that does this. - Yegappan -- -- You received this message from the "vim_dev" maillist. Do not top-post! Type your reply below the text you are replying to. For more information, visit http://www.vim.org/maillist.php --- You received this message because you are subscribed to the Google Groups "vim_dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to vim_dev+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
qfempty.diff
Description: Binary data