From 3044697baa8e098a31f8049194d7cf1890363cb2 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Sat, 5 Mar 2016 19:02:50 -0800 Subject: Prefer the first, not last, of any env var duplicates If envp contains duplicate environment variables, use the first value, not the last value. Fixes #2784. --- src/env.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'src/env.cpp') diff --git a/src/env.cpp b/src/env.cpp index e6deec52..28ea51b0 100644 --- a/src/env.cpp +++ b/src/env.cpp @@ -449,12 +449,16 @@ void env_init(const struct config_paths_t *paths /* or NULL */) is to insert valid data */ - /* - Import environment variables - */ - for (char **p = (environ ? environ : __environ); p && *p; p++) + /* Import environment variables. Walk backwards so that the first one out of any duplicates wins (#2784) */ + const char * const * envp = (environ ? environ : __environ); + size_t i = 0; + while (envp && envp[i]) + { + i++; + } + while (i--) { - const wcstring key_and_val = str2wcstring(*p); //like foo=bar + const wcstring key_and_val = str2wcstring(envp[i]); //like foo=bar size_t eql = key_and_val.find(L'='); if (eql == wcstring::npos) { -- cgit v1.2.3