Greetings, I found a regression in src/lib/libc/stdlib/getenv.c during tracking strange behaviour of the sshguard-pf. In short, setenv() doesn't add an entry to environ[] if the name was once removed by unsetenv(). I'm suspecting the function __setenv() lacks care of the case to reuse a deactivated entry and it needs the following change: --- lib/libc/stdlib/getenv.c.orig 2007-07-21 08:30:13.000000000 +0900 +++ lib/libc/stdlib/getenv.c 2007-09-10 08:07:22.732672106 +0900 _at__at_ -492,7 +492,7 _at__at_ __setenv(const char *name, size_t nameLe newEnvActive++; /* No need to rebuild environ if the variable was reused. */ - if (reuse) + if (reuse && newEnvActive == envActive) return (0); else return (__rebuild_environ(newEnvActive)); A small testcase is attached. It should emit: expecting "foo": foo expecting "bar": bar With current broken setenv(), it would emit: expecting "foo": foo expecting "bar": -- -|-__ YAMAMOTO, Taku | __ < <taku_at_tackymt.homeip.net> - A chicken is an egg's way of producing more eggs. -Received on Sun Sep 09 2007 - 21:14:29 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:39:17 UTC