bus error in strsep

Stefan Sperling stsp at stsp.in-berlin.de
Wed Jul 6 18:55:41 GMT 2005

Hello hackers,

I am getting a bus error in my application when I call strsep
and it matches a character. It doesn't matter whether I call
the strsep from my libc or a freshly compiled one, the error
stays the same.

This is my test case:

$ cat strsep.c

#define NULL ((void*)0)

/* copied verbatim from /usr/src/lib/libc/string/strsep.c,
 * except for the name change
char *
mystrsep(stringp, delim)
	char **stringp;
	const char *delim;
	char *s;
	const char *spanp;
	int c, sc;
	char *tok;

	if ((s = *stringp) == NULL)
		return (NULL);
	for (tok = s;;) {
		c = *s++;
		spanp = delim;
		do {
			if ((sc = *spanp++) == c) {
				if (c == 0)
					s = NULL;
					s[-1] = 0;
				*stringp = s;
				return (tok);
		} while (sc != 0);

int main(int argc, char* argv[])
	char *c = "whats:your:name:buddy?";
	(void*)mystrsep(&c, ":");

$ gcc -g -o strsep strsep.c
$ gdb strsep
<gnu license>
(gdb) run
Starting program: /home/stsp/test/strsep

Program received signal SIGBUS, Bus error.
0x080484f2 in mystrsep (stringp=0xbfbfea34, delim=0x80485e6 ":") at strsep.c:26
26                                              s[-1] = 0;
(gdb) print s[-1]
$1 = 58 ':'

When I single step through mystrsep the program works fine.

I am running FreeBSD-current from 17th June 2005 on an Athlon-XP,
no SMP involved. I can reproduce the error on a dual Celeron box
running FreeBSD-5.4-RELEASE with SMP.
And I also get the same error with similar code using strtok.

Can anyone else reproduce this?

thanks a lot,
http://stsp.in-berlin.de                                 PGP Key: 0xF59D25F0

More information about the freebsd-hackers mailing list