diff -up tcsh-6.15.00/tc.str.c_old tcsh-6.15.00/tc.str.c --- tcsh-6.15.00/tc.str.c_old 2008-09-03 13:08:44.000000000 +0200 +++ tcsh-6.15.00/tc.str.c 2008-09-03 13:11:32.000000000 +0200 @@ -154,7 +154,7 @@ short2str(const Char *src) { static char *sdst = NULL; static size_t dstsize = 0; - char *dst, *edst; + char *dst, *edst, *wdst, *wedst; if (src == NULL) return (NULL); @@ -171,8 +171,15 @@ short2str(const Char *src) if (dst >= edst) { dstsize += MALLOC_INCR; sdst = xrealloc(sdst, (dstsize + MALLOC_SURPLUS) * sizeof(char)); + wdst = dst; + wedst = edst; edst = &sdst[dstsize]; dst = &edst[-MALLOC_INCR]; + while (wdst > wedst) { + dst++; + wdst--; + } + } } *dst = 0;