From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 24470 invoked by alias); 27 Feb 2014 12:14:56 -0000 Mailing-List: contact glibc-bugs-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: glibc-bugs-owner@sourceware.org Received: (qmail 24430 invoked by uid 55); 27 Feb 2014 12:14:51 -0000 From: "neleai at seznam dot cz" To: glibc-bugs@sourceware.org Subject: [Bug libc/16640] string/strtok.c: undefined behaviour inconsistent between x86 and other generic code Date: Thu, 27 Feb 2014 12:14:00 -0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: glibc X-Bugzilla-Component: libc X-Bugzilla-Version: unspecified X-Bugzilla-Keywords: X-Bugzilla-Severity: minor X-Bugzilla-Who: neleai at seznam dot cz X-Bugzilla-Status: WAITING X-Bugzilla-Priority: P2 X-Bugzilla-Assigned-To: unassigned at sourceware dot org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: Message-ID: In-Reply-To: References: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit X-Bugzilla-URL: http://sourceware.org/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 X-SW-Source: 2014-02/txt/msg00770.txt.bz2 http://sourceware.org/bugzilla/show_bug.cgi?id=16640 --- Comment #2 from Ondrej Bilka --- 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 changed: > > What |Removed |Added > ---------------------------------------------------------------------------- > Status|NEW |WAITING > CC| |carlos at redhat dot com > > --- Comment #1 from Carlos O'Donell --- > (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.