[Pkg-zsh-devel] Bug#353863: Bugreport: completion hanging at ubo<Tab> - endless loop

Michael Prokop news at michael-prokop.at
Wed Feb 23 10:50:18 UTC 2011


Hi,

in http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=353863
Sebastien Desreux reported a bug about zsh with its
completion system in a specific situation.

To trigger the bug (at least 4.3.10 and 4.3.11 in Debian are
known to be affected by this bug):

  zsh -f
  autoload -Uz compinit; compinit; alias ubox=ls
  ubo<tab>

Then the zsh process is hanging in an endless loop, eating CPU.

I've just stepped down the problem in gdb, it seems to be hanging in
this code forever (I've extracted the relevant parts that
repeat-and-repeat-again out of my gdb session, hope this helps):

,---- [ gdb session - the relevant parts / the endless loop ]
| get_comp_string (lst=4) at ../../../Src/Zle/zle_tricky.c:1487
|                             nnb = tt + nclen;
|                             nnb = tt + nclen;
|                 for (tt = s; tt < s + zlemetacs_qsub - wb;) {
|                     if (*tt == Inbrack) {
|                     } else if (i && *tt == Outbrack) {
|                         int nclen = MB_METACHARLEN(tt);
| mb_metacharlenconv (s=0x23aaf32 "", wcp=0x0) at ../../Src/utils.c:4439
|             if (!isset(MULTIBYTE)) {
|             if (itok(*s)) {
|             return mb_metacharlenconv_r(s, wcp, &mb_shiftstate);
| mb_metacharlenconv_r (s=0x23aaf32 "", wcp=0x0, mbsp=0x6b1f30) at ../../Src/utils.c:4389
|         {
|                 ret = mbrtowc(&wc, &inchar, 1, mbsp);
|         {
|             for (ptr = s; *ptr; ) {
|             if (wcp)
|             if (ptr > s) {
|             memset(mbsp, 0, sizeof(*mbsp));
|             if (ptr > s) {
|         }
| get_comp_string (lst=4) at ../../../Src/Zle/zle_tricky.c:1486
|                         if (itype_end(tt, IIDENT, 1) == tt)
|                         int nclen = MB_METACHARLEN(tt);
|                         if (itype_end(tt, IIDENT, 1) == tt)
| itype_end (ptr=0x23aaf32 "", itype=128, once=1) at ../../Src/utils.c:3491
|         {
|             if (isset(MULTIBYTE) &&
|                 (itype != IIDENT || !isset(POSIXIDENTIFIERS))) {
|                 mb_metacharinit();
| mb_metacharinit () at ../../Src/utils.c:449
|             memset(&mb_shiftstate, 0, sizeof(mb_shiftstate));
| mb_metacharinit () at ../../Src/utils.c:450
|         }
| itype_end (ptr=0x23aaf32 "", itype=128, once=1) at ../../Src/utils.c:3498
|                     int len = mb_metacharlenconv(ptr, &wc);
|                 while (*ptr) {
|         }
`----

regards,
-mika-
-- 
http://michael-prokop.at/  || http://adminzen.org/
http://grml-solutions.com/ || http://grml.org/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: Digital signature
URL: <http://lists.alioth.debian.org/pipermail/pkg-zsh-devel/attachments/20110223/a035d742/attachment.pgp>


More information about the Pkg-zsh-devel mailing list