Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Crash on interrupted completion with prezto



I get reproductible zsh crashes. Steps:

1. Start zsh 5.1.1 with default config of prezto enabled
2. Write/paste :prezto:module:editor:info:
3. Move to beginning of the line, type zsty<TAB>
4. autocompletion takes a very long time. C-c
5. zsh shows next prompt dies with segmentation fault

I re-compiled zsh with debug info and attached a quick gdb log of the
coredump. Unfortuantely, I can't reproduce it under valgrind. Running
zsh with a small plain .zshrc also results in no crash.

As I'm not very familiar with zsh I don't know what else to
test/provide, feel free to ask for more info.

Happy hacking!
-- 
Bart Polot
quit
#0  0x0000000000481b9f in charrefinc (x=0x7ffcf95be6d0, 
    y=0x7f72e78a7e23 <error: Cannot access memory at address 0x7f72e78a7e23>, z=0x7ffcf95be6c8) at pattern.c:1935
#1  0x0000000000482db5 in patmatch (prog=0x1637a58) at pattern.c:2567
#2  0x00000000004842cb in patmatch (prog=0x1637a48) at pattern.c:3143
#3  0x0000000000482577 in pattryrefs (prog=0x1637a10, string=0x7f72ea0d4308 "globalhistory insert", stringlen=20, 
    unmetalen=20, patoffset=0, nump=0x0, begp=0x0, endp=0x0) at pattern.c:2307
#4  0x0000000000481d66 in pattry (prog=0x1637a10, string=0x7f72ea0d4308 "globalhistory insert") at pattern.c:2031
#5  0x0000000000426497 in evalcond (state=0x7ffcf95c03a0, fromtest=0x0) at cond.c:313
#6  0x00000000004331de in execcond (state=0x7ffcf95c03a0, do_exec=0) at exec.c:4526
#7  0x0000000000429a4d in execsimple (state=0x7ffcf95c03a0) at exec.c:1130
#8  0x0000000000429dc7 in execlist (state=0x7ffcf95c03a0, dont_change_job=1, exiting=0) at exec.c:1254
#9  0x000000000045bdb5 in execif (state=0x7ffcf95c03a0, do_exec=0) at loop.c:549
#10 0x0000000000430c40 in execcmd (state=0x7ffcf95c03a0, input=0, output=0, how=18, last1=2) at exec.c:3472
#11 0x000000000042bb38 in execpline2 (state=0x7ffcf95c03a0, pcode=835, how=18, input=0, output=0, last1=0)
    at exec.c:1746
#12 0x000000000042aac2 in execpline (state=0x7ffcf95c03a0, slcode=40962, how=18, last1=0) at exec.c:1524
#13 0x0000000000429f21 in execlist (state=0x7ffcf95c03a0, dont_change_job=1, exiting=0) at exec.c:1283
#14 0x000000000045be6d in execif (state=0x7ffcf95c03a0, do_exec=0) at loop.c:565
#15 0x0000000000430c40 in execcmd (state=0x7ffcf95c03a0, input=0, output=0, how=2, last1=2) at exec.c:3472
#16 0x000000000042bb38 in execpline2 (state=0x7ffcf95c03a0, pcode=387, how=2, input=0, output=0, last1=0)
    at exec.c:1746
#17 0x000000000042aac2 in execpline (state=0x7ffcf95c03a0, slcode=83970, how=2, last1=0) at exec.c:1524
#18 0x0000000000429f21 in execlist (state=0x7ffcf95c03a0, dont_change_job=1, exiting=0) at exec.c:1283
#19 0x000000000042976a in execode (p=0x165bae0, dont_change_job=1, exiting=0, context=0x4aa890 "shfunc") at exec.c:1074
#20 0x00000000004351f2 in runshfunc (prog=0x165bae0, wrap=0x0, name=0x7f72ea0d3fb0 "editor-info") at exec.c:5356
#21 0x0000000000434c33 in doshfunc (shfunc=0x165b980, doshargs=0x0, noreturnval=1) at exec.c:5222
#22 0x00007f72e8b53465 in execzlefunc (func=0x165ba80, args=0x7f72ea0d3f80, set_bindk=0) at zle_main.c:1395
#23 0x00007f72e8b6536d in bin_zle_call (name=0x7f72ea0d3f60 "zle", args=0x7f72ea0d3f80, ops=0x7ffcf95c0a80, 
    func=0 '\000') at zle_thingy.c:711
#24 0x00007f72e8b64446 in bin_zle (name=0x7f72ea0d3f60 "zle", args=0x7f72ea0d3f78, ops=0x7ffcf95c0a80, func=0)
    at zle_thingy.c:382
#25 0x000000000040fe97 in execbuiltin (args=0x7f72ea0d3f18, assigns=0x0, bn=0x7f72e8d86be0 <bintab+128>)
    at builtin.c:484
#26 0x0000000000431485 in execcmd (state=0x7ffcf95c14c0, input=0, output=0, how=18, last1=2) at exec.c:3641
#27 0x000000000042bb38 in execpline2 (state=0x7ffcf95c14c0, pcode=643, how=18, input=0, output=0, last1=0)
    at exec.c:1746
#28 0x000000000042aac2 in execpline (state=0x7ffcf95c14c0, slcode=4098, how=18, last1=0) at exec.c:1524
#29 0x0000000000429f21 in execlist (state=0x7ffcf95c14c0, dont_change_job=1, exiting=0) at exec.c:1283
#30 0x000000000042976a in execode (p=0x165bd10, dont_change_job=1, exiting=0, context=0x4aa890 "shfunc") at exec.c:1074
#31 0x00000000004351f2 in runshfunc (prog=0x165bd10, wrap=0x0, name=0x7f72ea0d3db8 "zle-line-init") at exec.c:5356
#32 0x0000000000434c33 in doshfunc (shfunc=0x165be20, doshargs=0x0, noreturnval=1) at exec.c:5222
#33 0x00007f72e8b53465 in execzlefunc (func=0x165bed0, args=0x7ffcf95c1ac0, set_bindk=1) at zle_main.c:1395
#34 0x00007f72e8b7172d in zlecallhook (name=0x7f72e8b78dfd "zle-line-init", arg=0x0) at zle_utils.c:1726
#35 0x00007f72e8b52bcc in zleread (lp=0x6d5df0 <prompt>, rp=0x6d5e28 <rprompt>, flags=3, context=0, 
    init=0x7f72e8b78dfd "zle-line-init", finish=0x7f72e8b78ded "zle-line-finish") at zle_main.c:1250
#36 0x00007f72e8b5528c in zle_main_entry (cmd=1, ap=0x7ffcf95c1cf0) at zle_main.c:1923
#37 0x000000000044d8dc in zleentry (cmd=1) at init.c:1523
#38 0x000000000044e78b in inputline () at input.c:293
#39 0x000000000044e5ea in ingetc () at input.c:226
#40 0x00000000004425d7 in ihgetc () at hist.c:391
#41 0x00000000004573fa in gettok () at lex.c:605
#42 0x0000000000456b2b in zshlex () at lex.c:271
#43 0x000000000047618b in parse_event (endtok=37) at parse.c:561
#44 0x000000000044a305 in loop (toplevel=1, justonce=0) at init.c:146
#45 0x000000000044ddd0 in zsh_main (argc=1, argv=0x7ffcf95c21c8) at init.c:1678
#46 0x000000000040f226 in main (argc=1, argv=0x7ffcf95c21c8) at ./main.c:93
1930	charrefinc(char **x, char *y, int *z)
1931	{
1932	    wchar_t wc;
1933	    size_t ret;
1934	
1935	    if (!(patglobflags & GF_MULTIBYTE) || !(STOUC(**x) & 0x80))
1936		return (wchar_t) STOUC(*(*x)++);
1937	
1938	    ret = mbrtowc(&wc, *x, y-*x, &shiftstate);
1939	
$1 (p x) = (char **) 0x7ffcf95be6d0
$2 (p *x)= 0x7f72e78a7dea <error: Cannot access memory at address 0x7f72e78a7dea>
$3 (p y) = 0x7f72e78a7e23 <error: Cannot access memory at address 0x7f72e78a7e23>
$4 (p z) = (int *) 0x7ffcf95be6c8
$5 (p *z)= 0
#1  0x0000000000482db5 in patmatch (prog=0x1637a58) at pattern.c:2567
2567			patint_t chpa = CHARREFINC(chrop, chrend, &badpa);
2562			 * case they don't match even if the returned
2563			 * values (one properly converted, one raw) are
2564			 * the same.
2565			 */
2566			patint_t chin = CHARREFINC(patinput, patinend, &badin);
2567			patint_t chpa = CHARREFINC(chrop, chrend, &badpa);
2568			if (!CHARMATCH(chin, chpa) || badin != badpa) {
2569			    fail = 1;
2570			    patinput = savpatinput;
2571			    chrop = savchrop;
quit

Attachment: signature.asc
Description: OpenPGP digital signature



Messages sorted by: Reverse Date, Date, Thread, Author