This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [patch] Error on setenv(..., NULL, ...)


On 03/11/2015 11:26 AM, Paul Pluzhnikov wrote:
Where does it say that NULL name is allowed?
It doesn't.  But that's the FreeBSD behavior.

FreeBSD setenv (..., NULL, ...) dumps core quickly because it calls strlen (NULL). How about if we do the same? It should be just as fast as what we do now, and it's safer and more compatible. Something like the attached untested patch, say.
diff --git a/ChangeLog b/ChangeLog
index 7360079..b9b40c9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2015-03-11  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* stdlib/setenv.c (__add_to_environ):
+	Dump core quickly if setenv (..., NULL, ...) is called.
+
 2015-03-11  Paul Pluzhnikov  <ppluzhnikov@google.com>
 
 	[BZ #18043]
diff --git a/stdlib/setenv.c b/stdlib/setenv.c
index b60c4f0..f3de7e9 100644
--- a/stdlib/setenv.c
+++ b/stdlib/setenv.c
@@ -115,7 +115,13 @@ __add_to_environ (name, value, combined, replace)
   char **ep;
   size_t size;
   const size_t namelen = strlen (name);
-  const size_t vallen = value != NULL ? strlen (value) + 1 : 0;
+  size_t vallen;
+
+  /* Test COMBINED, not VALUE, since VALLEN is needed only if COMBINED
+     is non-null.  Also, testing COMBINED causes setenv (..., NULL, ...)
+     to dump core quickly instead of corrupting memory.  */
+  if (combined != NULL)
+    vallen = strlen (value) + 1;
 
   LOCK;
 

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]