From: Paul Eggert Date: Thu, 12 Mar 2015 22:57:07 +0000 (-0700) Subject: * stdlib/setenv.c (__add_to_environ): X-Git-Tag: upstream/2.24~1776 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2ecccaede9097f867284d352a881d8f226ba4fb7;p=platform%2Fupstream%2Fglibc.git * stdlib/setenv.c (__add_to_environ): Dump core quickly if setenv (..., NULL, ...) is called. --- diff --git a/ChangeLog b/ChangeLog index fb1591f15e..3b12552275 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2015-03-13 Paul Eggert + + * stdlib/setenv.c (__add_to_environ): + Dump core quickly if setenv (..., NULL, ...) is called. + 2015-03-13 Roland McGrath * sysdeps/arm/tls-macros.h: Include . diff --git a/stdlib/setenv.c b/stdlib/setenv.c index b60c4f0151..05342367b1 100644 --- a/stdlib/setenv.c +++ b/stdlib/setenv.c @@ -114,8 +114,16 @@ __add_to_environ (name, value, combined, replace) { char **ep; size_t size; + + /* Compute lengths before locking, so that the critical section is + less of a performance bottleneck. VALLEN is needed only if + COMBINED is non-null. Also, testing COMBINED instead of VALUE + causes setenv (..., NULL, ...) to dump core now instead of + corrupting memory later. */ const size_t namelen = strlen (name); - const size_t vallen = value != NULL ? strlen (value) + 1 : 0; + size_t vallen; + if (combined != NULL) + vallen = strlen (value) + 1; LOCK;