From 6326ab374ede4fff1e8019a50d4b9854b8db7625 Mon Sep 17 00:00:00 2001 From: Ben Hutchings Date: Fri, 22 Jan 2016 20:13:35 +0000 Subject: [PATCH] Fix script environment variable setting for empty lists When setting an environment variable as a space-separated list, and the list is empty, we must not delete the '=' before the value. In practice putenv() is likely to discard the invalid string, leaving the variable unset, but this is not guaranteed. Signed-off-by: Ben Hutchings --- src/script.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/script.c b/src/script.c index 3579331..1533510 100644 --- a/src/script.c +++ b/src/script.c @@ -105,7 +105,9 @@ static void ipv6_to_env(const char *name, buf_len += strlen(&buf[buf_len]); buf[buf_len++] = ' '; } - buf[buf_len - 1] = '\0'; + if (buf[buf_len - 1] == ' ') + buf_len--; + buf[buf_len] = '\0'; putenv(buf); } @@ -126,7 +128,9 @@ static void fqdn_to_env(const char *name, const uint8_t *fqdn, size_t len) buf_len += strlen(&buf[buf_len]); buf[buf_len++] = ' '; } - buf[buf_len - 1] = '\0'; + if (buf[buf_len - 1] == ' ') + buf_len--; + buf[buf_len] = '\0'; putenv(buf); } @@ -201,7 +205,9 @@ static void entry_to_env(const char *name, const void *data, size_t len, enum en buf[buf_len++] = ' '; } - buf[buf_len - 1] = '\0'; + if (buf[buf_len - 1] == ' ') + buf_len--; + buf[buf_len] = '\0'; putenv(buf); } @@ -220,7 +226,9 @@ static void search_to_env(const char *name, const uint8_t *start, size_t len) *c++ = ' '; } - c[-1] = '\0'; + if (c[-1] == ' ') + c--; + *c = '\0'; putenv(buf); } -- 2.25.1