=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/doas/doas.c,v retrieving revision 1.11 retrieving revision 1.12 diff -c -r1.11 -r1.12 *** src/usr.bin/doas/doas.c 2015/07/20 00:54:01 1.11 --- src/usr.bin/doas/doas.c 2015/07/20 00:57:53 1.12 *************** *** 1,4 **** ! /* $OpenBSD: doas.c,v 1.11 2015/07/20 00:54:01 tedu Exp $ */ /* * Copyright (c) 2015 Ted Unangst * --- 1,4 ---- ! /* $OpenBSD: doas.c,v 1.12 2015/07/20 00:57:53 tedu Exp $ */ /* * Copyright (c) 2015 Ted Unangst * *************** *** 199,222 **** char **envp; const char **extra; int ei; - int i, ii, j, jj; int nsafe, nbad; int nextras = 0; nbad = arraylen(badset); if ((rule->options & KEEPENV) && !rule->envlist) { ! j = arraylen(oldenvp); ! envp = reallocarray(NULL, j + 1, sizeof(char *)); if (!envp) err(1, "reallocarray"); ! for (ii = i = 0; i < j; i++) { ! for (jj = 0; jj < nbad; jj++) { ! size_t len = strlen(badset[jj]); ! if (strncmp(oldenvp[i], badset[jj], len) == 0) { break; } } ! if (jj == nbad) { if (!(envp[ii] = strdup(oldenvp[i]))) err(1, "strdup"); ii++; --- 199,223 ---- char **envp; const char **extra; int ei; int nsafe, nbad; int nextras = 0; nbad = arraylen(badset); if ((rule->options & KEEPENV) && !rule->envlist) { ! size_t i, ii; ! size_t oldlen = arraylen(oldenvp); ! envp = reallocarray(NULL, oldlen + 1, sizeof(char *)); if (!envp) err(1, "reallocarray"); ! for (ii = i = 0; i < oldlen; i++) { ! size_t j; ! for (j = 0; j < nbad; j++) { ! size_t len = strlen(badset[j]); ! if (strncmp(oldenvp[i], badset[j], len) == 0) { break; } } ! if (j == nbad) { if (!(envp[ii] = strdup(oldenvp[i]))) err(1, "strdup"); ii++; *************** *** 228,235 **** --- 229,238 ---- nsafe = arraylen(safeset); if ((extra = rule->envlist)) { + size_t i; nextras = arraylen(extra); for (i = 0; i < nsafe; i++) { + size_t j; for (j = 0; j < nextras; j++) { if (strcmp(extra[j], safeset[i]) == 0) { extra[j--] = extra[nextras--];