[issue2134] sdiff causes stack overflow
YONETANI Tomokazu
y0n3t4n1 at gmail.com
Wed Sep 21 22:44:21 PDT 2011
On Wed, Sep 21, 2011 at 04:25:42AM +0000, Peter Avalos (via DragonFly issue tracker) wrote:
>
> New submission from Peter Avalos <peter at theshell.com>:
>
> Try this:
> cd /usr/src
> sdiff Makefile.inc1 Makefile_upgrade.inc
>
> Results in:
> diff: stack overflow
The backtrace looks to me like wcwidth() (in libdiffutils) is making
infinite recursion until the stack exhausts. Simple workaround is
to remove wcwidth.c from ${SRCS} in the Makefile in libdiffutils.
diff --git a/gnu/usr.bin/diff/libdiffutils/Makefile b/gnu/usr.bin/diff/libdiffutils/Makefile
index 00d8580..82b6532 100644
--- a/gnu/usr.bin/diff/libdiffutils/Makefile
+++ b/gnu/usr.bin/diff/libdiffutils/Makefile
@@ -64,7 +64,6 @@ SRCS= c-stack.c \
timegm.c \
uinttostr.c \
umaxtostr.c \
- wcwidth.c \
xmalloc.c \
xstrtol.c \
xstrtol-error.c \
We have similar instance in libgreputils, too. However, the function
definitions of wcwidth in lib{diff,grep}utils look like this:
int
wcwidth (wchar_t wc)
#undef wcwidth
{
:
/* Otherwise, fall back to the system's wcwidth function. */
#if HAVE_WCWIDTH
return wcwidth (wc);
#else
return wc == 0 ? 0 : iswprint (wc) ? 1 : -1;
#endif
}
}
So, maybe we're suppose to define a macro wcwidth() somewhere in one
of the header files to a different name?
More information about the Bugs
mailing list