char **cpp, **cpp2;
const char **p;
+ char ** new_environ;
+ size_t count;
+
+ /* Allocate space for scrubbed environment. */
+ for (count = 1, cpp = environ; *cpp; count++, cpp++)
+ ;
+ if ((new_environ = malloc(count * sizeof(char *))) == NULL) {
+ environ = NULL;
+ return;
+ }
- for (cpp2 = cpp = environ; *cpp; cpp++) {
+ for (cpp2 = new_environ, cpp = environ; *cpp; cpp++) {
int reject_it = 0;
for(p = reject; *p; p++)
for(p = accept; *p; p++)
if(strncmp(*cpp, *p, strlen(*p)) == 0)
break;
- if(*p != NULL)
- *cpp2++ = *cpp;
+ if(*p != NULL) {
+ if ((*cpp2++ = strdup(*cpp)) == NULL) {
+ environ = new_environ;
+ return;
+ }
+ }
}
*cpp2 = NULL;
+ environ = new_environ;
}
char **cpp, **cpp2;
const char **p;
-
- for (cpp2 = cpp = environ; *cpp; cpp++) {
+ char ** new_environ;
+ size_t count;
+
+ /* Allocate space for scrubbed environment. */
+ for (count = 1, cpp = environ; *cpp; count++, cpp++)
+ continue;
+ if ((new_environ = malloc(count * sizeof(char *))) == NULL) {
+ environ = NULL;
+ return;
+ }
+
+ for (cpp2 = new_environ, cpp = environ; *cpp; cpp++) {
int reject_it = 0;
for(p = rej; *p; p++)
for(p = acc; *p; p++)
if(strncmp(*cpp, *p, strlen(*p)) == 0)
break;
- if(*p != NULL)
- *cpp2++ = *cpp;
+ if(*p != NULL) {
+ if ((*cpp2++ = strdup(*cpp)) == NULL) {
+ environ = new_environ;
+ return;
+ }
+ }
}
*cpp2 = NULL;
+ environ = new_environ;
}
/*
char **cpp, **cpp2;
const char **p;
-
- for (cpp2 = cpp = environ; *cpp; cpp++) {
+ char ** new_environ;
+ size_t count;
+
+ /* Allocate space for scrubbed environment. */
+ for (count = 1, cpp = environ; *cpp; count++, cpp++)
+ continue;
+ if ((new_environ = malloc(count * sizeof(char *))) == NULL) {
+ environ = NULL;
+ return;
+ }
+
+ for (cpp2 = new_environ, cpp = environ; *cpp; cpp++) {
int reject_it = 0;
for(p = rej; *p; p++)
for(p = acc; *p; p++)
if(strncmp(*cpp, *p, strlen(*p)) == 0)
break;
- if(*p != NULL)
- *cpp2++ = *cpp;
+ if(*p != NULL) {
+ if ((*cpp2++ = strdup(*cpp)) == NULL) {
+ environ = new_environ;
+ return;
+ }
+ }
}
*cpp2 = NULL;
+ environ = new_environ;
}
/*