Subject: Re: pkg/20978: mail/deliver is not compatible with recent NetBSD libc
To: None <gnats-bugs@gnats.netbsd.org>
From: David Laight <david@l8s.co.uk>
List: current-users
Date: 04/07/2003 17:54:54
On Mon, Apr 07, 2003 at 10:54:57AM -0400, Todd Vierling wrote:
> [Re-sent with proper Cc:.]
But still missing gnats-bugs@gnats.netbsd.org
> On Tue, 1 Apr 2003 jbernard@mines.edu wrote:
>
> : The problem is that it uses the basename function to construct file
> : names [in lock.c (dotlock_name) and subs.c (unique)], and its usage
> : of basename assumes that the function returns a pointer that
> : references a location within the source string (which deliver then
> : uses to modify the string). However NetBSD's libc/gen/basename.c
> : was changed on Oct. 17, 2002 (rev. 1.5 of basename.c) to always
> : return a pointer to static storage containing the base name, so
> : deliver fails to construct usable file names.
>
> This is a severe problem. I've seen other code which depends on basename
> returning an in-situ pointer, and the change to libc (without versioning the
> call because of the ABI change) is alarming.
Such code is non-portable (aka broken).
> NetBSDheads: Is there really a reason not to return a pointer into the
> existing string?
http://www.opengroup.org/onlinepubs/009604499/functions/basename.html
The basename() function may modify the string pointed to by path, and
may return a pointer to static storage that may then be overwritten by a
subsequent call to basename().
(NB basename is marked as an XSI extension to ISO C)
David
--
David Laight: david@l8s.co.uk