Benjamin Fritz <[email protected]> wrote: > I have a mapping that executes the :cnext command (or another command based > on context): > > " map <F3> and <S-F3> to jump between locations in a quickfix list, or > " differences if in window in diff mode > if v:version >= 700 > nnoremap <expr> <silent> <F3> <SID>NextThingJump() > nnoremap <expr> <silent> <S-F3> <SID>PrevThingJump() > > function! s:NextThingJump() > let cmd='' > if &diff > let cmd.= "]c" > elseif !empty(getloclist(0)) > let cmd.= ":lnext\<CR>zv" > elseif !empty(getqflist()) > let cmd.= ":cnext\<CR>zv" > else > let cmd.= 'n' > endif > return cmd.":.list\<CR>" > endfun > > function! s:PrevThingJump() > let cmd='' > if &diff > let cmd.= "[c" > elseif !empty(getloclist(0)) > let cmd.= ":lprev\<CR>zv" > elseif !empty(getqflist()) > let cmd.= ":cprev\<CR>zv" > else > let cmd.= 'N' > endif > return cmd.":.list\<CR>" > endfun > > > When using this command, with a quickfix list populated by a :make command, > I got a crash as follows: > >> gvim.exe!qf_jump(qf_info_S * qi, int dir, int errornr, int forceit) Line >> 1903 + 0x15 bytes C > gvim.exe!do_one_cmd(unsigned char * * cmdlinep, int sourcing, condstack * > cstack, unsigned char * (int, void *, int)* fgetline, void * cookie) Line > 2962 C > gvim.exe!do_cmdline(unsigned char * cmdline, unsigned char * (int, void *, > int)* fgetline, void * cookie, int flags) Line 1138 C > gvim.exe!nv_colon(cmdarg_S * cap) Line 5437 C > gvim.exe!normal_cmd(oparg_S * oap, int toplevel) Line 1183 C > gvim.exe!main_loop(int cmdwin, int noexmode) Line 1352 C > gvim.exe!VimMain() Line 1050 + 0x9 bytes C > gvim.exe!WinMain(HINSTANCE__ * hInstance, HINSTANCE__ * hPrevInst, char * > lpszCmdLine, int nCmdShow) Line 131 C > gvim.exe!__tmainCRTStartup() Line 275 + 0x21 bytes C > > Here is the content of the "locals" window in a Visual Studio debugger: > > + qi 0x0000000000000000 {qf_refcount=??? qf_listcount=??? qf_curlist=??? > ...} qf_info_S * > dir 0x00000001 int > errornr 0x001becd0 int > forceit 0x00000000 int > + e_no_more_items 0x000000013f8b0b48 "E553: No more items" unsigned char * > > And here is the "Autos" window: > > + IObuff 0x0000000001c5bbc0 "(2 of 0) (line deleted) ): " unsigned char * > > I know this may not be all that useful, but maybe somebody will see > something (related to qi being NULL no doubt). > > qf_ptr and len can't be found at all by the debugger for some reason. > > msg_scrolled is currently set to 1. > > I'm not sure why there would be a "no more items" string in the local > variables, unless that is pre-populated just in case of error. I was > somewhere in the middle of my quickfix hits, transitioning from one file to > another, with an ignored line in between the real lines in the quickfix > list. > > I don't have time to try narrowing it down any further, sorry. > > My Vim version is a 64-bit 7.4.898, HUGE version with GUI, on 64-bit > Windows. I do have several plugins active that use the Python interface but > from the crash location I doubt that's related.
Hi Benjamin There is still an item in todo.txt for the above old bug: === BEGIN QUOTE :help todo === Crash in :cnext on MS-Windows. (Ben Fritz, 2015 Oct 27) === END QUOTE === I wonder whether this bug is still reproducible with a recent version of Vim. Since it was reported, several bugs have been fixed in quickfix.c in March 2016 (some use-after-free bugs) and some happened in qf_jump() which is also your stack. If you cannot reproduce it anymore, I suggest that we remove the item from todo.txt. Regards Dominique -- -- 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 [email protected]. For more options, visit https://groups.google.com/d/optout.
