Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 23 Apr 2008 13:28:23 +0200
From:      Heiko Wundram <modelnine@modelnine.org>
To:        freebsd-hackers@freebsd.org
Subject:   Re: strdup(NULL) supposed to create SIGSEGV?
Message-ID:  <200804231328.23777.modelnine@modelnine.org>
In-Reply-To: <251738.1147.qm@web36602.mail.mud.yahoo.com>
References:  <251738.1147.qm@web36602.mail.mud.yahoo.com>

next in thread | previous in thread | raw e-mail | index | archive | help
Am Mittwoch, 23. April 2008 11:38:54 schrieb Simun Mikecin:
> >Yes, it's supposed to segfault. Check out what, say, strcpy does if
> >you ask it to copy a NULL pointer. And this is an improvement from the
> >bad old days, when they would happily walk through memory starting at
> >0.....
> >Besides, errno is used to signal errors from system calls. strdup
> >isn't a system call, it's a library function (says so at the top of
> >the man page).
> >Do you have examples of systems where strdup doesn't behave this way?
>
> According to Open Group strdup should return NULL and set errno. Look at:
> http://www.opengroup.org/onlinepubs/009695399/functions/strdup.html
>
> There is no valid argument for doing segfault instead of above behavior.

Read the standard closely. If you pass in something that is defined as having 
undefined behaviour (a NULL pointer is defined in such a way at other points 
of the standard), do not expect to get defined behaviour out.

What the standard talks about is when the memory for the duplicate string 
cannot be allocated, WHEN you pass in a valid pointer.

-- 
Heiko Wundram



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200804231328.23777.modelnine>