free allocations in clearenv
authorAlexander Monakov <amonakov@ispras.ru>
Sun, 3 Sep 2017 19:12:21 +0000 (22:12 +0300)
committerRich Felker <dalias@aerifal.cx>
Mon, 4 Sep 2017 19:55:21 +0000 (15:55 -0400)
This aligns clearenv with the Linux man page by setting 'environ'
rather than '*environ' to NULL, and stops it from leaking entries
allocated by the libc.

src/env/clearenv.c

index 62d50952dabffc7a8931266cc3fb56f6e4b25cfd..da187752b510a9594ba839dcef3955b01ef2cc67 100644 (file)
@@ -1,10 +1,14 @@
 #define _GNU_SOURCE
 #include <stdlib.h>
+#include "libc.h"
 
-extern char **__environ;
+static void dummy(char *old, char *new) {}
+weak_alias(dummy, __env_rm_add);
 
 int clearenv()
 {
-       __environ[0] = 0;
+       char **e = __environ;
+       __environ = 0;
+       if (e) while (*e) __env_rm_add(*e++, 0);
        return 0;
 }