This is the mail archive of the
glibc-bugs@sourceware.org
mailing list for the glibc project.
[Bug libc/16640] string/strtok.c: undefined behaviour inconsistent between x86 and other generic code
- From: "neleai at seznam dot cz" <sourceware-bugzilla at sourceware dot org>
- To: glibc-bugs at sourceware dot org
- Date: Thu, 27 Feb 2014 12:14:49 +0000
- Subject: [Bug libc/16640] string/strtok.c: undefined behaviour inconsistent between x86 and other generic code
- Auto-submitted: auto-generated
- References: <bug-16640-131 at http dot sourceware dot org/bugzilla/>
http://sourceware.org/bugzilla/show_bug.cgi?id=16640
--- Comment #2 from Ondrej Bilka <neleai at seznam dot cz> ---
On Thu, Feb 27, 2014 at 06:54:43AM +0000, carlos at redhat dot com wrote:
> https://sourceware.org/bugzilla/show_bug.cgi?id=16640
>
> Carlos O'Donell <carlos at redhat dot com> changed:
>
> What |Removed |Added
> ----------------------------------------------------------------------------
> Status|NEW |WAITING
> CC| |carlos at redhat dot com
>
> --- Comment #1 from Carlos O'Donell <carlos at redhat dot com> ---
> (In reply to Kyle McMartin from comment #0)
> > Created attachment 7444 [details]
> > make string/strtok match x86
> >
> > The strtok.S implementations for x86_64 and i386 vary from the generic
> > string/strtok.c version. In the former case, if str == NULL, and the saved
> > string is also NULL, the strtok call returns NULL.
> >
> > In contrast, the string/strtok.c call proceeds to pass s = olds = NULL to
> > strspn which consequently crashes.
> >
> > While this behaviour is probably permissible, it results in odd portability
> > issues where the behaviour can't be reproduced on x86_64. As well, the
> > generic versions in the BSD libc I looked at (which appears to date back to
> > 4.3BSD or earlier...) also checks for the (s = olds) == NULL condition and
> > handles it, so we have a bit of precedent here.
> >
> > Attached is a patch which brings the generic string/strtok.c in-line with
> > i386, x86_64 and BSD. It seems better to do that, rather than suddenly make
> > working code SIGSEGV on x86_64...
>
> The x86_64 and i386 implementations are wrong, they should also fault.
>
I looked to implementations and they are outdated, a generic
implementation with sse4_2 strpbrk should be faster here.
I will send patch to remove these once I check performance impact.
--
You are receiving this mail because:
You are on the CC list for the bug.