strdup(NULL) supposed to create SIGSEGV?

Heiko Wundram modelnine at modelnine.org
Wed Apr 23 11:26:26 UTC 2008


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


More information about the freebsd-hackers mailing list