X-Git-Url: https://www.tinc-vpn.org/git/browse?p=tinc;a=blobdiff_plain;f=src%2Fprocess.c;h=2f10bfd8a3164139e6208124b1fce76f92551928;hp=f736d00111a67259bbba7237c290c588573df411;hb=363d86365d97315cb71f84a1acad4f32cd69f26b;hpb=bb616245b7883ab30291cd8d46672ed2ae733166 diff --git a/src/process.c b/src/process.c index f736d001..2f10bfd8 100644 --- a/src/process.c +++ b/src/process.c @@ -1,7 +1,7 @@ /* process.c -- process management functions Copyright (C) 1999-2005 Ivo Timmermans, - 2000-2013 Guus Sliepen + 2000-2015 Guus Sliepen This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -359,23 +359,24 @@ void unputenv(char *p) { len++; #endif #endif - char var[len]; - strncpy(var, p, len); + char var[len + 1]; + memcpy(var, p, len); + var[len] = 0; #ifdef HAVE_UNSETENV unsetenv(var); #else // We must keep what we putenv() around in memory. // To do this without memory leaks, keep things in a list and reuse if possible. static list_t list = {}; - for(list_node_t *node = list->head; node; node++) { + for(list_node_t *node = list.head; node; node = node->next) { char *data = node->data; if(!strcmp(data, var)) { putenv(data); return; } } - char *data = strcmp(var); - list_insert_tail(list, data); + char *data = xstrdup(var); + list_insert_tail(&list, data); putenv(data); #endif }