strdup(NULL) supposed to create SIGSEGV?

Mike Meyer mwm-keyword-freebsdhackers2.e313df at mired.org
Wed Apr 23 07:18:55 UTC 2008


On Tue, 22 Apr 2008 22:40:21 -0700
"Garrett Cooper" <yanefbsd at gmail.com> wrote:

> Hi all,
>      I made an oops in a program, which uncovered "feature" in strdup(2)
> that I wasn't aware of before. So I was wondering, is strdup(pointer = NULL)
> supposed to segfault should this just return NULL and set errno?

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).

>      Good news is that Linux does the same thing (yay?), so at least FreeBSD
> isn't alone..

Do you have examples of systems where strdup doesn't behave this way?

   <mike
-- 
Mike Meyer <mwm at mired.org>		http://www.mired.org/consulting.html
Independent Network/Unix/Perforce consultant, email for more information.


More information about the freebsd-hackers mailing list