mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-28 00:21:52 +03:00
Better fix for setenv (..., NULL, ...)
* stdlib/setenv.c (__add_to_environ): Dump core quickly if setenv (..., NULL, ...) is called. This time, do it the right way, and pacify GCC with a pragma.
This commit is contained in:
@ -1,3 +1,9 @@
|
|||||||
|
2015-04-19 Paul Eggert <eggert@cs.ucla.edu>
|
||||||
|
|
||||||
|
* stdlib/setenv.c (__add_to_environ):
|
||||||
|
Dump core quickly if setenv (..., NULL, ...) is called.
|
||||||
|
This time, do it the right way, and pacify GCC with a pragma.
|
||||||
|
|
||||||
2015-04-17 Roland McGrath <roland@hack.frob.com>
|
2015-04-17 Roland McGrath <roland@hack.frob.com>
|
||||||
|
|
||||||
* elf/dl-close.c (_dl_close_worker) [DL_NNS == 1]: Just assert that
|
* elf/dl-close.c (_dl_close_worker) [DL_NNS == 1]: Just assert that
|
||||||
|
@ -19,6 +19,13 @@
|
|||||||
# include <config.h>
|
# include <config.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Pacify GCC; see the commentary about VALLEN below. This is needed
|
||||||
|
at least through GCC 4.9.2. Pacify GCC for the entire file, as
|
||||||
|
there seems to be no way to pacify GCC selectively, only for the
|
||||||
|
place where it's needed. Do not use DIAG_IGNORE_NEEDS_COMMENT
|
||||||
|
here, as it's not defined yet. */
|
||||||
|
#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
|
||||||
|
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#if !_LIBC
|
#if !_LIBC
|
||||||
# if !defined errno && !defined HAVE_ERRNO_DECL
|
# if !defined errno && !defined HAVE_ERRNO_DECL
|
||||||
@ -114,8 +121,17 @@ __add_to_environ (name, value, combined, replace)
|
|||||||
{
|
{
|
||||||
char **ep;
|
char **ep;
|
||||||
size_t size;
|
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 null (unfortunately GCC is not smart enough to deduce
|
||||||
|
this; see the #pragma at the start of this file). 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 namelen = strlen (name);
|
||||||
const size_t vallen = value != NULL ? strlen (value) + 1 : 0;
|
size_t vallen;
|
||||||
|
if (combined == NULL)
|
||||||
|
vallen = strlen (value) + 1;
|
||||||
|
|
||||||
LOCK;
|
LOCK;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user